<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[D.S. Chapman's RSS Feed]]></title><description><![CDATA[The website and digital home of writer and poet D.S. Chapman. Explore for articles, poetry, and other projects including my recent book - Seasons of Thought.]]></description><link>https://www.dschapman.com</link><generator>GatsbyJS</generator><lastBuildDate>Mon, 11 Nov 2024 18:19:00 GMT</lastBuildDate><item><title><![CDATA[Editing a Year]]></title><description><![CDATA["Good writing is editing." I know this is true. There are many thoughts that can be expressed more simply and many more that don't need to…]]></description><link>https://www.dschapman.com/blog/2022/12/editing-a-year</link><guid isPermaLink="false">https://www.dschapman.com/blog/2022/12/editing-a-year</guid><pubDate>Tue, 27 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;“Good writing is editing.” I know this is true. There are many thoughts that can be expressed more simply and many more that don’t need to be expressed. Strunk and White’s &lt;em&gt;Elements of Style&lt;/em&gt; is an arsenal in the endeavor of editing, so too is Zinser’s &lt;em&gt;On Writing Well&lt;/em&gt;. Both stress the elimination of &lt;div tiptext=&quot;badly designed, unnecessarily complicated, or unwanted code or software...or in this case words&quot;&gt;cruft&lt;/div&gt; . Anyone who has studied writing will eventually have heard of the importance of editing enough that they will at some point have the thought, “Perhaps the best way to produce good editing, and therefore good writing is to refrain from writing at all.” Restraint is perhaps the most reliable way to prevent odious writing. &lt;/p&gt;&lt;p&gt;The other option is to overproduce. Fill the vats with an excess of ripe words, and then at certain points skim from the top only the most refined and expertly distilled bottles of finely crafted writing. After all if you don’t get your 10,000 hours in you will never be a true master. &lt;div&gt;This comes from Malcolm Gladwell’s Book &lt;em&gt;Outliers&lt;/em&gt; which I haven’t yet read.&lt;/div&gt;&lt;/p&gt;&lt;p&gt;There are those who fall into both camps. I have fallen into both camps at different points in my life and I have found that at times both silence and cacophony can produce writing that to me is both clarifying and beautiful.&lt;/p&gt;&lt;p&gt;Writing is also a part of how I process my year and as I come to a year that started with me writing more frequently&lt;div&gt;Remember when &lt;a href=&quot;/blog/2022/01/2022-the-year-of-the-blog&quot;&gt;2022 was the year of the blog?&lt;/a&gt;&lt;/div&gt; and ended with a distinct lack of writing I’m left with the question how do you edit a year? It’s an easier question to answer when I have a lot of material to work with. Then its a question of linking and arranging until I have a neat summary of everything produced, written, and accomplished. When I haven’t written, have barely journaled, I have done a form of editing already — an editing by restraint — but the final result is still unfinished. &lt;/p&gt;&lt;p&gt;Perhaps in actuality the editing of a glut of materials would be just as difficult, but writing after a silence requires a cultivated pause - a silence before speaking. What if the sound that breaks the silence isn’t beautiful, isn’t clarifying and only adds to the noise within? These are the fears that rise as I edit my year and update the events that happened, the miles I ran, and the books I read in the notes I keep for myself. This is the fear that asks, “Are these thoughts worth writing, worth sharing?”&lt;/p&gt;&lt;p&gt;Earlier, as I was writing this, I said that I have produced writing “that &lt;strong&gt;to me&lt;/strong&gt; is both clarifying and beautiful”. That “to me” matters because if the writing helps me to understand, helps me to clarify, helps me to appreciate, then it has found a home in the first audience that matters. &lt;/p&gt;&lt;p&gt;If good writing is good editing, good editing like good writing should be done first for yourself. To edit a year, begin by making sense of it for yourself. &lt;/p&gt;</content:encoded></item><item><title><![CDATA[Data, Writing, and Time]]></title><description><![CDATA[Handwriting is a funny thing. When I think back to those early days of school and all those lined sheets where we would write out our A's…]]></description><link>https://www.dschapman.com/blog/2022/05/data-writing-and-time</link><guid isPermaLink="false">https://www.dschapman.com/blog/2022/05/data-writing-and-time</guid><pubDate>Fri, 27 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Handwriting is a funny thing. When I think back to those early days of school and all those lined sheets where we would write out our A’s our cursive capital Q’s and eventually sentences - I remember getting the paper back. In my memory it was often filled with small little circles where I had crossed the line or mis-shaped a curve in my haste to finish and get back to the fun part of school - reading and racing to be the first one done with sum tables so I could draw castles on the back.  &lt;/p&gt;&lt;p&gt;Yet that is the foundation of all my writing. All the essays, emails, blogs, articles, odd notes, love notes, poems, reminders, and more all trace back to repeated tracing of &lt;a href=&quot;https://en.wikipedia.org/wiki/D%27Nealian&quot;&gt;D’Nealian&lt;/a&gt; workbooks. My handwriting is a foundation of my data.&lt;/p&gt;&lt;p&gt;Data is a funny word. It’s all around us, stored about us or by us, we give consent to its use when we use a website, we are taught about its implications and its uses. Data is from a latin word. It can be translated - given things, or gifts. Data is a gift.&lt;/p&gt;&lt;p&gt;Now if data is a gift that has some implications. The largest one is that data is not something that originates with us. You could say that if we’re following this entomological rabbit hole that is is inherited.&lt;div&gt;I went down a rabbit hole after writing this sentence where I Iearned that the first known English use of the word data is by a Royalist minister named &lt;a href=&quot;https://en.wikipedia.org/wiki/Henry_Hammond&quot;&gt;Henry Hammond&lt;/a&gt; during the time of the English Civil War. Although given we live in a data-driven world it seems that far too little has been written about this connection.&lt;/div&gt;&lt;/p&gt;&lt;p&gt;One of the things that is inherited about data is its forms and standards. I had little choice in the type of handwriting I was taught. We also are given most of the forms we use to store data today. Whether that’s &lt;a href=&quot;https://en.wikipedia.org/wiki/UTF-8&quot;&gt;UTF-8&lt;/a&gt; or the annoying HEIC, iPhone photo format that never seems to open on my Windows work computer when I’m trying to attach a receipt to an expense report. The data we work with, collect, and attach to forms is in a received format — and often those received formats are…frustrating.&lt;div&gt;The history of how we store text digitally is so fascinating. There’s many interesting videos on this but this one sticks with me as a good introduction: &lt;a href=&quot;https://www.youtube.com/watch?v=MijmeoH9LT4&quot;&gt;Computers, Symbols and the Unicode - Computerphile&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;The data we receive is tangled over a long history that predates even the first usage of the word data in a theological treatise in the 1646.&lt;div&gt;The best source on this I found was &lt;a href=&quot;https://projects.iq.harvard.edu/files/eswg/files/rosenburg_-_rawdata.pdf&quot;&gt;this article&lt;/a&gt; by Daniel Rosenberg.&lt;/div&gt; And we leave a tangled web of data in our wake — filesystems we’re going to organize eventually, emails filled with advertisements and precious notes from dead grandparents, the W2s we meant to scan but stay in that filing cabinet, and not to mention our library of photo memories. &lt;/p&gt;&lt;p&gt;And eventually all of our data are gifts for somebody else to sort through, pick up and wonder what it was for, or to throw away. And like many things we are given by those who came before us, they are often at their best a bit of a glorious, mixed bag.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Automate Git Submodule Updates with Script Kit]]></title><description><![CDATA[A short guide on how I update git submodules using script kit to publish this website]]></description><link>https://www.dschapman.com/articles/automate-git-submodule-updates-with-script-kit</link><guid isPermaLink="false">https://www.dschapman.com/articles/automate-git-submodule-updates-with-script-kit</guid><pubDate>Wed, 23 Mar 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I love my website. I’ve slowly developed it since 2018, slowly iterating and piecing it together feature by feature. One thing that’s bothered me for a while is how I publish content on my website. Ever since I started, this website has been structured around markdown files holding the content. Markdown is easy to write, easy to store locally, and flexible I love using it to store my content. Markdown is not the problem.&lt;/p&gt;&lt;p&gt;What I haven’t loved is the process of issuing all of the git commands necessary to publish that markdown. You see, &lt;a href=&quot;https://www.taniarascia.com/git-submodules-private-content/&quot;&gt;I use git submodules&lt;/a&gt; to store my website content in two separate private git repositories which I then have to update and commit on my website’s repository, before pushing to Netlify to publish my website.&lt;div&gt;One of my directories hold my poems, articles, and blog posts, the other contains my &lt;a href=&quot;/notes/notes&quot; title=&quot;notes&quot;&gt;[[notes]]&lt;/a&gt;&lt;/div&gt; It’s a process involving terminal windows in multiple directories and a whole list of git commands I sometimes have to google to get the syntax right. It’s a perfect problem to solve with scripting. &lt;/p&gt;&lt;p&gt;Sometime since I started coding websites almost 4 years ago I picked up the adage that the first time you notice a tedious process ignore it, the second time note it down, and the third time try to automate it. I don’t live by this adage because if I did I would have fixed this problem a long time ago. &lt;/p&gt;&lt;p&gt;Scripting is the obvious solution to a problem that involves issuing commands in multiple directories automatically. But the barrier to writing and using a script can be high. I have to write the script, store it on my PATH, open a terminal, and run the script. It’s not an inordinate amount of steps, but it’s been enough that I haven’t gotten around to it.&lt;/p&gt;&lt;p&gt;Enter &lt;a href=&quot;https://www.scriptkit.com/&quot;&gt;Script Kit&lt;/a&gt; an automation tool that allows you to write and execute a library of scripts simply by running the program and selecting the script you want to run. Since I started playing around with it, I’ve found that it lowers the barrier to entry both to writing and executing scripts. It’s packaged with easy to use libraries that expose everything from the terminal to an aesthetically pleasing GUI.&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position:relative;display:block;margin-left:auto;margin-right:auto;max-width:1380px&quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;https://www.dschapman.com/static/9288891fc50242a9dc1d198f288e6cda/2dc7d/script-kit-screenshot.png&quot; style=&quot;display:block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom:67.24637681159422%;position:relative;bottom:0;left:0;background-image:url(&amp;#x27;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfklEQVQ4y5WSy07CUBCGT6K79iW4nEtvpJzeLwFMCDFG44bARsOz8ShupG7Ymq55CvHgmCktajQITb7MaTrznb/JEELIhZRymWXZJgzD1zzPyyzLyiRJyiSOqxpFURnXZ8ZYRRAEJfbizGg02vi+v0QXIYRotm2vPS8Aw7SACwNETXU2DDD+wTRNoJSu0YVCPU+j1f3dBG5vxturYaKiwFVpLFUWSxUGUkkplSf39Q+2nueB4zjP6KqEgd8vricjmIwHKgldCP0eSNcC6RrQc8wqwRGUZVnAGCsOQtOyiihOwO1Lhb9tWjZwLoBSDoxx4PwoCmun0/kS2rZdpGmKsRVjtGoUAhGnoLD+ELbb7YIxhrHV9+a9+LgQE/4S4ktz2ymSU4Sr5iPn/ONMGuHqIOx2uy+4T0KI3TnpanY4i45GqLVarSdKKS7nG6X0/UxwBtDRLPalpmkDXdcXuq4/1DyeSNO/QAe6UEiGwyGZTqdkPp+T2Wx2FjiDs+jA5xMg/jxFuU0W/gAAAABJRU5ErkJggg==&amp;#x27;);background-size:cover;display:block&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;My Script in action&quot; title=&quot;My Script in action&quot; src=&quot;https://www.dschapman.com/static/9288891fc50242a9dc1d198f288e6cda/b1001/script-kit-screenshot.png&quot; srcSet=&quot;https://www.dschapman.com/static/9288891fc50242a9dc1d198f288e6cda/e4d6b/script-kit-screenshot.png 345w,/static/9288891fc50242a9dc1d198f288e6cda/1e043/script-kit-screenshot.png 690w,/static/9288891fc50242a9dc1d198f288e6cda/b1001/script-kit-screenshot.png 1380w,/static/9288891fc50242a9dc1d198f288e6cda/2dc7d/script-kit-screenshot.png 1760w&quot; sizes=&quot;(max-width: 1380px) 100vw, 1380px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;/&gt;
  &lt;/a&gt;
    &lt;/span&gt;
Now my publication process is: 1. Write article, poem, blog. 2. Press &lt;code class=&quot;language-text&quot;&gt;&amp;lt;CMD&amp;gt;+;&lt;/code&gt; on my keyboard to run script kit, selecting my Publish Website script. 3. Wait for Netlify to publish my website. &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://scriptkit.com&quot;&gt;Script Kit&lt;/a&gt; is a wonderful tool.&lt;/p&gt;&lt;p&gt;&lt;em&gt;The full code for my script is &lt;a href=&quot;https://github.com/dschapman/dschapman-shared-kenv/blob/master/scripts/publish-website.js&quot;&gt;on github&lt;/a&gt; You can also directly install the script if you have Script Kit using &lt;a href=&quot;kit://snippet?name=publish-website&amp;amp;content=Ly8gTmFtZTogUHVibGlzaCBXZWJzaXRlCi8vIERlc2NyaXB0aW9uOiBVcGRhdGUgdGhlIGdpdCByZXBvc2l0b3JpZXMgbmVjZXNzYXJ5IHRvIHB1Ymxpc2ggYW4gdXBkYXRlIHRvIG15IHdlYnNpdGUuCi8vIEF1dGhvcjogRGFuaWVsIENoYXBtYW4KLy8gVHdpdHRlcjogQGRzX2NoYXBtYW4KaW1wb3J0ICJAam9obmxpbmRxdWlzdC9raXQiCgpsZXQgd2Vic2l0ZV9jb250ZW50ID0gIi9Vc2Vycy9kYW5pZWxjaGFwbWFuL0xpYnJhcnkvTW9iaWxlIERvY3VtZW50cy9pQ2xvdWR-bWR-b2JzaWRpYW4vRG9jdW1lbnRzL2RzY2hhcG1hbi1jb20tY29udGVudCIKbGV0IHdlYnNpdGVfbm90ZXMgPSAiL1VzZXJzL2RhbmllbGNoYXBtYW4vTGlicmFyeS9Nb2JpbGUgRG9jdW1lbnRzL2lDbG91ZH5tZH5vYnNpZGlhbi9Eb2N1bWVudHMvTXkgbm90ZXMiCmxldCB3ZWJzaXRlX2RpciA9ICIvVXNlcnMvZGFuaWVsY2hhcG1hbi9naXRodWIvZHNjaGFwbWFuL2RzY2hhcG1hbi1jb20iCgpsZXQgdG9kYXkgPSBEYXRlKCkKbGV0IG91dHB1dCA9IFtdCmxldCBpbnB1dCA9IGF3YWl0IGFyZygiUHVibGlzaDoiLCBbeyBuYW1lOiAiV2Vic2l0ZSBDb250ZW50IiwgZGVzY3JpcHRpb246ICJQdWJsaXNoIGFueSBjaGFuZ2VzIHRvIHBvZW1zLCBhcnRpY2xlcyBvciBibG9nIHBvc3RzIiwgInZhbHVlIjogIldlYnNpdGUgQ29udGVudCIgfSwgeyBuYW1lOiAiV2Vic2l0ZSBOb3RlcyIsIGRlc2NyaXB0aW9uOiAiUHVibGlzaCBhbnkgY2hhbmdlcyB0byBwdWJsaWMgbm90ZXMiLCB2YWx1ZTogIldlYnNpdGUgTm90ZXMiICB9LCB7bmFtZTogIkFsbCBDb250ZW50IiwgZGVzY3JpcHRpb246IlB1Ymxpc2ggaXQgYWxsIiwgdmFsdWU6ICJBbGwgQ29udGVudCJ9XSkKLy8gLUMgYWxsb3dzIGdpdCB0byBiZSBydW4gZnJvbSBhbnkgZGlyZWN0b3J5CnN3aXRjaCAoaW5wdXQpIHsKICAgIGNhc2UgIldlYnNpdGUgQ29udGVudCI6CiAgICAgICAgb3V0cHV0LnB1c2goYXdhaXQgZXhlYyhgZ2l0IC1DICIke3dlYnNpdGVfY29udGVudH0iIGFkZCAtQWApKQogICAgICAgIG91dHB1dC5wdXNoKGF3YWl0IGV4ZWMoYGdpdCAtQyAiJHt3ZWJzaXRlX2NvbnRlbnR9IiBjb21taXQgLW0gIlB1Ymxpc2ggY29udGVudDogJHt0b2RheS50b1N0cmluZygpfSJgKSkKICAgICAgICBvdXRwdXQucHVzaChhd2FpdCBleGVjKGBnaXQgLUMgIiR7d2Vic2l0ZV9jb250ZW50fSIgcHVzaGApKQogICAgICAgIG91dHB1dC5wdXNoKGF3YWl0IGV4ZWMoYGdpdCAtQyAiJHt3ZWJzaXRlX2Rpcn0iIHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGVgKSkKICAgICAgICBvdXRwdXQucHVzaChhd2FpdCBleGVjKGBnaXQgLUMgIiR7d2Vic2l0ZV9kaXJ9IiBhZGQgZHNjaGFwbWFuLWNvbS1jb250ZW50YCkpCiAgICAgICBvdXRwdXQucHVzaChhd2FpdCBleGVjKGBnaXQgLUMgIiR7d2Vic2l0ZV9kaXJ9IiBjb21taXQgLW0gIlB1Ymxpc2ggY29udGVudDogJHt0b2RheS50b1N0cmluZygpfSJgKSkKICAgICAgICBvdXRwdXQucHVzaChhd2FpdCBleGVjKGBnaXQgLUMgIiR7d2Vic2l0ZV9kaXJ9IiBwdXNoYCkpCiAgICAgICAgYnJlYWs7CiAgICBjYXNlICJXZWJzaXRlIE5vdGVzIjoKICAgICAgICBvdXRwdXQucHVzaChhd2FpdCBleGVjKGBnaXQgLUMgIiR7d2Vic2l0ZV9ub3Rlc30iIGFkZCAtQWApKQogICAgICAgIG91dHB1dC5wdXNoKGF3YWl0IGV4ZWMoYGdpdCAtQyAiJHt3ZWJzaXRlX25vdGVzfSIgY29tbWl0IC1tICJQdWJsaXNoIGNvbnRlbnQ6ICR7dG9kYXkudG9TdHJpbmcoKX0iYCkpCiAgICAgICAgb3V0cHV0LnB1c2goYXdhaXQgZXhlYyhgZ2l0IC1DICIke3dlYnNpdGVfbm90ZXN9IiBwdXNoYCkpCiAgICAgICAgb3V0cHV0LnB1c2goYXdhaXQgZXhlYyhgZ2l0IC1DICIke3dlYnNpdGVfZGlyfSIgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZWApKQogICAgICAgIG91dHB1dC5wdXNoKGF3YWl0IGV4ZWMoYGdpdCAtQyAiJHt3ZWJzaXRlX2Rpcn0iIGFkZCBNeS1ub3Rlc2ApKQogICAgICAgIG91dHB1dC5wdXNoKGF3YWl0IGV4ZWMoYGdpdCAtQyAiJHt3ZWJzaXRlX2Rpcn0iIGNvbW1pdCAtbSAiUHVibGlzaCBub3RlczogJHt0b2RheS50b1N0cmluZygpfSJgKSkKICAgICAgICBvdXRwdXQucHVzaChhd2FpdCBleGVjKGBnaXQgLUMgIiR7d2Vic2l0ZV9kaXJ9IiBwdXNoYCkpCiAgICAgICAgYnJlYWs7CiAgICBjYXNlICJBbGwiOgogICAgICAgIG91dHB1dC5wdXNoKGF3YWl0IGV4ZWMoYGdpdCAtQyAiJHt3ZWJzaXRlX2NvbnRlbnR9IiBhZGQgLUFgKSkKICAgICAgICBvdXRwdXQucHVzaChhd2FpdCBleGVjKGBnaXQgLUMgIiR7d2Vic2l0ZV9jb250ZW50fSIgY29tbWl0IC1tICJQdWJsaXNoIGNvbnRlbnQ6ICR7dG9kYXkudG9TdHJpbmcoKX0iYCkpCiAgICAgICAgb3V0cHV0LnB1c2goYXdhaXQgZXhlYyhgZ2l0IC1DICIke3dlYnNpdGVfY29udGVudH0iIHB1c2hgKSkKICAgICAgICBvdXRwdXQucHVzaChhd2FpdCBleGVjKGBnaXQgLUMgIiR7d2Vic2l0ZV9ub3Rlc30iIGFkZCAtQWApKQogICAgICAgIG91dHB1dC5wdXNoKGF3YWl0IGV4ZWMoYGdpdCAtQyAiJHt3ZWJzaXRlX25vdGVzfSIgY29tbWl0IC1tICJQdWJsaXNoIGNvbnRlbnQ6ICR7dG9kYXkudG9TdHJpbmcoKX0iYCkpCiAgICAgICAgb3V0cHV0LnB1c2goYXdhaXQgZXhlYyhgZ2l0IC1DICIke3dlYnNpdGVfbm90ZXN9IiBwdXNoYCkpCiAgICAgICAgb3V0cHV0LnB1c2goYXdhaXQgZXhlYyhgZ2l0IC1DICIke3dlYnNpdGVfZGlyfSIgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZWApKQogICAgICAgIG91dHB1dC5wdXNoKGF3YWl0IGV4ZWMoYGdpdCAtQyAiJHt3ZWJzaXRlX2Rpcn0iIGFkZCBNeS1ub3RlcyBkc2NoYXBtYW4tY29tLWNvbnRlbnRgKSkKICAgICAgICBvdXRwdXQucHVzaChhd2FpdCBleGVjKGBnaXQgLUMgIiR7d2Vic2l0ZV9kaXJ9IiBjb21taXQgLW0gIlB1Ymxpc2ggYWxsIGNvbnRlbnQ6ICR7dG9kYXkudG9TdHJpbmcoKX0iYCkpCiAgICAgICAgb3V0cHV0LnB1c2goYXdhaXQgZXhlYyhgZ2l0IC1DICIke3dlYnNpdGVfZGlyfSIgcHVzaGApKQogICAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgICBicmVhazsKfQoKb3V0cHV0LmZvckVhY2goaXRlbSA9PiB7CiAgICBjb25zb2xlLmxvZyhpdGVtLnN0ZG91dCkKfSkKCg&quot;&gt;this link&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Spring, Eternity, Beauty]]></title><description><![CDATA[What gain has the worker from his toil? I have seen the business that God has given to the children of man to be busy with.  He has made…]]></description><link>https://www.dschapman.com/blog/2022/03/spring-eternity-beauty</link><guid isPermaLink="false">https://www.dschapman.com/blog/2022/03/spring-eternity-beauty</guid><pubDate>Tue, 22 Mar 2022 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;&lt;p&gt;What gain has the worker from his toil? I have seen the business that God has given to the children of man to be busy with. &lt;strong&gt;He has made everything beautiful in its time.&lt;/strong&gt; Also, he has put eternity into man’s heart, yet so that he cannot find out what God has done from the beginning to the end. — Ecclesiastes 3:9-11&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;There are days and weeks where I can’t seem to tell the end from the beginning. Springtime is one of those times where all of a sudden time seems to start again. I remember winter, I have plenty of wonderful memories from this winter, and yet the sun comes out, the air smells fresh and my mood elevates by several points. &lt;/p&gt;&lt;p&gt;There are weeks when work feels like work. And working on never-ending word documents, and tracing the same edit across multiple iterations of insanely long word documents certainly feels like work. But Spring comes like a breath of fresh air, bringing beauty just in time. &lt;/p&gt;&lt;p&gt;I’ve been gardening recently. Now when I say gardening I wish I meant what you thought. I don’t know what sort of garden you imagined, but I wish it was what I had in mind. I rent a home. So all of the gardening I will be doing this year will be in containers on my porch and in my house. But I am thrilled. &lt;/p&gt;&lt;p&gt;I’ve been documenting my gardening journey on Twitter in one big thread. I hope that by the middle of summer the thread will be capped off with pictures of fresh cherry tomatoes and bell peppers. &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/ds_chapman/status/1503387165270683648&quot;&gt;https://twitter.com/ds_chapman/status/1503387165270683648&lt;/a&gt;&lt;/p&gt;&lt;p&gt;But I don’t know what’s going to come in time. I don’t know what the next season holds, and I’m only just discovering what this one holds. Yet just as I truly believe that “he has made everything beautiful in its time”, I also believe that in some weird way eternity is in our same hearts that are bound up into the flow of time. &lt;/p&gt;&lt;p&gt;When I look at the fresh new seedlings and catch the first scent of bruised tomato leaves. I experience something beautiful and for one fleeting moment sense eternity.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How Temperatures have Changed in the Places I’ve Called Home]]></title><description><![CDATA[Unscientific temperature analysis of places I've lived and reflections on how we interact with our homes.]]></description><link>https://www.dschapman.com/articles/how-temperatures-have-changed</link><guid isPermaLink="false">https://www.dschapman.com/articles/how-temperatures-have-changed</guid><pubDate>Sun, 13 Mar 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;As a disclaimer to this article, I am neither a statistician nor a scientist, just a curious person with a computer.&lt;/em&gt; &lt;/p&gt;&lt;p&gt;Have you ever wondered how much the temperatures have changed? I don’t mean how much they’ve changed globally you’ll see articles about that every couple months. What I mean is how much have temperatures changed where you live? I have. It’s a question that shouldn’t be too hard to figure out. The data is publicly available and the tools to work with the data are also easy to access.&lt;/p&gt;&lt;p&gt; So after a little bit of Google searching, a venture into learning a data anlysis library for the programming language pyhon, and a visit to the National Oceanic and Atmospheric Administration data request form I present to you how the temperatures have changed in the places I’ve called home from 1950 to the present. &lt;div&gt;I looked, but there was no consistent data for Grove City, PA where I went to college.&lt;/div&gt;
&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position:relative;display:block;margin-left:auto;margin-right:auto;max-width:876px&quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;https://www.dschapman.com/static/c8410731c45831f558bcbf7bbf6e8f1d/1b1d5/avg-yearly-temperature-home.png&quot; style=&quot;display:block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom:41.44927536231884%;position:relative;bottom:0;left:0;background-image:url(&amp;#x27;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABdElEQVQoz32SbYujQBCE/f8/bT/sHtnEnWh2daPGcXR8GV9mVJLnUI4lcNwVFBRNU91Nl7csC8ZY+t5hzETfW7TukFIjZUWhGsZxZRgWejPRtD1uXtnweDx2PsNblhUpW26poix6SjVQlhtH8rzilko+o5hzKHg/vOALfx8Ajx/DZ2Nvnheym+J4ekX4r4TvL/j+G0Ic+BAHTucD/scb4vzO+SJIM8U4zvwLXtt0ZLIivAj84ISIQq5JQvQZkKc3krxElYZaW3Q9oVTPMDicc3RdR5ZlNE3D/X7ft/RMZ8hygx9q/IsmTlqSrCVOaqJvTXytia6a9NbwndSkWcMwWApVEEUxcRyTJAlaa6y1eOuy7s2nQBJ8lRwDiR8WiIviFBQ/+niW/PLzXU//O3meZ0plKEtDVfUURUd81eSyRVf9Xt+41ZUySNntJz9/+ZneFhtrZ8bRMYx219Y6xtFS1x3OrRgzMs9bdCacW5gm+8eQv2LzG+MIXrQaoLeDAAAAAElFTkSuQmCC&amp;#x27;);background-size:cover;display:block&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;avg yearly temperature home&quot; title=&quot;avg yearly temperature home&quot; src=&quot;https://www.dschapman.com/static/c8410731c45831f558bcbf7bbf6e8f1d/1b1d5/avg-yearly-temperature-home.png&quot; srcSet=&quot;https://www.dschapman.com/static/c8410731c45831f558bcbf7bbf6e8f1d/e4d6b/avg-yearly-temperature-home.png 345w,/static/c8410731c45831f558bcbf7bbf6e8f1d/1e043/avg-yearly-temperature-home.png 690w,/static/c8410731c45831f558bcbf7bbf6e8f1d/1b1d5/avg-yearly-temperature-home.png 876w&quot; sizes=&quot;(max-width: 876px) 100vw, 876px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;/&gt;
  &lt;/a&gt;
    &lt;/span&gt;
What you’re seeing are the yearly average temperatures from a weather station in the city that had data for that whole period along with a simple regression analysis from the tool I used to do the graphing &lt;div&gt;I used the python library pandas along with the graphing library seaborn.&lt;/div&gt;. And if you’re looking for me to infer from that what’s going to happen in the coming years you came to the wrong website (at least currently). I’m no climate scientist and this was not a systemic look at all available weather data in those three places. &lt;/p&gt;&lt;p&gt;But as I look at the data from three places I’ve loved, I do see superficial changes. D.C. and Roanoke saw average yearly temperatures go up close to two degrees over that period and if we look at the average minimum yearly temperature for that period the average minimum temperature increased even further. This could mean earlier last frost dates,&lt;a href=&quot;https://extension.umn.edu/fruit-and-vegetable-insects/squash-bugs#:~:text=The%20adults%20fly%20or%20crawl%20to%20sheltered%20places%20for%20the%20winter.%20The%20nymphs%20die%20when%20temperatures%20drop%20to%20freezing.&quot;&gt; insects that don’t get killed as often by a freeze&lt;/a&gt;, and other impacts I’m sure. I find that so interesting. Not because it necessarily says anything about global temperatures&lt;div&gt;I’m sure it has some relation, but I have no idea how you calculate something like that.&lt;/div&gt;, but because it says something about the place I call home and my experience of it. &lt;/p&gt;&lt;p&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position:relative;display:block;margin-left:auto;margin-right:auto;max-width:876px&quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;https://www.dschapman.com/static/59be82d9b0bc00851e6e9a7e54930dfa/1b1d5/avg-minimum-temperature-home.png&quot; style=&quot;display:block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom:41.44927536231884%;position:relative;bottom:0;left:0;background-image:url(&amp;#x27;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABdElEQVQoz32S246bQBBE+f/vykM28mYTXyBADNjENsyF4T6DV/aJIFZkKdqUVKp+qu6ubu96fadtLV3n6DpLXfcUhaIoNEKYRY0ZGMcbbdNjtMFN78y43+8Ln+FN05WybLmcFUJ0KGXR2iLVQFkYZGHIDkf8YMPm7RO7H1uGcTa8/zV8Nvacm7iUFfHPkH0UkEYBkf+NKPLZ+l/Z7F7xgzeicMs+TTifNcMw8RG8pulIjydeVp9Zvb6w3q2I9xH7OKC4lOSFpChrjJmoqhEpWvre4ZyjaRpOpxPGGG632zKl17Yt+anmy/rM91CyDiVRqgkTwTb4xS6S+HFJnEi2YUGSKfrBUYqSNM3Isow8z9FaY639k+HcVcoWIRrSoyZKJIe8Ij1okoMmyyviVBEmcjEe/7fynGFZNsthxMP4fKkXatWhZItS3dJ0VvFY+fnKz/TmLKydGEfHMNiltkvtqEzDNM1vNSza9SPOXRlH+zDkn7f5DTwSXoJq9J6pAAAAAElFTkSuQmCC&amp;#x27;);background-size:cover;display:block&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;avg minimum temperature home&quot; title=&quot;avg minimum temperature home&quot; src=&quot;https://www.dschapman.com/static/59be82d9b0bc00851e6e9a7e54930dfa/1b1d5/avg-minimum-temperature-home.png&quot; srcSet=&quot;https://www.dschapman.com/static/59be82d9b0bc00851e6e9a7e54930dfa/e4d6b/avg-minimum-temperature-home.png 345w,/static/59be82d9b0bc00851e6e9a7e54930dfa/1e043/avg-minimum-temperature-home.png 690w,/static/59be82d9b0bc00851e6e9a7e54930dfa/1b1d5/avg-minimum-temperature-home.png 876w&quot; sizes=&quot;(max-width: 876px) 100vw, 876px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;/&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;&lt;p&gt;The days we live in are complicated, messy, and filled with unknowns and there are no easy answers as we try to figure out how to live in them.  Part of my answer is paying attention to the weather and learning how its changing. Part of my answer is learning the places and people around me better. And part of my answer is paying attention to the birds outside my window.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/ds_chapman/status/1499400793727795202&quot;&gt;https://twitter.com/ds_chapman/status/1499400793727795202&lt;/a&gt;&lt;/p&gt;&lt;p&gt;There are many ways we can better learn our homes, know our neighbors, and love the world. And I don’t think there’s a single best way to start. I do think the best place to start is to start &lt;em&gt;where&lt;/em&gt; you are.&lt;/p&gt;&lt;p&gt;For further reading I recommend reading the poem &lt;a href=&quot;https://ag.arizona.edu/~steidl/Liberation.html&quot;&gt;MANIFESTO: THE MAD FARMER LIBERATION FRONT by Wendell Berry&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Ask the questions that have no answers.&lt;br/&gt;
Invest in the millennium. Plant sequoias.&lt;br/&gt;
Say that your main crop is the forest&lt;br/&gt;
that you did not plant,&lt;br/&gt;
that you will not live to harvest.&lt;br/&gt;
Say that the leaves are harvested&lt;br/&gt;
when they have rotted into the mold.&lt;br/&gt;
Call that profit. Prophesy such returns.&lt;br/&gt;
Put your faith in the two inches of humus&lt;br/&gt;
that will build under the trees&lt;br/&gt;
every thousand years.&lt;br/&gt;&lt;/p&gt;&lt;/blockquote&gt;</content:encoded></item><item><title><![CDATA[Let's Talk About the Internet]]></title><description><![CDATA[Can we talk about the internet -- the thing that for decades has been used to host blogs like this one, the place where you can follow the…]]></description><link>https://www.dschapman.com/blog/2022/02/lets-talk-about-the-internet</link><guid isPermaLink="false">https://www.dschapman.com/blog/2022/02/lets-talk-about-the-internet</guid><pubDate>Sun, 20 Feb 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Can we talk about the internet — the thing that for decades has been used to host blogs like this one, the place where you can follow the thoughts of celebrities, learn any skill on YouTube, or make your fortune? &lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1349066787l/9778945.jpg&quot; alt=&quot;The Shallows: What the Internet Is Doing To Our Brains (Cover Art)&quot;/&gt;&lt;/p&gt;&lt;p&gt;I finished &lt;em&gt;The Shallows&lt;/em&gt; a couple days ago. It’s been on my reading list for a while. In the circles I travelled in college, I remember a couple people talking about it. I was skeptical when I heard about it — the title made it pretty clear to me what the author thought about the Internet. And both in college and now I thought the internet was great! Flawed, time-sucking, and divisive, but also a place with great potential, filled with great tools, and amazing content. My post-college career in cyber security and systems engineering wouldn’t be possible without the resources and connection provided by networked computers and the ability to learn new skills on the internet. &lt;/p&gt;&lt;p&gt;But I’ve also grown increasingly interested in the topic of productivity, and specifically the question of how we efficiently organize our knowledge and our attention. And books like &lt;em&gt;The Shallows&lt;/em&gt; joins other books on my shelf including &lt;em&gt;Digital Minimalism: Choosing a Focused Life in a Noisy World&lt;/em&gt; and &lt;em&gt;Reclaiming Conversation: The Power of Talk in a Digital Age&lt;/em&gt; in sounding a warning against the inherent bent of the tools which are quickly becoming the primary place we live, move, and have our being. &lt;/p&gt;&lt;p&gt;Nicholas Carr does this in the Shallows by exploring another topic I’ve spent some time on recently — Neuroplasticity&lt;div&gt;The brain’s ability to rewire itself in response to new information, events, or experiences.&lt;/div&gt;. Anytime we use a new tool our brains change to adapt to that tool - maps change the way our neurons fire, the printing press changed our relationship with knowledge, etc. Our brains want to rewire themselves. &lt;div&gt;Much of my knowledge about neurobiology comes from the work of Dr. Curt Thompson in &lt;em&gt;Anatomy of the Soul&lt;/em&gt;&lt;/div&gt; &lt;/p&gt;&lt;p&gt;And this phenomenon and our wariness of tools that rewire our brains is not new. Socrates famously warns against writing “because they will not use their memories; they will trust to the external written characters and not remember of themselves.” Neil Postman building off the work of Marshall McLuhan&lt;div&gt;“The Medium is the Message.”&lt;/div&gt; warned against the effects of the entertainment industry. Depending on how you look at those warnings they either seem prophetically accurate or a bit of an overreaction. &lt;/p&gt;&lt;p&gt;After reading &lt;em&gt;The Shallows&lt;/em&gt; I could put it in either category — an overreaction or prophetically accurate. Nicholas Carr is writing in 2009-2010, before social media rose to the prominence it has today, before the metaverse, heck before the iPhone 4 was even released. At times its age shows. He gives the example of the Kindle and warns that the presence of a built in web browser will prevent deep reading. Anyone who has used the Kindle eReader will know the built in web browser (if they can even find it) is not easy or fun to use. I have found having a separate dedicated device actually helps me focus on reading when using my Kindle. &lt;/p&gt;&lt;p&gt;At the same time it would be naive for me to ignore the primary argument Carr makes — that the internet rewires our brain, especially our attention. I know I’ve felt this for years and this book connected that feeling to neuroplasticity a concept I understood. The internet changes the way we interact not just with the internet but the rest of the world and that matters.&lt;/p&gt;&lt;p&gt;The last thought I had reading the book and the one I’ll end this post on is this: I think neuroplasticity is our greatest weakness dealing with the internet, but it is also our greatest strength. Carr talks about the internet being a tool and as discussed it does shape our brains, but I felt like he deemphasized the role we play in using our tools. Yes, the internet shapes our brains, but I read &lt;em&gt;The Shallows&lt;/em&gt; as an invitation to use our brains to shape our tools.&lt;/p&gt;&lt;p&gt;That easier to write than to do and I intend to keep thinking about what that looks like in the coming months. &lt;/p&gt;</content:encoded></item><item><title><![CDATA[A Life that is Manual by Design]]></title><link>https://www.dschapman.com/blog/2022/02/manual-by-design</link><guid isPermaLink="false">https://www.dschapman.com/blog/2022/02/manual-by-design</guid><pubDate>Sat, 05 Feb 2022 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[How should progress be tracked?]]></title><description><![CDATA[Every year around this time I run into the same feeling -- resistance. The point when the new year's habits I want to establish into the…]]></description><link>https://www.dschapman.com/blog/2022/01/progress-tracking</link><guid isPermaLink="false">https://www.dschapman.com/blog/2022/01/progress-tracking</guid><pubDate>Mon, 10 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Every year around this time I run into the same feeling — resistance. The point when the new year’s habits I want to establish into the coming year and beyond are no longer new and interesting and so they no longer capture my imagination like they once did. Visions of growth inspired me to establish the habit and inspires me to keep going, but growth doesn’t happen in intervals that I’m good at observing. &lt;/p&gt;&lt;p&gt;Growth, progress whatever it’s name what’s the best way of tracking it, especially when growth is less like a beanstalk 🌱 and more like a redwood 🌲?&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position:relative;display:block;margin-left:auto;margin-right:auto;max-width:640px&quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom:66.66666666666666%;position:relative;bottom:0;left:0;background-image:url(&amp;#x27;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIFBAb/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAABpcvSxQogf//EABsQAAICAwEAAAAAAAAAAAAAAAECAAMREyJD/9oACAEBAAEFAmOuor0SJfaWnq64b//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABsQAAEFAQEAAAAAAAAAAAAAAAEAEBEhMQIS/9oACAEBAAY/AqOtRXIiF5OS3//EABsQAQADAQADAAAAAAAAAAAAAAEAESExQVFh/9oACAEBAAE/IQyHwuAVeS5oHohgizWTHowhOHPs/9oADAMBAAIAAwAAABBP3//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAECAQE/EGf/xAAbEAEBAAIDAQAAAAAAAAAAAAABEQAhMUFRsf/aAAgBAQABPxBzZFGkEmPE5bnWLMKALA+YVi3/ABZkAHIzT5jpvY5Jn//Z&amp;#x27;);background-size:cover;display:block&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;redwoods in mist&quot; title=&quot;redwoods in mist&quot; src=&quot;https://www.dschapman.com/static/f7a310065dd8cf4467a1457536a4debe/c08c5/redwoods-in-mist.jpg&quot; srcSet=&quot;https://www.dschapman.com/static/f7a310065dd8cf4467a1457536a4debe/8d48c/redwoods-in-mist.jpg 345w,/static/f7a310065dd8cf4467a1457536a4debe/c08c5/redwoods-in-mist.jpg 640w&quot; sizes=&quot;(max-width: 640px) 100vw, 640px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;/&gt;
    &lt;/span&gt;
Some years coastal redwoods grow an inch, on a good year they grow 2-3 feet&lt;div&gt;&lt;a href=&quot;https://www.parks.ca.gov/?page_id=22257#:~:text=In%20ideal%20conditions%20a%20coast,as%20one%20inch%20per%20year.&quot;&gt;Source&lt;/a&gt;&lt;/div&gt; but considering their size I would have a hard time perceiving any sort of growth, even if it was a good year. &lt;/p&gt;&lt;p&gt;I need ways to make my progress tangible for me on the day’s when I’m not sure there is progress and for the days that I feel like the resistance is winning. Producing something helps whether that’s writing a blog post or baking a bread. The loaf or new page on my website is a small bud of a larger movement of growth that I can return to and say, “Yes I am growing, there is progress.”&lt;/p&gt;&lt;p&gt;But what about when there isn’t an obvious product? I have two habits I’m trying to work into my mornings this year. Every morning I’d like to spend some time reading my Bible and going out for a walk. Small habits that to my eyes don’t have an inherent metric of growth within them. &lt;/p&gt;&lt;p&gt;For me this is where &lt;a href=&quot;/notes/tool.bullet-journal&quot; title=&quot;tool.bullet-journal|bullet journalling&quot;&gt;[[tool.bullet-journal|bullet journalling]]&lt;/a&gt; comes in. At the beginning of this year I set up this tracker. If I read my Bible in the morning I get half a square, and if I go for a walk in the morning I get the other half. It’s not complicated, it’s not pretty, and it doesn’t remove resistance. &lt;/p&gt;&lt;p&gt;&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position:relative;display:block;margin-left:auto;margin-right:auto;max-width:1380px&quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;https://www.dschapman.com/static/50edf9a484bc2329390842a7ad4bce89/9568a/IMG_4657.jpg&quot; style=&quot;display:block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom:133.33333333333331%;position:relative;bottom:0;left:0;background-image:url(&amp;#x27;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAECAwQF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAHYp141cRJVl2cQREP/xAAdEAABBAIDAAAAAAAAAAAAAAABAAIDMRAREiEy/9oACAEBAAEFAu+RUVG1G4aNyyaAOHel/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAGhAAAgIDAAAAAAAAAAAAAAAAARARQSFhcf/aAAgBAQAGPwLSPWc2otlf/8QAGRAAAwEBAQAAAAAAAAAAAAAAAAERMSFx/9oACAEBAAE/IdMQYh2jGoxSwN2Kk0aEQ99BH//aAAwDAQACAAMAAAAQFyi+/8QAFREBAQAAAAAAAAAAAAAAAAAAEAH/2gAIAQMBAT8QKf/EABcRAQEBAQAAAAAAAAAAAAAAAAEAEBH/2gAIAQIBAT8QLkOf/8QAHhABAAIBBAMAAAAAAAAAAAAAAQARITFBUWFxgZH/2gAIAQEAAT8QrPBOK1Y7zLEUtlOiEycx4uHhDbfoheyI1sPkZEra8xZWs2xFLbaaXzP/2Q==&amp;#x27;);background-size:cover;display:block&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;IMG 4657&quot; title=&quot;IMG 4657&quot; src=&quot;https://www.dschapman.com/static/50edf9a484bc2329390842a7ad4bce89/89b2d/IMG_4657.jpg&quot; srcSet=&quot;https://www.dschapman.com/static/50edf9a484bc2329390842a7ad4bce89/8d48c/IMG_4657.jpg 345w,/static/50edf9a484bc2329390842a7ad4bce89/15ec7/IMG_4657.jpg 690w,/static/50edf9a484bc2329390842a7ad4bce89/89b2d/IMG_4657.jpg 1380w,/static/50edf9a484bc2329390842a7ad4bce89/33042/IMG_4657.jpg 2070w,/static/50edf9a484bc2329390842a7ad4bce89/45df8/IMG_4657.jpg 2760w,/static/50edf9a484bc2329390842a7ad4bce89/9568a/IMG_4657.jpg 3024w&quot; sizes=&quot;(max-width: 1380px) 100vw, 1380px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;/&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;&lt;p&gt;It’s helpful, but its not a perfect tracker. It lets me see my trends and patterns as the year unfolds, but I could check every box and miss the point. My goal in going for a walk in the morning is to help me stay embodied, present, and emotionally aware and I haven’t come up with a way to track my progress in that. &lt;/p&gt;&lt;p&gt;And perhaps that’s for the best. There’s something ineffable in the growth of living things. &lt;/p&gt;</content:encoded></item><item><title><![CDATA[2022 - The year of the blog?]]></title><description><![CDATA[2022 the year we hope the pandemic finally comes to an end, a year of new hope, of midterm elections (what already?), a year of new jobs…]]></description><link>https://www.dschapman.com/blog/2022/01/2022-the-year-of-the-blog</link><guid isPermaLink="false">https://www.dschapman.com/blog/2022/01/2022-the-year-of-the-blog</guid><pubDate>Sat, 08 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;2022 the year we hope the pandemic finally comes to an end, a year of new hope, of midterm elections (what already?), a year of new jobs, new hopes, new habits, and the most important question I’m sure you all are asking is:  “Is 2022 the year of the blog?”&lt;/p&gt;&lt;p&gt;I’ve decided that I’m going to lean hard into the blog this year. There are more hip and with it technologies that I could tout,&lt;div&gt;You won’t find any cryptocurrency or web3 here.&lt;/div&gt; but this year I’m leaning on something that’s tried and true and partying like it’s 2002. That’s right it’s time for a good old fashioned weblog.&lt;/p&gt;&lt;p&gt;I could have just slapped these posts up as articles on my website. After all, my website is supposed to be a Digital Garden&lt;div&gt;A &lt;a href=&quot;/notes/web.digital-garden&quot; title=&quot;web.digital-garden|digital garden&quot;&gt;[[web.digital-garden|digital garden]]&lt;/a&gt; is a type of website meant to hold a variety of content in various states of “growth”.&lt;/div&gt;, but while I like having articles on my website, this more informal, time-bound writing just didn’t quite fit into that category. &lt;/p&gt;&lt;p&gt;You see for me it always seems to come down to writing…writing and it’s purposes. In my life writing has always had at least two purposes. It has been a way to create and a way to make sense of the world around me. For most of my life, one of the ways I tried to shape and make sense of myself was placing myself somewhere on the journey to becoming a vocational, paid writer. It shaped the books I read, my major in college, how I thought about my time off, and even my daily habits. If you asked me from the age of 10-26 what I wanted to be when I grew up I’d say one or more words from this list: writer, author, journalist, poet, screenwriter, speechwriter, technical writer. &lt;/p&gt;&lt;p&gt;And one of the most amazing things about being human is that our self-perception actually can shape our selves and the world around us. This website exists because of my desire to write, &lt;a href=&quot;/poetry/seasons-of-thought&quot;&gt;a book of poems&lt;/a&gt; exists because I established habits around writing, and now over a year after I decided that it would be alright if never became a vocationally paid writer it’s the reason I still feel the urge and desire to write and continue to make sense of the world here on my small patch of internet.&lt;/p&gt;&lt;p&gt;So why is 2022 the year of the blog? Well I could talk to you about all the benefits of the web blog as a medium, about how it helps me lower my barrier to writing, how it will ease me back into the practice of slowing down and selecting words from my cloud of thoughts to plant. But the real answer is, because I want to see how my life will be different because I said that it is. &lt;/p&gt;</content:encoded></item><item><title><![CDATA[Using Notion to Create a User Database: Part I]]></title><description><![CDATA[Using Notion's API to create a User Database using Node JS]]></description><link>https://www.dschapman.com/articles/using-notion-to-create-a-user-database-i</link><guid isPermaLink="false">https://www.dschapman.com/articles/using-notion-to-create-a-user-database-i</guid><pubDate>Sat, 05 Jun 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;By the end of this tutorial we will have created a Notion Database that we can add users to using the Notion Javascript API.&lt;/p&gt;&lt;h2 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;Create a Table in Notion to hold your data. We’re going to create a table to keep track of our users. I named mine “Users” and gave it a Username, Email, and Password property.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.notion.com/my-integrations&quot;&gt;Create an integration&lt;/a&gt; in notion and copy the secret token for your integration. You’ll need this later to access Notion with our script.&lt;/li&gt;&lt;li&gt;Share the table you created with your Integration. It should show up below the list of users when you select Share.&lt;/li&gt;&lt;li&gt;While you’re there, copy the database ID, we’ll need that later. It is the string following the last &lt;code class=&quot;language-text&quot;&gt;/&lt;/code&gt; character and before the &lt;code class=&quot;language-text&quot;&gt;?&lt;/code&gt; character&lt;/li&gt;&lt;/ol&gt;&lt;div src=&quot;/2021-06-03-07-35-43.png&quot;&gt;&lt;/div&gt;&lt;ol start=&quot;5&quot;&gt;&lt;li&gt;Create a project, using &lt;code class=&quot;language-text&quot;&gt;yarn init&lt;/code&gt; in an empty folder to initialize your node.js project&lt;/li&gt;&lt;li&gt;Install the &lt;code class=&quot;language-text&quot;&gt;@notionhq/client&lt;/code&gt; npm package. This is the Javascript API for notion, and we’ll use it to create the functions we use for this project.&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;yarn add @notionhq/client&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Finally create an &lt;code class=&quot;language-text&quot;&gt;index.js&lt;/code&gt; file, this will be how we&lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&quot;creating-a-user&quot;&gt;Creating a User&lt;/h2&gt;&lt;p&gt;Now we’re ready to interact with our Notion database. In Notion databases are made up of pages, so to add a user to our database we’re going to need to create a page in the database. To do this we will need the users Username, Email, and Password.&lt;/p&gt;&lt;p&gt;Here is the function that will Create our User. It uses the &lt;code class=&quot;language-text&quot;&gt;notion.pages.create({})&lt;/code&gt; function and passes an object with the &lt;code class=&quot;language-text&quot;&gt;parent&lt;/code&gt; database and the properties we wish our created object to have.&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;js&quot;&gt;&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Client &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;@notionhq/client&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//Initializing a client&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; notion &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Client&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;auth&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;SECRET_TOKEN&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; username &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;testuser&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; email &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;me@myaddress&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; password &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;SuperS3cr3t!&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;CreateUser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;username&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; email&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; password&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; foundUser &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;CheckUser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;username&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; response &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; notion&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;pages&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;parent&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;database_id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;DATABASE_ID&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;properties&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;Username&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; username &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;Email&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;Sg`s&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;email&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;email&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; email &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;Password&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;AMxG&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;rich_text&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;rich_text&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;text&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; password &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;SUCESS: User successfully added with pageId &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;response&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;CreateUser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;username&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; email&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; password&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As you can see the Username is using the title property, the Email is using Notion’s email property, and the password is using Notion’s rich_text property but only adding a plain-text component with the content of the password parameter.&lt;/p&gt;&lt;p&gt;After running this script our Notion table looks like this:&lt;/p&gt;&lt;div src=&quot;/2021-06-05-14-49-38.png&quot;&gt;&lt;/div&gt;Success!&lt;p&gt;The problem is that currently we are &lt;a href=&quot;https://auth0.com/blog/hashing-passwords-one-way-road-to-security/&quot;&gt;storing our passwords in plain text which is NOT a good idea&lt;/a&gt;. In order to keep our users information private we are going to add a step to the CreateUser function where we will hash the password of the user before passing the hashed password to Notion for storage.&lt;/p&gt;&lt;p&gt;In order to hash our password we are going to use the &lt;a href=&quot;https://www.npmjs.com/package/bcrypt&quot;&gt;bcrypt package&lt;/a&gt;. Later down the line when we implement a login functionality we can compare the hash of the password the user attempts to login with to the hash of the stored password in the database.&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;js&quot;&gt;&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; bcrypt &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;bcrypt&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; hashedPassword &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; bcrypt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hash&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;password&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We also need to implement a way to check whether or not a username already exists in our database. In order to do this we will use &lt;code class=&quot;language-text&quot;&gt;notion.databases.query({})&lt;/code&gt; and pass in the &lt;code class=&quot;language-text&quot;&gt;DATABASE_ID&lt;/code&gt; of our users database and our filter conditions - in this case we are looking for entries where &lt;code class=&quot;language-text&quot;&gt;Username&lt;/code&gt; is equal to the parameter of the function&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;js&quot;&gt;&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;CheckUser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; response &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; notion&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;databases&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;query&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;database_id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;DATABASE_ID&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;Username&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; username &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;response&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;results&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; response&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;results&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now we can add this funciton to our &lt;code class=&quot;language-text&quot;&gt;CreateUser&lt;/code&gt; function to first check whether a user exists before we add it to the database. Once we do that Our finished &lt;code class=&quot;language-text&quot;&gt;CreateUser&lt;/code&gt; account will look like this:&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;js&quot;&gt;&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;CreateUser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;username&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; email&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; password&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; foundUser &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;CheckUser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;username&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;foundUser&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; hashedPassword &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; bcrypt&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hash&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;password&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; response &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; notion&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;pages&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;parent&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;database_id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;DATABASE_ID&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;properties&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;Username&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;token literal-property property&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;token literal-property property&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; username &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;Email&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;Sg`s&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;email&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;email&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; email &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;Password&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;AMxG&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;token literal-property property&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;rich_text&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;token literal-property property&quot;&gt;rich_text&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;text&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; hashedPassword &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;SUCESS: User successfully added with pageId &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;response&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;ERROR: User already found with the username &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;username&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt; and pageId &lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;foundUser&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[Using Dendron and Gatsby Together 🌲]]></title><description><![CDATA[How I integrated my Dendron repository and my Gatsby.js website.]]></description><link>https://www.dschapman.com/articles/using-dendron-and-gatsby-together</link><guid isPermaLink="false">https://www.dschapman.com/articles/using-dendron-and-gatsby-together</guid><pubDate>Sat, 06 Mar 2021 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;&lt;p&gt;I love learning new tools and integrating them into my day to day life. &lt;a href=&quot;https://dendron.so&quot;&gt;Dendron&lt;/a&gt; is the latest in a long line of tools that I’ve used to keep track of the notes I use to remember things, jot down ideas, or think in a less polished way. Like several other tools I’ve used it’s local-first and based in markdown. What makes Dendron special to me is that currently it is the only digital tool I use for notes.&lt;/p&gt;&lt;p&gt;Since discovering the &lt;a href=&quot;https://github.com/brettkromkamp/awesome-knowledge-management&quot;&gt;personal knowledge management space&lt;/a&gt;, and really diving into the space over the past year, I have used several different tools&lt;div count=&quot;1&quot;&gt;Bear, Notion, Roam, Org-Roam, Logseq, and Obsidian have all played a role in my stack at some point.&lt;/div&gt; but have always functionally divided — using one tool for &lt;a href=&quot;/notes&quot;&gt;my public notes&lt;/a&gt; that I host here on this website, and one tool where I wrote my private notes. What made this even more difficult is that often notes would begin their life in my private notes and then would need to be copied over to my public notes — an extra layer of friction that at first was no big deal but has become more and more tedious over time.&lt;/p&gt;&lt;p&gt;Dendron solves this problem and it does so, &lt;a href=&quot;https://dendron.so/notes/9c6f600e-f1f3-423b-963a-c71bb081334c.html&quot;&gt;more or less out of the box&lt;/a&gt;, leveraging 11ty to create a really good looking static site that can be published wherever you want and with the ability to fine tune what notes are published&lt;div count=&quot;2&quot;&gt;Here are a couple examples of what this native solution does: &lt;a href=&quot;https://garden.ianjones.us/&quot;&gt;garden.ianjones.us&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://kevincunningham.co.uk/garden&quot;&gt;kevincunningham.co.uk/garden&lt;/a&gt;&lt;/div&gt;. But I’ve spent a lot of time customizing my website and I didn’t want to lose the ability to have my notes fully integrated into my website.&lt;/p&gt;&lt;p&gt;If you’re interested in learning more about Dendron, check out &lt;a href=&quot;https://dendron.so/notes/e86ac3ab-dbe1-47a1-bcd7-9df0d0490b40.html&quot;&gt;their quickstart guide&lt;/a&gt;. The rest of this post is a short overview of how I integrated my Dendron notes with my Gatsby.js frontend.&lt;/p&gt;&lt;h2 id=&quot;the-setup&quot;&gt;The Setup&lt;/h2&gt;&lt;p&gt;Dendron has several things which lend it to very easily integrate with Gatsby.js — the first and most important is that it stores all notes in Markdown with YAML frontmatter — exactly what Gatsby uses. Another thing that Dendron does that I really like, is it uses a static 32 digit long id so that even if the title or organizing structure changes, Dendron still knows how to find the note in question. I’ll used that id as the slug of my note (&lt;code class=&quot;language-text&quot;&gt;/note/&amp;lt;id&amp;gt;&lt;/code&gt;).&lt;/p&gt;&lt;div src=&quot;/dendron-frontmatter.png&quot; caption=&quot;An example of Dendron Frontmatter&quot;&gt;&lt;/div&gt;&lt;p&gt;To add my Dendron folder to my website I first created a private github repository with my Dendron notes, then I added a private git submodule&lt;div count=&quot;1&quot;&gt;Tania Rascia has &lt;a href=&quot;https://www.taniarascia.com/git-submodules-private-content/&quot;&gt;an excellent guide&lt;/a&gt; on how to set this up.&lt;/div&gt; to import the contents of that repository into my website.&lt;/p&gt;&lt;p&gt;To get gatsby-plugin-mdx to recognize those markdown files I added this to my existing graphql query in my &lt;code class=&quot;language-text&quot;&gt;gatsby-node.js&lt;/code&gt; file. Using the &lt;code class=&quot;language-text&quot;&gt;fileAbsolutePath&lt;/code&gt; to filter only notes in my Dendron folder.&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;graphql&quot;&gt;&lt;pre class=&quot;language-graphql&quot;&gt;&lt;code class=&quot;language-graphql&quot;&gt;&lt;span class=&quot;token attr-name&quot;&gt;dendron&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token property-query&quot;&gt;allMdx&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;token attr-name&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;token attr-name&quot;&gt;fileAbsolutePath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;regex&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;/Dendron/&amp;quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;token attr-name&quot;&gt;frontmatter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;published&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;eq&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token object&quot;&gt;edges&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;token object&quot;&gt;node&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token object&quot;&gt;frontmatter&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
              &lt;span class=&quot;token property&quot;&gt;id&lt;/span&gt;
              &lt;span class=&quot;token property&quot;&gt;title&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;id&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;token object&quot;&gt;previous&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;id&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;token object&quot;&gt;next&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;id&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then I’ll pass the results of that query to the create pages call in that same file:&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;js&quot;&gt;&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; dendron &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;dendron&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;edges&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

dendron&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; node &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;createPage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;notes/&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;frontmatter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;component&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;./src/components/notes/note.js&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And then finally I’ll create the note.js file I used as a component up above:&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;js&quot;&gt;&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;react&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; MDXRenderer &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;gatsby-plugin-mdx&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; Layout &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;../layout/layout&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; data &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Layout
      title&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mdx&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;frontmatter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      description&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mdx&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;frontmatter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;excerpt&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      type&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;Note 📝&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;MDXRenderer&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mdx&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;body&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;MDXRenderer&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;Layout&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; pageQuery &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; graphql&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;
  query NoteQuery($id: String) {
    mdx(id: { eq: $id }) {
      body
      excerpt
      frontmatter {
        title
        id
      }
    }
  }
&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And just like that all of my Dendron notes are created on my website.&lt;/p&gt;&lt;h2 id=&quot;ok-so-its-not-as-simple-as-that&quot;&gt;Ok so it’s not as simple as that…&lt;/h2&gt;&lt;p&gt;One potential problem with using Dendron’s Markdown is that it uses wiki-links which Gatsby doesn’t support natively. Luckily there’s a plugin which suports wikilinks - &lt;code class=&quot;language-text&quot;&gt;gatsby-remark-doublebrackets-link&lt;/code&gt;. I’ll install that &lt;code class=&quot;language-text&quot;&gt;yarn add gatsby-remark-double-brackets-link&lt;/code&gt; and add it to my Gatsby config.&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;json&quot;&gt;&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&amp;quot;resolve&amp;quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; `gatsby-plugin-mdx`&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&amp;quot;options&amp;quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&amp;quot;gatsbyRemarkPlugins&amp;quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token property&quot;&gt;&amp;quot;resolve&amp;quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; `gatsby-remark-double-brackets-link`&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token property&quot;&gt;&amp;quot;options&amp;quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;token property&quot;&gt;&amp;quot;titleToURLPath&amp;quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; `$&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;__dirname&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;/src/lib/dendron-parse-url.js`
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This transforms &lt;code class=&quot;language-text&quot;&gt;[[Link to page]]&lt;/code&gt; to &lt;code class=&quot;language-text&quot;&gt;[Link to page](titleToURL(&amp;#x27;Link to page&amp;#x27;))&lt;/code&gt; and I can use a custom &lt;code class=&quot;language-text&quot;&gt;titleToURLPath&lt;/code&gt; function to remove the dendron alias syntax (which uses the &lt;code class=&quot;language-text&quot;&gt;|&lt;/code&gt; character to separate the alias from the wikilink). But I’m using the id defined in the frontmatter of the note and not the wikilink as the slug. How can I transform my wikilinks to &lt;code class=&quot;language-text&quot;&gt;[Link to page](&amp;#x27;id from frontmatter of target link&amp;#x27;)&lt;/code&gt;?&lt;/p&gt;&lt;p&gt;I solved this problem by running a Static Query in my Layout component. This query fetches all of the relevant frontmatter from all of my dendron notes as well as the filename. I stored the relevant data (id, title, slug) in an array of objects with a key value of the filename.&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;js&quot;&gt;&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; popups &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; posts &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;allMdx&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;nodes&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
posts&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;post&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    popups&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;slug&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;slug&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;lastIndexOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;frontmatter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;body&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;slug&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;frontmatter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;slug&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;dendronId&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;frontmatter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;published&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;frontmatter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;published&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I passed this array of note metadata to a custom mdx component using the custom components prop.&lt;div count=&quot;3&quot;&gt;I use this same technique to also pass in the body of my articles, poems, and notes to enable link previews.&lt;/div&gt; I then use custom regex to determine whether the markdown link is an internal link, an external link, or an internal notes link. If it’s an internal notes link I use the current href (which at this stage is still a wikilink) as the key in the array I passed in to see if there’s any Dendron notes that matches that href. If there is, I change how that markdown link is rendered and change the link to point from &lt;code class=&quot;language-text&quot;&gt;/notes/dendron.url&lt;/code&gt; to &lt;code class=&quot;language-text&quot;&gt;/notes/&amp;lt;dendron-id&amp;gt;&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;My raw code for that operation is at the bottom of this article. You’ll see that I have to do some string manipulation to get it to work. I also include logic throughout to only allow access to notes that include &lt;code class=&quot;language-text&quot;&gt;published: true&lt;/code&gt; in the frontmatter. Any links to unpublished notes get redirected to a custom 404 page indicating that that note has note yet been published.&lt;/p&gt;&lt;p&gt;If you are considering using Dendron with your Gatsby site I hope that this has proved useful.&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;js&quot;&gt;&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;AnchorTag&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; href&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; popups&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;restProps &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; isInternalNotesLink &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;isEmpty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;INTERNAL_LINK_REGEX&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; isInternalLink &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;isEmpty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;INTERNAL_NON_NOTES_LINK_REGEX&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; renderedLink &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; restProps&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;children
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;isString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;restProps&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;children&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    renderedLink &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; restProps&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;children&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;replace&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;\[\[(.*?)\]\]&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-flags&quot;&gt;g&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;#x27;$1&amp;#x27;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;isInternalNotesLink&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;renderedLink&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;includes&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;#x27;|&amp;#x27;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      renderedLink &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; renderedLink&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; renderedLink&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;lastIndexOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;#x27;|&amp;#x27;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;isEmpty&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;popups&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;lastIndexOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;#x27;/&amp;#x27;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;InternalNotesLink
          to&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/notes/&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;lastIndexOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;#x27;/&amp;#x27;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;renderedLink&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;InternalNotesLink&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;//check if the note is published, if it&amp;#x27;s not go to a specific 404 page&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        popups&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;lastIndexOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;#x27;/&amp;#x27;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;published &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
          &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;InternalNotesLink to&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;/notes/404&amp;quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;renderedLink&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;InternalNotesLink&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
          &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;LinktipPreview
            link&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
            tiptext&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
              &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;MDXProvider components&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;components&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
                  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;popups&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;lastIndexOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;#x27;/&amp;#x27;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
                &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;h1&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;MDXRenderer&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
                  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;popups&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;lastIndexOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;#x27;/&amp;#x27;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;body&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
                &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;MDXRenderer&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
              &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;MDXProvider&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
            placement&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;right&amp;quot;&lt;/span&gt;
            multiple&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;InternalNotesLink
              to&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/notes/&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;
                popups&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;lastIndexOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;#x27;/&amp;#x27;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;dendronId
              &lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
              &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;renderedLink&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;InternalNotesLink&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;LinktipPreview&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Author’s Note: I now use &lt;a href=&quot;obsidian.md&quot;&gt;Obsidian&lt;/a&gt; exclusively to keep my notes, mainly due to its amazing mobile app; however I still use this same method to publish my notes and rely on Obsidian templates to generate the uuid to allow for publication.&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[2020 Book Recommendations]]></title><description><![CDATA[Recommendations from books I read and liked in 2020.]]></description><link>https://www.dschapman.com/articles/2020-book-recommendations</link><guid isPermaLink="false">https://www.dschapman.com/articles/2020-book-recommendations</guid><pubDate>Fri, 01 Jan 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;2020 may be over, but the books I read are still on my mind. I’m a sucker for a good year-end recommendation post, so as you start making your own plans for books to read in the new year here are a few of the books I read and liked in 2020.&lt;/p&gt;&lt;h2 id=&quot;the-best-book-from-outside-my-silos&quot;&gt;The Best Book from Outside my Silos&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;The Overstory by Richard Powers&lt;/strong&gt;&lt;/p&gt;&lt;img alt=&quot;The Overstory by Richard Powers&quot; src=&quot;https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1562786502l/40180098._SY475_.jpg&quot; width=&quot;200&quot;/&gt;&lt;p&gt;I don’t remember how this book came across my radar, but I’m really glad it did. This book is a sweeping epic about trees and the people who are willing to go to any lengths to protect them.&lt;/p&gt;&lt;p&gt;From the beginning the book sucked me in with trees who are central and interesting characters. The sweeping breadth of the story crosses the continent and the century in a way that made me think of the early chapters of Steinbeck’s &lt;a href=&quot;/notes/book.east-of-eden&quot; title=&quot;book.east-of-eden|East of Eden&quot;&gt;[[book.east-of-eden|East of Eden]]&lt;/a&gt;. The book is as rich as the oldest forest and as intricate as the lives of the trees it describes. The human characters are interesting in their own rights, and are woven together into a story that raises interesting questions about technology and how we interact with the world around us.&lt;/p&gt;&lt;p&gt;I personally enjoyed the early chapters more than the later ones — the book becomes more political as the characters begin to go to various lengths to defend the trees they love. I found the tone of the book at this point a little simplistic (i.e. the only possible way to proceed is eco-terrorism) but what The Overstory does well is raise two questions — 1. Aren’t trees amazing, complex, and communal living creatures? and 2. Is progress that comes at the extinction of these complex creatures and their communities really progress?&lt;/p&gt;&lt;h2 id=&quot;the-worst-book-i-read-with-the-highest-impact&quot;&gt;The Worst Book I Read with the Highest Impact&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Mastering Emacs by Mickey Petersen&lt;/strong&gt;&lt;/p&gt;&lt;img alt=&quot;Mastering Emacs by Mickey Petersen&quot; src=&quot;https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1472003350l/25587882._SX318_.jpg&quot; width=&quot;200&quot;/&gt;&lt;p&gt;Yes I started using a text editor called &lt;a href=&quot;/notes/tool.emacs&quot; title=&quot;tool.emacs|Emacs&quot;&gt;[[tool.emacs|Emacs]]&lt;/a&gt; this year. Yes I read a book about it. And for most people I would not recommend that you use Emacs or read this book.&lt;/p&gt;&lt;p&gt;The reason this book makes my list is because of how I read it. I read it with a group of other people interested in Emacs and then for 6 or so weeks we met on Zoom to discuss the reading. Except most of the time our meetings didn’t even touch on the reading and became delightful show and tell sessions where we demonstrated new functionality we had implemented into our text editor and ooed and awed over the neat things we could do. This book was a lovely catalyst and retaught me the value of communal learning.&lt;/p&gt;&lt;h2 id=&quot;the-best-book-about-creativity&quot;&gt;The Best Book about Creativity&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Adorning the Dark by Andrew Peterson&lt;/strong&gt;&lt;/p&gt;&lt;img alt=&quot;Adorning the Dark by Andrew Peterson&quot; src=&quot;https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1565403521l/44092370.jpg&quot; width=&quot;200&quot;/&gt;&lt;p&gt;I love books about creativity. For years growing up I told everyone who asked that I wanted to be an author when I grew up. I love writing poetry, have several un-started novel ideas, and have developed elaborate plans for my own writing cabin one day.&lt;div count=&quot;1&quot;&gt;A small structure with its own wood stove, walls lined with book shelves, and plenty of windows, preferably about a 5-10 minute walk from my home.&lt;/div&gt;&lt;/p&gt;&lt;p&gt;In Andrew Peterson’s writing I found a kindred spirit — someone who had read the same things that I had read, pursued similar dreams, and who thinks about the world in similar ways. This book is a beautiful and imaginative exploration of what the creative life can look like. And for me it actually helped me step back from my dreams of making my full-time living as an author.&lt;/p&gt;&lt;p&gt;Peterson’s creative vision is robust and tied to his faith. It touches every aspect of his life from his work to the house he and his wife bought, to how they raise their children. This book has excellent advice for writers and creative people, and I would recommend it to people who want to make a living from their creativity. But for me this book helped me see some of the many ways I can live a creative life, pursuing creative projects (both written and otherwise) even if I don’t write for a living. Decoupling my hunger for a creative life from the work I do day to day has been incredibly liberating and has had a huge impact on how I talk about what I want to be when I grow up.&lt;/p&gt;&lt;h2 id=&quot;favorite-reread&quot;&gt;Favorite Reread&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Watership Down by Richard Adams&lt;/strong&gt;&lt;/p&gt;&lt;img alt=&quot;Watership Down by Richard Adams&quot; src=&quot;https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1405136931l/76620.jpg&quot; width=&quot;200&quot;/&gt;&lt;p&gt;I reread a lot of books in 2020. I reread Dune, several of the Narnia books, A Canticle for Leibowitz, The Bronze Bow, and the third book of a long Fantasy series &lt;div count=&quot;2&quot;&gt;I was getting ready to read book 4 of the Stormlight Archive, The Rhythm of War, which would easily win the “Best 4th Book in a Long Series” award.&lt;/div&gt;. I enjoyed every book I reread, but the one that I enjoyed rereading the most was Watership Down.&lt;/p&gt;&lt;p&gt;I read this book in high school and enjoyed it, and when I had a floating audible credit at the beginning of the year I used it to get this book. I’m so glad I did. It’s just a good story complete with lovable characters, thrilling moments, and rich lore that is slowly revealed throughout the story. This book is about cute little rabbits in the countryside of England it is also about fierce warriors on a quest, about friendship, and the stories we tell.&lt;/p&gt;&lt;h2 id=&quot;favorite-book&quot;&gt;Favorite Book&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;A Praying Life by Paul Miller&lt;/strong&gt;&lt;/p&gt;&lt;img alt=&quot;A Praying Life by Paul Miller&quot; src=&quot;https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1269483395l/6426403.jpg&quot; width=&quot;200&quot;/&gt;&lt;p&gt;It’s always hard for me to choose favorite books. I love so many books and love recommending different books to different people depending on what they might like, but ultimately my favorite book in 2020 was the book that came at the right time for me and was the book that I needed to read.&lt;/p&gt;&lt;p&gt;I could say that 2020 was a difficult year where I felt the need to pray more strongly, and while that’s certainly true I think that I would have needed to read this book whether or not there was a life-altering pandemic going on. What this book explores so well are the practicalities of how to pray — not how you need to look, or what you need to do to “get the answer you want”, but how to come to God as you are — with your weariness, your unbelief, your anger, sadness, or any other emotion or feeling. Reading this book didn’t make me an expert at prayer, but I did leave with a better perspective on what prayer is and a few practical tips on how to approach prayer. If you are religious or curious about spiritual things I highly recommend this book.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Those were a few of the books I read in 2020. For the full list &lt;a href=&quot;https://www.goodreads.com/user/year_in_books/2020/6674062&quot;&gt;check out my Goodreads&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[A Liturgy for Wearing Masks]]></title><description><![CDATA[A short prayer for when its necessary to wear a mask.]]></description><link>https://www.dschapman.com/articles/a-liturgy-for-wearing-masks</link><guid isPermaLink="false">https://www.dschapman.com/articles/a-liturgy-for-wearing-masks</guid><pubDate>Wed, 23 Dec 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We are formed by language. Words give meaning to the world around us – helping us to make sense of what’s happening now, but also shaping our thoughts and even our actions into the future. &lt;div count=&quot;1&quot;&gt;The poet Malcolm Guite takes this a step further in his poem, &lt;a href=&quot;https://malcolmguite.wordpress.com/2020/12/17/o-sapientia-an-advent-antiphon-6/&quot;&gt;O Sapientia&lt;/a&gt; where he says “I cannot think unless I have been thought, / Nor can I speak unless I have been spoken.”&lt;/div&gt;&lt;/p&gt;&lt;p&gt;It is one thing to read words, it is another to give them voice, to say “this is what I believe” or even “this is what I want to believe”. This is what liturgies help us to do. When I pray a liturgy I am admitting that I don’t think about things right, that my thoughts are wrong, but I want them to be right or at least be better.&lt;/p&gt;&lt;p&gt;Like so many people this year, my thoughts and attitudes have been shaped by the pandemic and the drastic changes it has brought into each of our lives. Those changes, although good and necessary, have not been easy to implement and bring up many emotions.&lt;/p&gt;&lt;p&gt;For me and many, wearing the mask has been the most visible of those changes. I mourn the loss of closeness, the inability to see smiles, and the extra layer that separates me from friends and family who I love dearly.&lt;/p&gt;&lt;p&gt;This liturgy helps me orient myself towards the reason I’m wearing a mask as well as a prayer that the act of putting on a mask will orient my heart to love and care for my neighbor both in how I protect them, but also in how I speak to them.&lt;/p&gt;&lt;h2 id=&quot;a-liturgy-for-wearing-masks&quot;&gt;A Liturgy for Wearing Masks&lt;/h2&gt;&lt;p class=&quot;verse&quot;&gt;O Lord who took upon himself a human face&lt;br/&gt;  and wore our glories and our frailties,&lt;br/&gt;be with us as we hide our face,&lt;br/&gt;  protect us and those we speak to from all disease&lt;br/&gt;  and filter every word from all unkindness,&lt;br/&gt;  unmask our insecurities&lt;br/&gt; and mask us in your righteousness&lt;br/&gt;and when at last we remove all coverings&lt;br/&gt;  and breathe freely,&lt;br/&gt;remind us of the freedom we will have&lt;br/&gt;  when you bring an end to all disease.&lt;br/&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How I wrote in 2020]]></title><description><![CDATA[The tools I used to write in 2020.]]></description><link>https://www.dschapman.com/articles/how-i-wrote-in-2020</link><guid isPermaLink="false">https://www.dschapman.com/articles/how-i-wrote-in-2020</guid><pubDate>Sat, 19 Dec 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I have always liked to know how any one goes about doing their work, whatever that work may be. &lt;a href=&quot;https://www.youtube.com/watch?v=Gh6H7Md_L2k&quot;&gt;A tour of Nick Offerman’s woodshop&lt;/a&gt;? Yes please! &lt;a href=&quot;https://www.youtube.com/watch?v=j61o_ow86j0&quot;&gt;Patrick Rothfuss walking through his writing process&lt;/a&gt; in his “work house”? I’ll stop whatever I’m doing and watch that.&lt;/p&gt;&lt;p&gt;The process of writing has always held a special mystique for me – dictionaries and typewriters, fountain pens and IBM keyboards, Microsoft Word and Scrivener each are with their own flavor and intrigue. 2020 marked a big change in how I do my writing and so as we come to the end of this year I thought I’d lay out for posterity how I wrote in 2020.&lt;/p&gt;&lt;p&gt;Up until now I wrote with a combination of physical and digital means - using primarily the iOS/MacOS app &lt;a href=&quot;https://bear.app&quot;&gt;Bear&lt;/a&gt;, the old classic Microsoft Word, and various legal pads and journals with a fountain pen (or any writing instrument near to hand). I still split myself between physical and digital methods although I have found myself moving more and more to the digital.&lt;/p&gt;&lt;p&gt;Without further ado here is the list:&lt;/p&gt;&lt;h2 id=&quot;physical-writing&quot;&gt;Physical Writing&lt;/h2&gt;&lt;p&gt;My physical writing methods haven’t drastically changed in 2020, the exception is that after attempting various ways to digitally organize myself, I’m recommitting to using physical methods to organize myself.&lt;/p&gt;&lt;h3 id=&quot;bullet-journal&quot;&gt;Bullet Journal&lt;/h3&gt;&lt;p&gt;I need something to keep me organized and I’ve found that by separating that system from a digital space I actually use it more and use it for the things that I need help with. I love neat software as much as the next person, but sometimes a pen and paper is the best. I write in my bullet journal with a variety of fountain pens and inks (Usually Noodler Ink) in a dotted notebook from &lt;a href=&quot;https://www.leuchtturm1917.us/notebook-medium-a5-hardcover-251-numbered-pages-5-3-4-x-8-1-4-in.html&quot;&gt;Leuchtturm1917&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I also sometimes like to use physical writing for my creative poetry writing, sometimes this ends up in the Bullet Journal (that’s part of the reason I love the Bullet Journal system, it’s intentionally flexible) and sometimes it ends up on whatever scrap of paper is closest.&lt;/p&gt;&lt;h2 id=&quot;digital-writing&quot;&gt;Digital Writing&lt;/h2&gt;&lt;p&gt;This is what’s changed the most in 2020 as I have immersed myself in the world of &lt;a href=&quot;/notes/digital-gardens&quot; title=&quot;digital gardens|digital-garden&quot;&gt;[[digital gardens|digital-garden]]&lt;/a&gt; and hypertext thinking. Back in April I rewrote this website adding a selection of public-facing notes, and creating different systems for content to surface and connect. &lt;a href=&quot;/notes/web.bidirectional-links&quot; title=&quot;web.bidirectional-links|Bidirectional links&quot;&gt;[[web.bidirectional-links|Bidirectional links]]&lt;/a&gt; and &lt;a href=&quot;/notes/web.transclusions&quot; title=&quot;web.transclusions|transclusions&quot;&gt;[[web.transclusions|transclusions]]&lt;/a&gt; are key features of this rewrite and are at the heart of the tools that I have started to use to write.&lt;/p&gt;&lt;h3 id=&quot;emacsorg-modeorg-roam&quot;&gt;Emacs/Org-Mode/Org-Roam&lt;/h3&gt;&lt;p&gt;I do the majority of my long form writing in a text editor called &lt;a href=&quot;/notes/tool.emacs&quot; title=&quot;tool.emacs|Emacs&quot;&gt;[[tool.emacs|Emacs]]&lt;/a&gt;. Emacs at its core is a text editor, but it is also an Operating System – a foundation on which hackers have built every functionality imaginable. Two of those powerful extensions to Emacs are &lt;a href=&quot;/notes/tool.org-mode&quot; title=&quot;tool.org-mode|Org-Mode&quot;&gt;[[tool.org-mode|Org-Mode]]&lt;/a&gt; and &lt;a href=&quot;/notes/tool.org-roam&quot; title=&quot;tool.org-roam|Org-Roam&quot;&gt;[[tool.org-roam|Org-Roam]]&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Org-Mode is a markup language built for Emacs that can be easily exported to a variety of formats – markdown, PDF, Microsoft Word. The advantage of using Org-Mode is it allows me to store all of my notes, writing, or even poems in a plain text format that is easilly transferrable or sharable. For articles like this one I will write it in Emacs and then export it to markdown when I’m ready to publish it on my website.&lt;/p&gt;&lt;p&gt;Org-Roam is an extension of Org-Mode in Emacs that adds bidirectional links and allows neat things like graphs of my notes allowing me to explore how ideas interrelate. In 2020 I took most of my notes in Emacs using Org-Roam.&lt;/p&gt;&lt;div src=&quot;/org-roam-graph.png&quot; alt=&quot;A graph of my org-roam notes.&quot; caption=&quot;A graph of the connections between my org-roam notes.&quot;&gt;&lt;/div&gt;&lt;p&gt;As a tinkerer I also like to have ownership of my tools and Emacs allows me to tinker and tweak to my heart’s content.&lt;/p&gt;&lt;div src=&quot;https://imgs.xkcd.com/comics/real_programmers.png&quot; caption=&quot;XKCD with the infamous (in some circles) quote &amp;#x27;Course there&amp;#x27;s a way to do that in Emacs&quot;&gt;&lt;/div&gt;&lt;h3 id=&quot;obsidian&quot;&gt;Obsidian&lt;/h3&gt;&lt;p&gt;Org-Roam isn’t the only new software I worked into my writing workflow in 2020, &lt;a href=&quot;https://obsidian.md&quot;&gt;Obsidian&lt;/a&gt; is another tool that takes advantage of bidirectional links, the big difference is that instead of org files Obsidian works with markdown files and markdown files are what run this website. I have found Obsidian to be an easy way to quickly add to my public notes.&lt;/p&gt;&lt;h3 id=&quot;keyboard&quot;&gt;Keyboard&lt;/h3&gt;&lt;p&gt;I use a &lt;a href=&quot;https://codekeyboards.com/&quot;&gt;Code Keyboard&lt;/a&gt; with Cherry MX Clear switches. This keyboard has served me well and I have no complaints, although I have missed having a 10-key.&lt;/p&gt;&lt;p&gt;I also started using a program called karabiner that allows me to remap my left shift and right shift to backspace and delete when I tap them, but not when I hold them.&lt;/p&gt;&lt;p&gt;That is how I wrote in 2020. I definitely have made my writing process far more technical, but if you’re still interested you can read some more of how I thought about writing in 2020 check out my articles &lt;a href=&quot;/articles/context-aware-link&quot;&gt;The Best Context Aware Link is You&lt;/a&gt; or &lt;a href=&quot;/articles/hypertext-writing&quot;&gt;Hypertext Writing&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How to use Github to keep track of your learning goals]]></title><description><![CDATA[Use GitHub to learn in public and keep track of your learning goals.]]></description><link>https://www.dschapman.com/articles/track-learning-in-github</link><guid isPermaLink="false">https://www.dschapman.com/articles/track-learning-in-github</guid><pubDate>Sat, 24 Oct 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After years of hobby programming building sites like this one, a couple months ago I decided to pursue full time work as a web developer. Any career switch takes work, and while I have a variety of technical experience &lt;div count=&quot;1&quot;&gt;Computer Science classes in college; 2 years installing, documenting, and teaching proprietary Linux based-systems; and several years of self-taught web development&lt;/div&gt; the past months have been filled with more intentional learning and practice as I’ve worked to expand my front-end web development experience and skills by working and learning in public.&lt;/p&gt;&lt;p&gt;Recently GitHub released a new feature that allows you to create &lt;a href=&quot;https://www.aboutmonica.com/blog/how-to-create-a-github-profile-readme&quot;&gt;a custom README for you profile&lt;/a&gt; this is a great way to add personality to your GitHub profile, list what you’re working on, or just add a few gifs. But this feature got me thinking about other ways I could use GitHub as I work and learn.&lt;/p&gt;&lt;div&gt;Why not use GitHub to track my learning progress?&lt;/div&gt;&lt;p&gt;This led me to &lt;a href=&quot;https://github.com/features/project-management/&quot;&gt;GitHub Projects&lt;/a&gt;. Now I could easily use any number of great project management solutions to keep track of my progress learning — Trello, Asana, or Notion all have generous free tiers that would easily meet my needs — but using Github appealed to me because if I keep it in a public project then anyone can follow along and track my progress.&lt;/p&gt;&lt;p&gt;To set this up I used the same repository that holds my README&lt;div count=&quot;1&quot;&gt;”The profile README is created by creating a new repository that’s the same name as your username.” -&lt;a href=&quot;https://www.aboutmonica.com/blog/how-to-create-a-github-profile-readme#how-do-i-create-a-profile-readme&quot;&gt;Source&lt;/a&gt;&lt;/div&gt;, selected “Projects” from the top bar, and then pressed the “New Project” button to create a project to track &lt;a href=&quot;https://github.com/dschapman/dschapman/projects/1&quot;&gt;my frontend development learning progress&lt;/a&gt;. There are templates that provide a great starting point allowing you to create a basic kanban board to keep track of your learning goals.&lt;/p&gt;&lt;div src=&quot;/create-github-project.png&quot; alt=&quot;Create a project on Github&quot;&gt;&lt;/div&gt;&lt;p&gt;Issues are where using Github for this really shines. New issues can be added to the project and tagged with relevant labels. I’ve created labels for the type of resource (course, book, article) as well as the language or framework that the resource is teaching. Then inside each issue I can create checkboxes for me to track my progress, and once I’ve completed the course I can add any notes, projects, or certifications as a comment in that issue.&lt;/p&gt;&lt;div src=&quot;/my-github-learning-project.png&quot; alt=&quot;My &amp;#x27;Learn Front-end Development&amp;#x27; Project on Github.&quot;&gt;&lt;/div&gt;&lt;p&gt;Issues also allow other people to suggest additions to my learning path. I’ve created an issue template and if you are interested, you can &lt;a href=&quot;https://github.com/dschapman/dschapman/projects/1&quot;&gt;check out the project&lt;/a&gt;, and &lt;a href=&quot;https://github.com/dschapman/dschapman/issues/new/choose&quot;&gt;submit an issue&lt;/a&gt; to help me continue learning and growing as a web developer.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Best Context Aware Link is You!]]></title><description><![CDATA[We are in a modern renaissance of hypertext thinking, but the lynchpin is not bi-directional linking, it's you.]]></description><link>https://www.dschapman.com/articles/context-aware-link</link><guid isPermaLink="false">https://www.dschapman.com/articles/context-aware-link</guid><pubDate>Thu, 22 Oct 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We are in a modern renaissance of hypertext thinking. I’ve written about &lt;a href=&quot;/articles/hypertext-writing&quot;&gt;the advantages of writing in hypertext&lt;/a&gt; and I personally have loved following the latest developments in &lt;a href=&quot;https://roamresearch.com&quot;&gt;Roam Research&lt;/a&gt;, &lt;a href=&quot;https://notion.so&quot;&gt;Notion&lt;/a&gt;, and my favorite at the time of writing &lt;a href=&quot;/notes/tool.org-roam&quot; title=&quot;tool.org-roam|Org-Roam&quot;&gt;[[tool.org-roam|Org-Roam]]&lt;/a&gt; for Emacs. All these tools use context aware links that are aware of the other pages that link to a given page and allow the note taker to discover new connections they might not have seen before.&lt;/p&gt;&lt;div src=&quot;/org-roam-graph.png&quot; alt=&quot;A graph of my org-roam notes.&quot; caption=&quot;A graph of the connections between my org-roam notes.&quot;&gt;&lt;/div&gt;&lt;p&gt;If you’ve spent much time on my website you’ll have seen that I take advantage of similar ideas to implement dynamic link previews. I also use this to generate &lt;a href=&quot;/articles/tag/hypertext-thinking&quot;&gt;dynamic tag pages&lt;/a&gt; that know whether or not there’s a relevant page in my notes to also link.&lt;/p&gt;&lt;p&gt;Maybe you discovered this website because you found it on a list of &lt;a href=&quot;/notes/digital-garden&quot; title=&quot;digital-garden|digital garden&quot;&gt;[[digital-garden|digital garden]]&lt;/a&gt; or maybe you too are interested in the growing &lt;a href=&quot;https://nesslabs.com/the-state-of-personal-knowledge-management&quot;&gt;Personal Knowledge Management&lt;/a&gt; space. I have found myself using a variety of these tools over the years — from using the Bear notes app, to using a Bullet Journal, to task software, to Emacs with a variety of useful packages, to just underlining and marking my books.&lt;/p&gt;&lt;p&gt;As I’ve jumped from system to system over the years I have taken things I liked from each system. And always after the initial shine of a new technology eventually I feel the tug to some new technology or back to an old technology that I left behind. Currently I am shifting from trying to use Emacs for everything to using a hybrid system depending on the situation.&lt;/p&gt;&lt;p&gt;At the end of the day all these tools in &lt;a href=&quot;/notes/me.toolbox&quot; title=&quot;me.toolbox|my toolbox&quot;&gt;[[me.toolbox|my toolbox]]&lt;/a&gt; are exactly that. It certainly does feel and look like a rennaisance of personal knowledge management tools, and I certainly look forward to continuing to grow my collection of org-roam notes, grow my bullet journal collection, and continue to turn my head at the latest and greates tool to come down the pipeline. But my brain is what ultimately makes the connections that matter. The tools I use help &lt;em&gt;me&lt;/em&gt; keep track of things that that matter; they help &lt;em&gt;me&lt;/em&gt; make sense of all my disparate interests — from the &lt;a href=&quot;/poetry/seasons-of-thought/another&quot;&gt;importance of community&lt;/a&gt; to &lt;a href=&quot;/articles/the-novelized-epic&quot;&gt;The Lord of the Rings&lt;/a&gt; to &lt;a href=&quot;/articles/create-a-svelte-site&quot;&gt;Svelte&lt;/a&gt; and everything in between.&lt;/p&gt;&lt;p&gt;Socrates worried that writing would change the way we think, and our brains are shaped by the tools we use. &lt;div count=&quot;1&quot;&gt;See &lt;a href=&quot;/notes/idea.writing-changes-the-way-we-think&quot;&gt;my notes on that&lt;/a&gt; or the book &lt;a href=&quot;/notes/book.reclaiming-conversation&quot;&gt;Reclaiming Conversation&lt;/a&gt;.&lt;/div&gt; But they remain our brains, shaped by our interests and whatever system I end up using I will be making connections not just with the information I put into that particular system, but with all my experiences, thoughts, and emotions. “No man is an island,” &lt;a href=&quot;http://www.luminarium.org/sevenlit/donne/meditation17.php&quot;&gt;wrote John Donne&lt;/a&gt; and though he wrote that about community and the church it is also true of the individual. We are not made for isolation but integration.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How I used Twitter as a CMS]]></title><description><![CDATA[How I built a website that uses the Twitter API to fetch data from tweets I liked to create a grid of colors.]]></description><link>https://www.dschapman.com/articles/how-i-used-twitter-as-a-cms</link><guid isPermaLink="false">https://www.dschapman.com/articles/how-i-used-twitter-as-a-cms</guid><pubDate>Thu, 17 Sep 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I built &lt;a href=&quot;https://colors.danielchapman.dev&quot;&gt;colors.danielchapman.dev&lt;/a&gt; — a single page website composed of a grid of colors. It isn’t anything too fancy, just some divs composed inside of a flex box, and a couple Svelte animations. The fun part, came in how I got the list of colors I generated, they weren’t randomly generated, or selected from a list of colors. No, I got them by liking tweets on Twitter. That’s right, Twitter is my Content Management System (CMS).&lt;/p&gt;&lt;div src=&quot;/how-colorsdanielchapmandev-gets-its-content.png&quot; alt=&quot;How I use Twitter as a CMS&quot;&gt;&lt;/div&gt;&lt;p&gt;The content of my website is derived from actions I take on my twitter acount. Technically I do this by liking tweets from the bot &lt;a href=&quot;https://twitter.com/everycolorbot&quot;&gt;@everycolorbot&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/everycolorbot/status/1306601668314902529&quot;&gt;https://twitter.com/everycolorbot/status/1306601668314902529&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Then using the javascript twitter API client &lt;a href=&quot;https://github.com/ttezel/twit&quot;&gt;twit&lt;/a&gt; to fetch the last 200 tweets I liked. &lt;div count=&quot;1&quot;&gt;The 200 tweet limit is a limit imposed by the Twitter API when fetching a list of likes &lt;a href=&quot;https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-favorites-list&quot;&gt;📜Documentation&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;js&quot;&gt;&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getColors&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; colors &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  bot&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&amp;quot;favorites/list&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;screen_name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;ds_chapman&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;err&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; data&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; response&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;tweet&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;tweet&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;user&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;screen_name &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;everycolorbot&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; color &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            color&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;text &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;tweet&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;slice&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            color&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;url &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;https://twitter.com/i/web/status/&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;tweet&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id_str&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            colors&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;color&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        fs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;writeFile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;colors.json&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;colors&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;err&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; err&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
          console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;quot;Colors written to color.json&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If that tweet came from @everycolorbot, it saves the color and a link to that tweet to a JSON.&lt;/p&gt;&lt;p&gt;Then it’s just a matter of importing that JSON to a webpage. I chose to use Svelte for a number of reasons. First and foremost because I was able use the &lt;a href=&quot;https://svelte.dev/repl/hello-world?version=3.25.1&quot;&gt;Svelte REPL&lt;/a&gt; and some sample data to get my prototype up and running in the browser. This made the development process simple from a setup perspective — after I had the prototype in a good state I just had to download the code and add it to my project.&lt;/p&gt;&lt;p&gt;The second reason I chose Svelte was how easy it is to add Svelte animations. I talk about that more in my article ”&lt;a href=&quot;/articles/create-a-svelte-site&quot;&gt;Create a Basic Svelte Site&lt;/a&gt;”, but for this site I also used the &lt;a href=&quot;https://github.com/d3/d3-random&quot;&gt;d3-random&lt;/a&gt; package to randomly stagger when colors fade onto the screen.&lt;/p&gt;&lt;p&gt;Now what’s the benefit of using Twitter as a CMS? I’m not sure there is one. On the other hand, there are many fun use cases — a next.js site where each post corresponds to a thread; a gatsby site built from an export of your timeline where the main page is a list of all your tweets, but every tweet also lives on its own page; a collection of Dad Jokes sourced from &lt;code class=&quot;language-text&quot;&gt;#DadJokes&lt;/code&gt;. I’m sure the possibilities are endless because the variety of content stored on Twitter is endless.&lt;/p&gt;&lt;h2 id=&quot;what-i-learned&quot;&gt;What I Learned&lt;/h2&gt;&lt;p&gt;While I learned many things from this exercise, the point was not to learn a specific platform, or even to learn to think of everything as a CMS. Just because everything can be a CMS doesn’t mean it should. No the main reason I used Twitter as a CMS was because it was fun, and at the end of the day building things can be fun.&lt;/p&gt;&lt;p&gt;If you want to build something fun I suggest doing something unexpected — like using Twitter as the source of your content. If you do, please send it to me (&lt;a href=&quot;https://twitter.com/ds_chapman&quot;&gt;@ds_chapman&lt;/a&gt; on Twitter). I’d love to see what you built!&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Create a Basic Svelte Site]]></title><description><![CDATA[A short guide to creating a simple Svelte site with animations and transitions.]]></description><link>https://www.dschapman.com/articles/create-a-svelte-site</link><guid isPermaLink="false">https://www.dschapman.com/articles/create-a-svelte-site</guid><pubDate>Mon, 24 Aug 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently used SvelteJS to create &lt;a href=&quot;https://danielchapman.dev&quot;&gt;a portfolio of websites I’ve built&lt;/a&gt;. &lt;div count=&quot;1&quot;&gt;Right now there’s only two websites listed, but I’m sure it will expand over time.&lt;/div&gt; The process of writing the website was fun — figuring out the syntax of Svelte, using the lovely transition and animation libraries, and playing with event handlers. Here’s a quick guide for how you can get started with Svelte.&lt;/p&gt;&lt;h2 id=&quot;what-is-svelte&quot;&gt;What is Svelte?&lt;/h2&gt;&lt;p&gt;Svelte is a tool for building fast web applications. It’s a bit similar to other frontend frameworks like React and Vue. Like React, Svelte constructs components, but unlike React which does its work in the browser at run time, Svelte compiles your app into optimized Javascript code.&lt;/p&gt;&lt;p&gt;I found that writing Svelte code is fun — it’s more like writing vanilla HTML or CSS than writing React — and animations and transitions have first class support.&lt;/p&gt;&lt;h2 id=&quot;creating-a-project-with-svelte-3&quot;&gt;Creating a Project with Svelte 3&lt;/h2&gt;&lt;p&gt;There is a template that you can use as a starting point to create your Svelte project. In your terminal run:&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;npx degit sveltejs/template my-svelte-project&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will use npx to run &lt;div tiptext=&quot;Degit is a tool that makes copies of git repositories. If you run `degit some-user/some-repo` it will find the latest commit on https://github.com/some-user/some-repo and download the associated tar file. This is faster than git clone because you&amp;#x27;re not downloading the entire git history.&quot;&gt;degit&lt;/div&gt; to create your svelte project.&lt;/p&gt;&lt;p&gt;Next go into the directory and run npm install.&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; my-svelte-project &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now that all the packages are installed you can start up the development server using &lt;code class=&quot;language-text&quot;&gt;npm run dev&lt;/code&gt; and see your website at &lt;a href=&quot;http://localhost:5000&quot;&gt;http://localhost:5000&lt;/a&gt;. Your Svelte component is stored in the file &lt;code class=&quot;language-text&quot;&gt;src/App.svelte&lt;/code&gt;, although you can easily create additional components and import them into &lt;code class=&quot;language-text&quot;&gt;App.svelte&lt;/code&gt;.&lt;/p&gt;&lt;h2 id=&quot;basic-svelte-structure&quot;&gt;Basic Svelte Structure&lt;/h2&gt;&lt;p&gt;A svelte file typically has a &lt;code class=&quot;language-text&quot;&gt;script&lt;/code&gt; tag, a &lt;code class=&quot;language-text&quot;&gt;style&lt;/code&gt; tag, and the svelte component. The &lt;code class=&quot;language-text&quot;&gt;script&lt;/code&gt; tags are where the brains of your Svelte component go — variable and function declarations. The &lt;code class=&quot;language-text&quot;&gt;style&lt;/code&gt; tag is contains the CSS to style your component. And finally there’s the svelte component, which for the most part you compose like you would with HTML or JSX, but there are some exceptions.&lt;/p&gt;&lt;p&gt;The most obvious exception are the if block, each block, and await block which are written in-line in the svelte component.&lt;/p&gt;&lt;h3 id=&quot;if-block&quot;&gt;If block&lt;/h3&gt;&lt;p&gt;The if block displays certain components conditionally.&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;html&quot;&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;{#if expression}
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;This div is displayed conditionally.&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
{:else}
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;Or this will be displayed&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
{/if}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&quot;each-block&quot;&gt;Each block&lt;/h3&gt;&lt;p&gt;The each block cycles through an array and displays code a certain way.&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;html&quot;&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
  {#each items as item}
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;{item.name}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
  {/each}
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&quot;await-block&quot;&gt;Await block&lt;/h3&gt;&lt;p&gt;The await block waits for asynchronous code to return and then displays content.&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;html&quot;&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;{#await promise}
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;Waiting for the promise&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
{:then value}
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;The value is {value}&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
{/await}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&quot;svelte-transitions--animations&quot;&gt;Svelte Transitions &amp;amp; Animations&lt;/h2&gt;&lt;p&gt;The real star of my experience with Svelte has been the transitions and animations.&lt;/p&gt;&lt;img src=&quot;/ef69b3498ca5a0ca6e2e61d6293a0f92/svelte-animations.gif&quot; alt=&quot;Svelte Animations from danielchapman.dev&quot; style=&quot;width:100%&quot;/&gt;&lt;p&gt;Transitions have first class support in Svelte, you just import the transition from svelte and attach it to the element you want to transition. For my website I created a &lt;code class=&quot;language-text&quot;&gt;Bio&lt;/code&gt; component so that if my name is clicked a short introduction will drop down. Implementing this in Svelte was straightforward. Here’s my &lt;code class=&quot;language-text&quot;&gt;Bio&lt;/code&gt; component with the styles removed:&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
  import { slide } from &amp;quot;svelte/transition&amp;quot;;
  let visible = false;
  let symbol = &amp;quot;▽&amp;quot;;
  export let intro;
&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;style&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
  ...
&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;style&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;bio&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;on:&lt;/span&gt;click&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;visible &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;visible&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;Daniel Chapman&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;

    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;symbol&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;visible &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;#x27;x&amp;#x27;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;#x27;▽&amp;#x27;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;#&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; visible&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;about&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;transition:&lt;/span&gt;slide&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;About Me&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;intro&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;intro&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You’ll see a few things here. First the &lt;code class=&quot;language-text&quot;&gt;on:click&lt;/code&gt; handler which toggles the &lt;code class=&quot;language-text&quot;&gt;visible&lt;/code&gt; variable. You’ll also see that there’s an if block whose contents will only display if &lt;code class=&quot;language-text&quot;&gt;visible&lt;/code&gt; is true. And finally in the &lt;code class=&quot;language-text&quot;&gt;div&lt;/code&gt; with the “about” class you’ll see the &lt;code class=&quot;language-text&quot;&gt;transition:slide&lt;/code&gt; attribute; this tells Svelte how to transition the element when it gets attached to or removed from the DOM — in other words whenever my name is clicked.&lt;/p&gt;&lt;p&gt;This is where the magic of Svelte started shining through for me. All I hd to do to add a fancy slide transition was to add the &lt;code class=&quot;language-text&quot;&gt;transition:slide&lt;/code&gt; attribute to a component.&lt;/p&gt;&lt;p&gt;Animations are a little trickier. I wanted a hover effect on the website cards I created so I created &lt;code class=&quot;language-text&quot;&gt;on:mouseenter&lt;/code&gt; and &lt;code class=&quot;language-text&quot;&gt;on:mouseleave&lt;/code&gt; handlers that use Svelte’s &lt;a href=&quot;https://svelte.dev/docs#svelte_motion&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;tweened&lt;/code&gt;&lt;/a&gt; function from &lt;code class=&quot;language-text&quot;&gt;svelte/motion&lt;/code&gt;. &lt;code class=&quot;language-text&quot;&gt;tweened&lt;/code&gt; is a function that starts at an initial value, then when you call &lt;code class=&quot;language-text&quot;&gt;set(newvalue)&lt;/code&gt;, it gradually moves from its initial value to the new value taking into consideration a &lt;code class=&quot;language-text&quot;&gt;duration&lt;/code&gt; in milliseconds and an &lt;code class=&quot;language-text&quot;&gt;easing&lt;/code&gt; function that effects how the value is incremented. I used this in combination with a style attribute to gradually animate CSS &lt;code class=&quot;language-text&quot;&gt;box-shadow&lt;/code&gt; when the mouse hovers over a website card.&lt;/p&gt;&lt;p&gt;The relevant code for the animation is below.&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;js&quot;&gt;&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; technologies &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; code &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; title &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;There was no Title&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; description &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;There was no Description&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; link&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; image &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; hovered &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; onMount &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;svelte&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; fade&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; slide &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;svelte/transition&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; tweened &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;svelte/motion&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; cubicOut &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;quot;svelte/easing&amp;quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; shadow &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tweened&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;duration&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;500&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;easing&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; cubicOut &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;handleClick&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    window&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;location &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; link&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;handleMouseEnter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    shadow&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    hovered &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;handleMouseLeave&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    shadow&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    hovered &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; mounted &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;onMount&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;mounted &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;script&lt;span class=&quot;token operator&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;At the top of the code block I define a tweened function called &lt;code class=&quot;language-text&quot;&gt;shadow&lt;/code&gt; which will gets set to 1 in &lt;code class=&quot;language-text&quot;&gt;handleMouseEnter()&lt;/code&gt; and 0 in &lt;code class=&quot;language-text&quot;&gt;handleMouseLeave()&lt;/code&gt;&lt;div&gt;You’ll also see the values &lt;code class=&quot;language-text&quot;&gt;on:touchstart&lt;/code&gt; and &lt;code class=&quot;language-text&quot;&gt;on:touchend&lt;/code&gt;, I discovered that these handle finger presses, so I set them to the equivalent mouse handler.&lt;/div&gt;. It does this over the period of 1/2 a second and uses a cubic easing function (&lt;code class=&quot;language-text&quot;&gt;cubicOut&lt;/code&gt;) Now let’s continue to look at the Svelte component below:&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;#&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; mounted&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;
    &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;on:&lt;/span&gt;click&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;handleClick&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;on:&lt;/span&gt;mouseenter&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;handleMouseEnter&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;on:&lt;/span&gt;touchstart&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;handleMouseEnter&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;on:&lt;/span&gt;mouseleave&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;handleMouseLeave&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;on:&lt;/span&gt;touchend&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;handleMouseLeave&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;transition:&lt;/span&gt;slide&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token special-attr&quot;&gt;&lt;span class=&quot;token attr-name&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token value css language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;box-shadow:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;$shadow * 30&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token selector&quot;&gt;px&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;$shadow * 15&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token selector&quot;&gt;px #925c77,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;$shadow * 45&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token selector&quot;&gt;px&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;$shadow * 21&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token selector&quot;&gt;px #75B9BE,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;$shadow * 60&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token selector&quot;&gt;px&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;$shadow * 30&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;px #7297A6&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;site&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt;
      &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;title&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;transition:&lt;/span&gt;fade&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;250&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token special-attr&quot;&gt;&lt;span class=&quot;token attr-name&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;token value css language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;text-decoration:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;hovered ? &lt;span class=&quot;token string&quot;&gt;&amp;#x27;underline&amp;#x27;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&amp;#x27;none&amp;#x27;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;link&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;title&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;image&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;A screenshot of {title}&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;description&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;transition:&lt;/span&gt;fade&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;500&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;description&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;code&lt;span class=&quot;token punctuation&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;#each technologies &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; technology&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;technology&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;each&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;code&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;Source Code&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In the top-level div you’ll see there is a style tag. Animating the CSS in Svelte was a simple matter of using the style tag, and because Svelte allows JS within the curly brackets multiplying the &lt;code class=&quot;language-text&quot;&gt;shadow&lt;/code&gt; variable (which moves from 0 to 1 when the mouse is hovered, and from 1 to 0 when the mouse is removed.) by different values to create the triple-layered shadow effect that you can see on the site.&lt;/p&gt;&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;&lt;p&gt;All in all it took less than a weekend from the moment I started learning Svelte watching &lt;a href=&quot;https://egghead.io/playlists/getting-started-with-svelte-3-05a8541a&quot;&gt;this 26 minute Egghead collection&lt;/a&gt; to when I finished the rough draft of &lt;a href=&quot;https://danielchapman.dev&quot;&gt;my Svelte website&lt;/a&gt;. It might not have taken long, but it was long enough to show me that Svelte is a unique, fun language with powerful functionality.&lt;/p&gt;&lt;p&gt;The code for &lt;a href=&quot;https://github.com/dschapman/danielchapman-dev&quot;&gt;my website is open source&lt;/a&gt; and you are welcome to browse it, copy it, and tinker with it.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Hypertext Writing]]></title><description><![CDATA[Every medium has its strengths. There are considerable strengths inherent to a digital, web-based, way of thinking -- first and foremost is the sheer amount of interactivity and connections you can make.]]></description><link>https://www.dschapman.com/articles/hypertext-writing</link><guid isPermaLink="false">https://www.dschapman.com/articles/hypertext-writing</guid><pubDate>Tue, 16 Jun 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Every medium has its strengths. There are considerable strengths inherent to a digital, web-based, way of thinking — first and foremost is the sheer amount of interactivity and connections you can make.&lt;/p&gt;&lt;p&gt;Now some of these strengths are not inherent to the web. As &lt;div tiptext=&quot;An early pioneer of the internet and the inventor of the term &amp;#x27;hyperlink&amp;#x27;&quot;&gt;Ted Nelson&lt;/div&gt; points out in his video &lt;a href=&quot;/notes/9ed1a781-7fa9-4137-8344-95119ffbb08d&quot;&gt;Visible Connection&lt;/a&gt; the written word has used its ability to provide context visually through side by side content, marginalia, paragraph summaries and more ever since the &lt;a href=&quot;https://en.wikipedia.org/wiki/Rosetta_Stone&quot;&gt;Rosetta Stone&lt;/a&gt;.&lt;div count=&quot;1&quot;&gt;Don’t forget about the footnote/endnote.&lt;/div&gt;&lt;/p&gt;&lt;p&gt;But the web allows writers to do crazy things like use &lt;a href=&quot;https://maggieappleton.com/bidirectionals&quot;&gt;bidirectional links&lt;/a&gt;, or have additional content appear when hovering over text, or reference the text of entire books like &lt;a href=&quot;http://www.gutenberg.org/cache/epub/10/pg10.txt&quot;&gt;The King James Bible&lt;/a&gt; or &lt;a href=&quot;https://ocw.mit.edu/ans7870/6/6.006/s08/lecturenotes/files/t8.shakespeare.txt&quot;&gt;The Complete Works of William Shakespeare&lt;/a&gt; with short little hyper links.&lt;/p&gt;&lt;p&gt;Our capabilities seem endless and new innovations and tools with new capabilities appear every week.&lt;div count=&quot;2&quot;&gt;Check out &lt;a href=&quot;https://www.notion.so/Artificial-Brain-Networked-notebook-app-a131b468fc6f43218fb8105430304709&quot;&gt;this growing list of tools&lt;/a&gt; for networked thinking.&lt;/div&gt;The key with any medium is knowing what its strengths are and knowing when something might be cool, but not useful. The law of unintended consequences still applies to the internet.&lt;/p&gt;&lt;h2 id=&quot;links-distract-your-reader&quot;&gt;Links distract your reader&lt;/h2&gt;&lt;p&gt;What are the side effects of links? A flood of information can end up distracting readers. &lt;a href=&quot;https://notes.andymatuschak.org/z2HUE4ABbQjUNjrNemvkTCsLa1LPDRuwh1tXC&quot;&gt;Dense links are helpful for your notes&lt;/a&gt;, but are they helpful to the person trying to follow a logical train of thought in a carefully constructed article?&lt;/p&gt;&lt;p&gt;Links interrupt the flow of a reader’s thought — that is their inherent strength and weakness. In all writing it’s important to know when a new concept is introduced,&lt;div count=&quot;2&quot;&gt;Every new concept threatens to lose a reader who doesn’t understand or offers them an opportunity to learn. Good writing weaves around potential new concepts, but it also knows its audience and doesn’t explain every little thing.&lt;/div&gt; and links provide a convenient way to introduce new concepts — linking directly to the sources that helped the writer understand a concept. However, every time a link is offered, a reader is offered a door down a rabbit hole from which they might never emerge.&lt;/p&gt;&lt;p&gt;Ted Nelson and other internet thinkers have leaned heavily on links — &lt;div tiptext=&quot;Project Xanadu: The culmination of Ted Nelson&amp;#x27;s vision for what the World Wide Web should have been - featuring bidirectional links, transclusion, and more.&quot;&gt;Project Xanadu&lt;/div&gt;’s promise of visual connection to every source referenced in a text sounds great in theory, but the reality is an interconnected web of colored lines that is difficult to interpret. It is cool technology, but does it actually help the reader?&lt;div count=&quot;3&quot;&gt;Of course this will vary from reader to reader. Project Xanadu, indeed the very concept of hypertext was created by Ted Nelson to help channel his Attention Deficit Disorder. See &lt;a href=&quot;https://www.wired.com/1995/06/xanadu/&quot;&gt;“The Curse of Xanadu”&lt;/a&gt;, Wired&lt;/div&gt;&lt;/p&gt;&lt;div caption=&quot;Screenshot from XanaduSpace - a 3D implementation of project Xanadu, with visual links connecting an essay with the source texts it references.&quot; src=&quot;/9a-XUSP.png&quot; alt=&quot;Screenshot from XanaduSpace - a 3D implementation of project Xanadu.&quot;&gt;&lt;/div&gt;&lt;h2 id=&quot;links-dilute-meaning&quot;&gt;Links dilute meaning&lt;/h2&gt;&lt;p&gt;The other danger is that the sheer amount of links will dilute what is communicated. On a practical level, sometimes it is easier to pay attention to the meaning of a text if it is all one color. Furthermore, one of the most valuable things I learned from my English degree was that it is sometimes better to assert my opinion without without any hedging or hiding what I actually think — and at least for me, references or links are a way of hiding behind someone else’s thoughts.&lt;/p&gt;&lt;div&gt;If you don&amp;#x27;t state your opinion, what sets your writing apart?&lt;/div&gt;&lt;p&gt;Of course there has to be a balance — and in an age where anyone can have a platform to say anything, it is important to know what you know, but also what other people might know better.&lt;/p&gt;&lt;h2 id=&quot;writing-in-hypertext-is-valuable&quot;&gt;Writing in hypertext is valuable&lt;/h2&gt;&lt;p&gt;Of course throughout this essay I’ve been using links as I write, because while I do believe that links could be a distraction and that they can dilute meaning, I also firmly believe that it is not my job to decide what you the reader can handle and somehow trick you into reading every word I’ve written. I write knowing that you might have followed my link to the 1995 Wired Article on Ted Nelson that was buried in a footnote up above, and you might not come back after opening that link…that’s just fine.&lt;div count=&quot;4&quot;&gt;I lost an hour when I first discovered that article, and I still want to go back and &lt;a href=&quot;https://www.wired.com/1995/06/xanadu/&quot;&gt;finish reading it&lt;/a&gt;.&lt;/div&gt;&lt;/p&gt;&lt;p&gt;As a writer the internet medium has strengths that I haven’t fully utilized before. I believe this digital format allows all of us — writers and readers — to make connections in new ways and explore ideas robustly. Certainly it is important to know the power of putting a link in place and limitting the number of links&lt;div count=&quot;5&quot;&gt;For an example of an essay that does this well, checkout &lt;a href=&quot;http://www.eastgate.com/garden/&quot;&gt;Hypertext Gardens: Delightful Vistas&lt;/a&gt;&lt;/div&gt; to what could be reasonably explored — but if each link represents an idea worth exploring, then &lt;div tiptext=&quot;If I believe that truth exists, which I do, than exploration is not something to be scared of, it&amp;#x27;s something to encourage. The truth can always bear exploration.&quot;&gt;who am I to prevent exploration&lt;/div&gt;.&lt;/p&gt;&lt;p&gt;As I wrote this post I explored &lt;a href=&quot;/notes/688962f2-77e8-44b4-992c-37a3cc6ce513&quot;&gt;different notes&lt;/a&gt; I’ve written about these subjects as well as other resources, and that process helped me make new connections and improved both my understanding and this article. It comes at the cost of distraction, but that cost was there in the old medium too — anyone who has lost hours in a library as a child knows that it has always been possible to fall down a rabbit hole and discover the worlds that are buried underneath.&lt;/p&gt;&lt;h2 id=&quot;further-reading&quot;&gt;Further Reading&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://maggieappleton.com/bidirectionals&quot;&gt;Maggie Appleton’s Short History of Bidirectional Links&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Ted Nelson’s Video Series on Project Xanadu, beginning with &lt;a href=&quot;/notes/9ed1a781-7fa9-4137-8344-95119ffbb08d&quot;&gt;Visible Connection&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Art Doesn't Have to be Viral]]></title><description><![CDATA[The promise of the internet is one of instant fame, and if you play your cards right, fortune that can literally take you to the stars, but is that really art's purpose?]]></description><link>https://www.dschapman.com/articles/art-doesnt-have-to-be-viral</link><guid isPermaLink="false">https://www.dschapman.com/articles/art-doesnt-have-to-be-viral</guid><pubDate>Sun, 31 May 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The promise of the internet is one of instant fame, and if you play your cards right, fortune that can literally take you to the stars&lt;div count=&quot;1&quot;&gt;&lt;a href=&quot;https://www.washingtonpost.com/technology/2020/05/30/elon-musk-spacex-pull-off-another-feat-few-thought-possible/&quot;&gt;See the recent SpaceX launch&lt;/a&gt; funded by the internet fortune of Elon Musk&lt;/div&gt;. Of course the reality is that the fame is short, fleeting, and hard to catch — the fortune even harder.&lt;/p&gt;&lt;p&gt;Art in the internet age wants to be instantly famous. Artists look for high traffic places for their photos, art, poems, and novels along with the monetary hook — song is on Spotify, like and subscribe for &lt;div tiptext=&quot;and more ads&quot;&gt;more content&lt;/div&gt;, or my personal favorite &lt;div tiptext=&quot;I am just as guilty as anyone for dreaming of making it big 🤷🏼‍♂️&quot;&gt;&lt;a href=&quot;https://www.amazon.com/Seasons-Thought-D-S-Chapman/dp/0578504359&quot;&gt;buy my book on Amazon&lt;/a&gt;&lt;/div&gt;.&lt;/p&gt;&lt;p&gt;Whatever your medium, the internet provides unparalleled tools to self-publish. Youtube, Instagram, and Twitter all allow you to build your following and have algorithms that may one day smile upon you. The muse of old has become an algorithm, but they are no longer a personal muse, unique to every artist but a single impersonal algorithm — trading the strict demands of absolute beauty for the shifting sands of popularity.&lt;div count=&quot;2&quot;&gt;It is certainly true that good and beautiful things are often popular but it is also false that all popular things are good and beautiful.&lt;/div&gt;&lt;/p&gt;&lt;h2 id=&quot;it-is-not-all-bad---not-even-close&quot;&gt;It is not all bad - not even close&lt;/h2&gt;&lt;p&gt;The internet has also given us unparalleled tools for creation. In my computer or even my iPhone I have limitless tools for creation. There is paid and free software for &lt;div tiptext=&quot;[object Object]&quot;&gt; typsetting&lt;/div&gt;, drawing, photo editing, design, and writing. Less than a century ago many of these things required entire rooms of equipment and years of experience — now they sit at our fingertips.&lt;/p&gt;&lt;p&gt;And as impossible as it may be to strike it viral, the internet allows us to pretty reliably communicate with our community — now not limited to a single place. Odds are good that if you’re reading this you are friends with me, related to me, or at least acquainted with me.&lt;/p&gt;&lt;p&gt;Earlier this year I wrote a piece reflecting on the &lt;a href=&quot;/articles/55-books&quot;&gt;55 books I sold in 2019&lt;/a&gt;. In some ways that number disappointed me — I would have loved to &lt;div tiptext=&quot;An unrealistic goal at the best of times 😉&quot;&gt;make it big writing poetry&lt;/div&gt; — or at the very least, break even on the money I had spent on the project. But art does not need to be viral, in fact it is better if it is not.&lt;/p&gt;&lt;div&gt;Art is better if its not viral&lt;/div&gt;&lt;p&gt;Viral art must appeal to all people everywhere, a task that is always difficult. But art that has to appeal to everyone also loses its punch. It is hard to critique, nuance, or issue a call to action that will appeal to everyone. More importantly as artist Makoto Fujimura articulates in Culture Care — great art is written in and for specific communities&lt;div count=&quot;3&quot;&gt;See particularly Chapters 2-4 of Culture Care&lt;/div&gt; and artists are often on the border of these communities&lt;div count=&quot;1&quot;&gt;Fujimura uses the anglosaxon term mearcstapasm or border-walkers, to describe artists&lt;/div&gt;, seeing the world and their culture from a very specific, relational point of view.&lt;/p&gt;&lt;p&gt;Perhaps in this internet age all our art should be created with the people we know in mind. Hand crafted websites for the person we love, cinematic family videos of the &lt;div tiptext=&quot;This video was shot entirely on an iPhone!&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=unGFQaxFUWU&quot;&gt; family trip to Disney World&lt;/a&gt;&lt;/div&gt;, a beautifully designed family cookbook that will only ever sell 10 copies, or a thousand other small projects made to cultivate our communities into better places; to make our friends smile, laugh, or cry; or to make our small connected worlds into a better world.&lt;/p&gt;&lt;p&gt;And maybe if we create art like that, we’ll realize that art was always supposed to do just that.&lt;/p&gt;&lt;div&gt;Art helps us to see our neighbor&lt;/div&gt;&lt;p&gt;Art has great power to change the way we think about the people around us. As C.S. Lewis said:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;But in reading great literature I become a thousand men and yet remain myself. Like the night sky in the Greek poem, I see with a myriad eyes, but it is still I who see. Here, as in worship, in love, in moral action, and in knowing, I transcend myself; and am never more myself than when I do.&lt;div count=&quot;4&quot;&gt;C.S. Lewis, An Experiment on Criticism&lt;/div&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;And in our current era of divisive polarization, where it becomes more and more clear that we do not see our neighbor, the temptation of a silver bullet — a piece of art that will transcend all our disagreements and cause everyone to see one another for who we really are — becomes even more appealing. But that temptation ignores the fact that real change has always happened in communities — communities in an incredibly small relational sense. If you want to understand and love your neighbor better you have to get to know him or her directly. You have to put aside what you want out of a situation and listen like a friend, even when you think you disagree.&lt;/p&gt;&lt;p&gt;Justice and beauty are connected.&lt;div count=&quot;5&quot;&gt;Culture Care, 68.&lt;/div&gt; Art shows us the world as it is, and points out where it is not as it ought to be. A viral video, a picture with a million likes on Instagram, or the next popular summer blockbuster (whether it is read or watched) will not change my life or your life. Only relationships can do that. And art that facilitates relationships, conversations, growth, and reconciliation must start by being close, immediate, and connected to us and those we love or are learning to love.&lt;/p&gt;&lt;h2 id=&quot;works-cited&quot;&gt;Works Cited&lt;/h2&gt;&lt;p&gt;Fujimura, Makoto. &lt;a href=&quot;/notes/book.culture-care&quot; title=&quot;book.culture-care|Culture Care&quot;&gt;[[book.culture-care|Culture Care]]&lt;/a&gt;: Reconnecting with Beauty for Our Common Life. Intervarsity Press. Print.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How I Coded This Website]]></title><description><![CDATA[A little bit about how I coded this website with GatsbyJS.]]></description><link>https://www.dschapman.com/articles/how-i-coded-this-website</link><guid isPermaLink="false">https://www.dschapman.com/articles/how-i-coded-this-website</guid><pubDate>Fri, 07 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Fun Fact: I coded this website myself. The source code for everything you see lives on my computer&lt;div count=&quot;1&quot;&gt;&lt;a href=&quot;https://github.com/dschapman/PersonalBlog&quot;&gt;You can also browse it on Github&lt;/a&gt;&lt;/div&gt;.&lt;/p&gt;&lt;p&gt;There are many reasons I enjoy coding — problem solving, creativity, learning new technologies and new systems. I also love coding because its a bit like magic. Lines of code are the incantation, symbols have to be arranged just so or else the magic fizzles.&lt;/p&gt;&lt;p&gt;The problem is that a website is not an easy spell, at least for this dabbler in the art. There are multiple files that work together to accomplish different things. Some of the files define what my &lt;a href=&quot;/about&quot;&gt;about page&lt;/a&gt; looks like, while others work to convert ordinary text files&lt;div count=&quot;2&quot;&gt;My website content is kept in &lt;a href=&quot;https://en.wikipedia.org/wiki/Markdown&quot;&gt;markdown&lt;/a&gt; files.&lt;/div&gt; into web pages like the one you’re reading now. There are multiple languages at work - in my case Javascript (React), HTML, CSS, and GraphQL.&lt;/p&gt;&lt;p&gt;Luckily, I don’t have to reinvent the wheel (or the spell book). Other mages have travelled this way before and left their notes and tools behind which I have used as I’ve coded my site. The largest tool has been &lt;a href=&quot;https://www.gatsbyjs.org&quot;&gt;Gatsby&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;what-is-gatsby&quot;&gt;What is Gatsby?&lt;/h2&gt;&lt;p&gt;Gatsby is a static site generator which means that static files are generated when I build my site and then these light-weight pages are served to your browser whenever you visit my website.&lt;/p&gt;&lt;p&gt;What this means practically is that I can design and code my website using Javascript. I can tell Javascript what I want it to do with my content programmatically. Then instead of recreating that for each page of my website, I can just tell it to take content (like &lt;a href=&quot;https://github.com/dschapman/my-website/blob/master/content/posts/how-i-coded-this-website.md&quot;&gt;the markdown file&lt;/a&gt; containing this article) and turn it into a page on my website complete with the appropriate tags, links to similar content, dynamic share image, and updates to my &lt;a href=&quot;/&quot;&gt;front page&lt;/a&gt; — all by adding a single file to a folder.&lt;/p&gt;&lt;p&gt;For me this means that its super easy to write something on my website. I just create a markdown file, write my piece, and then push that file to &lt;a href=&quot;https://github.com/dschapman/PersonalBlog&quot;&gt;my repository on Github&lt;/a&gt;. I can also easily add on to an article I previously wrote &lt;em&gt;like this one&lt;/em&gt;.&lt;/p&gt;&lt;h2 id=&quot;resources-for-building-your-own-website&quot;&gt;Resources for Building Your Own Website&lt;/h2&gt;&lt;p&gt;I have always enjoyed computers and had a high level understanding of programming before I built my website. But if you don’t have much of a technical background, these are some of the resources I’d recommend to get started learning how to code your website:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML&quot;&gt;MDN web docs — Introduction to HTML&lt;/a&gt;: HTML is the backbone of any website and I consult the Mozilla web docs whenever I have a question about HTML or CSS&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Learn/CSS&quot;&gt;MDN web docs — Learn to style HTML using CSS&lt;/a&gt;: CSS is how you make HTML look pretty. The Mozilla Web docs are great.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Learn/JavaScript&quot;&gt;MDN web docs - Javascript&lt;/a&gt;: I actually didn’t use MDN to learn Javascript, but including it here for completeness. As long as you’re familiar with high level programming concepts and willing to learn as you go you can try skipping to the next item on the list.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://egghead.io/courses/build-a-blog-with-react-and-markdown-using-gatsby&quot;&gt;Build a Blog with React and Markdown — Egghead.io&lt;/a&gt;: Egghead.io is a great source for video learning content on web technologies. They are aimed at tech professionals so there’s some assumed knowledge, but I found this video series easy to follow and by the end you will have a blog of your own built on Gatsby.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.gatsbyjs.org/tutorial/&quot;&gt;Gatsby.js Tutorials &lt;/a&gt;: Once you’ve followed the egghead video (or maybe simultaneously) you can also check out the Gatsby documentation.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.gatsbyjs.org/plugins/&quot;&gt;Gatsby.js Plugin Library&lt;/a&gt;: Once your site is up and running, try adding plugins to add more features. If it doesn’t work figure out why or try something else.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.gatsbyjs.com/plugins/gatsby-theme-blog/&quot;&gt;Gatsby Theme Blog&lt;/a&gt;: Gatsby Themes are a great way to get a Gatsby site going without too much coding. If you just want a blog, this one is a great place to start.&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;more-advanced-resources&quot;&gt;More Advanced Resources&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://egghead.io/playlists/building-an-opengraph-image-generation-api-with-cloudinary-netlify-functions-and-react-914e&quot;&gt;Building an OpenGraph Image Generation API&lt;/a&gt;: I used this video collection on egghead.io (along with copying code from &lt;a href=&quot;https://twitter.com/_jonesian&quot;&gt;Ian Jones&lt;/a&gt;) to create a system that automatically generates the images that appear when you share my website via twitter or services like imessage. &lt;a href=&quot;https://github.com/dschapman/egghead-opengraph-images&quot;&gt;You can see my implementation of this on Github&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Books as Places]]></title><description><![CDATA[Books are not only physical objects. They take up space and so they are places.]]></description><link>https://www.dschapman.com/articles/55-books</link><guid isPermaLink="false">https://www.dschapman.com/articles/55-books</guid><pubDate>Sat, 04 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;55-books&quot;&gt;55 Books&lt;/h2&gt;&lt;p&gt;In June 2019 I self published &lt;a href=&quot;/poetry/seasons-of-thought/&quot;&gt;my book&lt;/a&gt;. By the end of 2019 I had sold 55 copies. 55 copies of poetry kindly bought by friends and friends of friends.&lt;/p&gt;&lt;p&gt;I recently watched the new adaptation of Little Women. One of my favorite scenes was Jo March watching the first copies of her book being made. I have always loved the physicality of books, although I own a kindle now, when I was younger I was quite vocal about my preference for physical books, and I still prefer reading the printed word on pages I can put my finger in-between and mark with a pen.&lt;/p&gt;&lt;div&gt;Books are places&lt;/div&gt;&lt;p&gt;Books are not only physical objects; they take up space and so they are places. They are small places. A copy of my book has a volume of around 10.8 cubic inches; it takes up roughly the same amount of space as a tennis ball. But the surface area of a book is much larger.&lt;/p&gt;&lt;div alt=&quot;Jo laying out the pages of her book&quot; src=&quot;/little-women-pages.png&quot;&gt;&lt;/div&gt;&lt;p&gt;Another scene I loved in Little Women was when Jo spreads her manuscript across her room, moving around pages, making adjustments, surveying her work with her mother. For a while her novel was her room — a place that she can survey and change. If the 60 pages of my book were spread out they would take up 22.5 square feet — not a large amount of space but its not a large book.&lt;/p&gt;&lt;p&gt;Anyone who has read Little Women or any other novel know that this sense of place extends beyond the medium of bound pages. Books becomes places in your mind, places you can explore in your imagination even while the physical book remains closed. This was one of the reasons I decided to self-publish some of my poems. I knew that I could have submitted them for publication, or kept them for myself but I wanted to create a place for them — to curate where they lived, who their neighbors were, and how they were adorned.&lt;/p&gt;&lt;p&gt;It was undeniably cool to hold the first copies of my book in my hands but it wasn’t nearly as cool as I thought it would be. As someone who has always dreamed of publication, often in the context of it being a life changing event analogous to winning the lottery, my life changed hardly at all. But the lasting, quieter joy from 2019 has been seeing my book in the hands of friends.&lt;/p&gt;&lt;p&gt;I am not skilled in hospitality. My room is messy more often than I care to admit. Often I prefer a quiet evening rather than hosting a dinner party. But as friends have told me they’ve read my book or bought a copy for their friend I feel a bit like a host giving a tour of the house he designed, or a gardener walking through rows of tomatoes and corn in August showing the fruit of his labor.&lt;/p&gt;&lt;p&gt;55 books is not much to write home about. The royalties I’ve received barely cover the price of my ISBN number. But if it was about money I wouldn’t have gone into poetry. One of the things it is about is creating spaces and sharing that space with others. 55 books may not make much of a house, but at 1237.5 square feet, it is a decent apartment.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Which Poetic Form is Best?]]></title><description><![CDATA[How to choose which form to use to write a poem.]]></description><link>https://www.dschapman.com/articles/which-poetic-form-is-best</link><guid isPermaLink="false">https://www.dschapman.com/articles/which-poetic-form-is-best</guid><pubDate>Tue, 12 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A friend recently asked me which four stanzas poetry form was the best. It’s not a question with an easy or definitive answer, but it is worth considering - since it gets at the broader question of how poetry works and how we can write it.&lt;/p&gt;&lt;h2 id=&quot;what-is-a-poetic-form&quot;&gt;What is a Poetic Form&lt;/h2&gt;&lt;p&gt;A form is the design of a poem. How many lines? how many syllables in a line? what rhythm do the lines have? do they rhyme? what pattern do they rhyme in? these are some of the questions that a form provides answers to.&lt;/p&gt;&lt;p&gt;A form also carries with it expectations about what the form will be used for. In the same way that you wouldn’t expect a Victorian house to have a garage or a minivan to be used in a drag race you wouldn’t expect &lt;a href=&quot;https://en.wikipedia.org/wiki/Limerick_(poetry)&quot;&gt;a limerick&lt;/a&gt; to be used to explore the nuances of a complex concept or for a &lt;a href=&quot;https://en.wikipedia.org/wiki/Sonnet&quot;&gt;sonnet&lt;/a&gt; to do nothing but describe nature.&lt;/p&gt;&lt;p&gt;There are &lt;a href=&quot;https://www.writersdigest.com/whats-new/list-of-50-poetic-forms-for-poets&quot;&gt;numerous examples of different forms&lt;/a&gt; most of which are different permutations of &lt;a href=&quot;http://www.thepoetsgarret.com/form.html&quot;&gt;different meters&lt;/a&gt; and rhyme schemes, but each with a unique history and tradition. Even free-verse which avoids regular meter or rhyme schemes is a poetic form with its own expectations. Mary Oliver’s &lt;a href=&quot;https://www.goodreads.com/book/show/71652.A_Poetry_Handbook&quot;&gt;A Poetry Handbook&lt;/a&gt; has a very helpful chapter on free-verse that is well worth reading if you wish to work in free verse. In that book she says this, “The free-verse poem sets up in terms of sound and line, a premise or and expectation, and then before the poem finishes, it makes a good response to this premise.” This is not only true of free verse poetry but all poetry. Whatever poetic form you choose sets up expectations which must be answered in some way before the poem finishes.&lt;/p&gt;&lt;h2 id=&quot;so-which-form-is-best&quot;&gt;So Which Form is Best?&lt;/h2&gt;&lt;p&gt;The correct answer is whatever form works for what you’re trying to communicate. Of course I’m trying to dodge the question, but that’s because if you’re asking this question you usually have a specific idea in mind and what you actually want to know is what form should I use for &lt;em&gt;this specific poem&lt;/em&gt;. And the right answer to that question is whatever form allows you to best express what that poem needs to say; there’s no way that I can know what form that takes because it’s not my poem.&lt;/p&gt;&lt;p&gt;Now to answer the question behind the question, “&lt;strong&gt;How do I choose the correct form for this specific poem?&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;The first step is to learn your options.&lt;/div&gt;&lt;p&gt;Do you know how an &lt;a href=&quot;https://en.wikipedia.org/wiki/Iamb_(poetry)&quot;&gt;iamb&lt;/a&gt; sounds vs. a &lt;a href=&quot;https://en.wikipedia.org/wiki/Iamb_(poetry)&quot;&gt;trochee&lt;/a&gt;? Can you recognize the cadence of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Dactyl_(poetry)&quot;&gt;dactyl&lt;/a&gt;? The best way to gain this familiarity is read more poetry. Read &lt;a href=&quot;https://www.poetryfoundation.org/poets/william-shakespeare&quot;&gt;Shakespeare&lt;/a&gt; and Browning (both &lt;a href=&quot;https://www.poetryfoundation.org/poets/elizabeth-barrett-browning&quot;&gt;Elizabeth Barrett&lt;/a&gt; and &lt;a href=&quot;https://www.poetryfoundation.org/poets/robert-browning&quot;&gt;Robert&lt;/a&gt;), &lt;a href=&quot;https://www.poetryfoundation.org/poets/emily-dickinson&quot;&gt;Dickinson&lt;/a&gt;, &lt;a href=&quot;https://www.poetryfoundation.org/poets/william-wordsworth&quot;&gt;Wordsworth&lt;/a&gt;, &lt;a href=&quot;https://www.poetryfoundation.org/poets/henry-wadsworth-longfellow&quot;&gt;Wadsworth&lt;/a&gt;, and &lt;a href=&quot;https://www.poetryfoundation.org/poets/robert-burns&quot;&gt;Burns&lt;/a&gt;. Buy an &lt;a href=&quot;https://www.goodreads.com/book/show/620729.Immortal_Poems_of_the_English_Language?ac=1&amp;amp;from_search=true&amp;amp;qid=odFS4A5B0E&amp;amp;rank=1&quot;&gt;anthology&lt;/a&gt; or a book &lt;a href=&quot;https://www.goodreads.com/book/show/201217.Rules_for_the_Dance?ac=1&amp;amp;from_search=true&amp;amp;qid=EhIebjCcYw&amp;amp;rank=1&quot;&gt;on writing poetry&lt;/a&gt;. As you read learn to count the rhythm, mark the emphasis, feel the rise and fall of the syllables, repeat the lines that strike your soul until you learn to wield the hammer.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Then write.&lt;/strong&gt; Try to write iambic pentameter in blank verse, then try rhymed couplets, or a sonnet, imitate your favorite poem, maybe try and figure out how to make a &lt;a href=&quot;https://en.wikipedia.org/wiki/Villanelle&quot;&gt;villanelle&lt;/a&gt; work. As you write pay attention to when the words flow easily and how they sound. Learn how their rhythms sound in your voice. Then try another form.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Finally, repeat the process again.&lt;/strong&gt; I don’t think this process ever ends. As I write this I’m looking over at my shelves, trying to decide who I should read next, which meter I should be trying to learn better.&lt;/p&gt;&lt;p&gt;But you also learn as you write. For instance, I find that I default to iambic tetrameter when I write. The words flow easier, the thoughts feel less formal. If I was telling a memory from my childhood I might try to tell it first in iambic tetrameter because that form feels closer to how I speak and removes the barrier of formality from my voice.&lt;/p&gt;&lt;p&gt;I might choose iambic pentameter when I want a little more credibility. The extra two syllables allow me to echo the rhythms of Shakespeare or Milton, or at least to place the poem in the same conversation. If I’m trying to wrestle with an idea then I might choose a sonnet or blank verse and when I want to drive my point home at the end of the poem I might use a heroic couplet.&lt;/p&gt;&lt;p&gt;At the end of the day poetic forms are tools and the best way to know which tool to use is to research them and try them out.&lt;/p&gt;&lt;h2 id=&quot;resources-for-learning-more-about-poetic-forms&quot;&gt;Resources for learning more about Poetic Forms&lt;/h2&gt;&lt;h3 id=&quot;general-guides-to-poetry&quot;&gt;General Guides to Poetry&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/71652.A_Poetry_Handbook&quot;&gt;A Poetry Handbook&lt;/a&gt;, Mary Oliver&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/201217.Rules_for_the_Dance&quot;&gt;Rules for the Dance&lt;/a&gt;, Mary Oliver&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;poetry-anthologies&quot;&gt;Poetry Anthologies&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/620729.Immortal_Poems_of_the_English_Language&quot;&gt;Immortal Poems of the English Language&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;sonnets&quot;&gt;Sonnets&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://shakespeare.mit.edu/Poetry/sonnets.html&quot;&gt;Shakespeare’s Sonnets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/16688430-sounding-the-seasons&quot;&gt;Sounding the Seasons: Seventy Sonnets for the Christian Year&lt;/a&gt;, Malcolm Guite&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.gutenberg.org/files/2002/2002-h/2002-h.htm&quot;&gt;Sonnets from the Portuguese&lt;/a&gt;, Elizabeth Barrett Browning&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.sonnets.org/donne.htm&quot;&gt;Holy Sonnets&lt;/a&gt;, John Donne&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;blank-verse&quot;&gt;Blank Verse&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.poetryfoundation.org/poems/44266/mending-wall&quot;&gt;Mending Wall&lt;/a&gt;, Robert Frost&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;villanelle&quot;&gt;Villanelle&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://malcolmguite.wordpress.com/2011/10/06/a-villanelle-for-national-poetry-day/&quot;&gt;On being told my poetry was found in a broken photocopier&lt;/a&gt;, Malcolm Guite&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://poets.org/poem/do-not-go-gentle-good-night&quot;&gt;Do not go gentle into that good night&lt;/a&gt;, Dylan Thomas&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[How to Understand Poetry]]></title><description><![CDATA[A brief attempt to explain how to frame and understand poetry.]]></description><link>https://www.dschapman.com/articles/how-to-understand-poetry</link><guid isPermaLink="false">https://www.dschapman.com/articles/how-to-understand-poetry</guid><pubDate>Fri, 07 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Everyone has had &lt;em&gt;that&lt;/em&gt; moment—a vibrant shining memory that reaches for your shoulder, reaching to turn you around. If you close your eyes, you might return there now. Sometimes it is the single moment that shaped your life—love, an achievement, a decision. More often they are small moments quickly forgotten—dreams that fade like rainbows, a hawk wings spread just so, a smile that catches its eyes aflame.&lt;/p&gt;&lt;p&gt;These are the moments we have to start with in order to understand poetry. It does us no good to discuss rhyme schemes, iambic pentameter, the rules of free verse (and there are rules), or even the images that poets use, if we do not first understand what those images and poetic devices are trying to touch on.&lt;/p&gt;&lt;p&gt;You see poetry tries to use words to describe those moments that leave you without any. It seeks the rhythm your heart found once, but never found again. Even at its most philosophical, poetry lays claim to concepts that philosophy wrung dry. and drinks deeply. I could say that poetry is about expressing the inexpressible, and that would be half true but too trite. The inexpressible is exactly that and good poetry knows it and stops short of attempting a comprehensive report.&lt;/p&gt;&lt;p&gt;All the trappings—the rhymes, the sounds of words—are trying to get back to that moment in memory, that concept that’s just out of reach. Those moments remain with us, catch our gaze, because they remind us, if only for an instant, that the world is bigger than we comprehend. Poetry probes into that incomprehension like a child probes into the infinity of space as he lays in bed, not because poetry wishes to define and categorize but because beyond, within, and surrounding us are things more vast and beautiful than we dream of.&lt;/p&gt;&lt;p&gt;To return to the question of this post, “How do we understand poetry?” the answer begins with those moments. Approach every poem asking, what moment or idea is this poem trying to probe? Then begin to notice how the poem prods at it. Does the poet poke at death with rhymes? Does she forgo all capitalization when she discusses joy, why? Do not forget to listen to the words - do they tell a story, paint a picture, or count the ways? How do the meaning and sound of the words interact?&lt;/p&gt;&lt;p&gt;Finally pay attention to yourself. Do you understand, do you not understand? Do you catch a glimpse of what the poet saw, or do you see something that perhaps they did not intend. Can you wrap up the poem into something you can understand and enumerate, or are you faced with something so beautiful you wish only to let it alone and wonder? When I seek to understand poetry, the latter is what I am looking for.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Why I Self Published]]></title><description><![CDATA[Why I made the decision to self publish my collection of poetry - Seasons of Thought.]]></description><link>https://www.dschapman.com/articles/why-i-am-self-publishing</link><guid isPermaLink="false">https://www.dschapman.com/articles/why-i-am-self-publishing</guid><pubDate>Fri, 31 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Self publish. It’s a phrase that carries a lot of baggage for authors and readers alike.&lt;/p&gt;&lt;p&gt;For readers it conjures images of 99 cent kindle books with a PowerPoint cover and text riddled with plot holes and misplaced punctuation.&lt;/p&gt;&lt;p&gt;For authors it is a chance to make it big like Andy Weir (The Martian), E.L. James (Fifty Shades of Grey), Christopher Paolini (Eragon), and others who have used digital and traditional methods to publish their own work. But it can also feel like a last resort, a desperate bid to find the recognition and success associated with traditional methods.&lt;/p&gt;&lt;p&gt;There are times I’ve dismissed self-publishing. But I also published a book without even trying to go through traditional process and I can hear my own question ringing back at me - why are you self publishing?&lt;/p&gt;&lt;p&gt;Here are a few of the reasons why I chose to self-publish.&lt;/p&gt;&lt;h3 id=&quot;its-personal&quot;&gt;It’s Personal&lt;/h3&gt;&lt;p&gt;What we have to say is driven by who we want to say it too. Publishing is the method we use to connect our writing to potential readers. In my case, the poems in &lt;em&gt;Seasons of Thought&lt;/em&gt; started with a personal challenge - could I write one poem every day for a year? It was a challenge meant to grow my creativity, cultivate the discipline I have so often lacked in writing, and see the everyday beauty in the world.&lt;/p&gt;&lt;p&gt;A year later I had written a poem every day and &lt;a href=&quot;/blog/on-writing-poems-daily&quot;&gt;learned along the way&lt;/a&gt;, but I also was left with a question - what do I do with all these poems? For me the decision to self publish didn’t happen all at once. It was a gradual realization that 1) I I had a project I wanted to see through to completion and 2) that I was saying something with these poems that I still wanted to share, even two years after I had wrote those poems.&lt;/p&gt;&lt;h3 id=&quot;i-enjoy-seeing-projects-through&quot;&gt;I Enjoy Seeing Projects Through&lt;/h3&gt;&lt;p&gt;There are a lot of pieces to the publishing process - editing and cover art are the most prominent, but there’s also typesetting, choosing the type of paper and binding, ordering proofs, marketing, and distribution. Traditional publishers handle all the pieces of the process in return for a portion of the author’s profits; the author saves time and gains the expertise of people who have done this thousands of times.&lt;/p&gt;&lt;p&gt;I love books. I obviously love to write, but I also love all the pieces that go into them - fonts, paper, book covers. I loved learning about each of the various parts of the publishing process I knew nothing about before. I started &lt;a href=&quot;/guides/typesetting-poems-with-latex-i&quot;&gt;teaching myself LaTeX so that I could typeset my poems&lt;/a&gt;, then I taught myself InDesign so that I could compare the two processes. I had to choose a font and realized how much thought goes into the typography that I read without thinking. I contracted my talented friends to make the cover art and to edit the collection. I bought my own ISBN and entered information into Amazon so that my book will show up with other books of poems. I even wrote this website from scratch (probably a bit excessive but coding is a hobby), so that I could control how I and my work are represented online.&lt;/p&gt;&lt;p&gt;A publisher would have saved me so much time, but I also wouldn’t have got to learn about all these pieces. Are there things that I would do differently in the future? Yes, I would bring in an editor earlier; I would map out all the pieces of the project ahead of time and start working on some of the pieces earlier; I’d choose a single tool and stick with it. Yes someone else could have done these things for me, but I would have been sorry to miss the chance to start learning them now. In the future I might prefer to have a publisher handle some things, but &lt;em&gt;this project&lt;/em&gt; is close to my heart and I wanted to see it all the way through.&lt;/p&gt;&lt;h3 id=&quot;i-have-something-i-want-to-share&quot;&gt;I Have Something I Want to Share&lt;/h3&gt;&lt;p&gt;Traditional publishers serve as gatekeepers. Their readers expect a certain level of quality, so its in their best interest to edit well, select engaging cover art, and present books in their best light. It is also in their best interest to select quality work. As an author there’s great reassurance in being selected, in being told “No, you’re not crazy this is good and we want to help you sell it - this is worth sharing.”&lt;/p&gt;&lt;p&gt;It takes confidence in yourself and in your judgment (even if it is misplaced) to say, “I have something that I think is worth sharing” and I’m going to do what I can to share it. For better or worse that’s what I’ve decided about &lt;a href=&quot;/poetry/seasons-of-thought/&quot;&gt;&lt;em&gt;Seasons of Thought&lt;/em&gt;&lt;/a&gt;. The finished project is available now on Amazon. If you read it, I hope you agree!&lt;/p&gt;&lt;h2 id=&quot;resources-for-self-publishing&quot;&gt;Resources for Self-Publishing&lt;/h2&gt;&lt;p&gt;Here are a few of the resources I used for self-publishing my book&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://kdp.amazon.com/&quot;&gt;Kindle Direct Publishing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://kdp.amazon.com/en_US/help/topic/G201723070&quot;&gt;How to Prepare Your Book for Publishing on KDP&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.myidentifiers.com/identify-protect-your-book/isbn/buy-isbn&quot;&gt;Buy an ISBN&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://adobe.com/products/indesign/&quot;&gt;Adobe InDesign&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Son of Cain]]></title><description><![CDATA[Thoughts on Steinbeck's East of Eden and a poem inspired by the story of Cain and Abel.]]></description><link>https://www.dschapman.com/articles/son-of-cain</link><guid isPermaLink="false">https://www.dschapman.com/articles/son-of-cain</guid><pubDate>Mon, 18 Jun 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;During the past seven months since I finished &lt;a href=&quot;/articles/on-writing-poems-daily&quot;&gt;writing a poem every day for a year&lt;/a&gt;, I have not used this site much. In truth my own writing has been inconsistent. I’ve been jumping from project to project with long breaks in between writing or editing sessions. In fairness my life has been full of many good things including reading! Right now I am half-way through John Steinbeck’s &lt;em&gt;East of Eden.&lt;/em&gt; Near where I left off there’s an extended discussion on the Biblical story of Cain and Abel.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;I think this is the best-known story in the world because it is everybody’s story. I think it is the symbol story of the human soul…Therefore I think this old and terrible story is important because it is a chart of the soul—the secret, rejected, guilty soul. Mr. Trask, you said you did not kill your brother and then you remembered something. I don’t want to know what it was, but was it very far apart from Cain and Abel?&lt;/p&gt;&lt;/blockquote&gt;&lt;cite&gt;John Steinbeck&lt;/cite&gt;&lt;p&gt;I look forward to seeing how this imagery will unfold in the rest of the novel. So far Steinbek has proved himself a master of probing Biblical images like a wound to amplify the harsh elements of his story, which in turn serves as a commentary on both the biblical narrative and the human condition.&lt;/p&gt;&lt;p&gt;This discussion also reminded me of one of the poems that I wrote in 2016 before I started my Year of Poems project. This poem was my own wrestling with the story of Cain and Abel and God’s rejection of Cain. As Samuel Hamilton points out in &lt;em&gt;East of Eden, &lt;/em&gt;it is Cain and not Abel who has children. Children, who if you read on in the biblical narrative go on to build the first cities, work with bronze, make music, and even write some of the first recorded rhymes. In other words, it is Cain who is “the fathers of all those who play the lyre and pipe.” (Gen 4:21)&lt;/p&gt;&lt;h2 id=&quot;son-of-cain&quot;&gt;Son of Cain&lt;/h2&gt;&lt;p&gt;I thought I was Abel,&lt;br/&gt;
the good son, persecuted for doing right,
but I love gardening.&lt;br/&gt;
When I work hard I expect recognition,&lt;br/&gt;
not loud parades or accolades,&lt;br/&gt;
but the quiet nod, the pat on the back.&lt;br/&gt;
I thrive on quiet, proud, humility.&lt;/p&gt;&lt;p&gt;That silence would kill me.&lt;/p&gt;&lt;p&gt;Quiet disapproval for sins I couldn’t see.&lt;br/&gt;
My brother basking in warmth hidden from me,&lt;br/&gt;
my younger brother.&lt;/p&gt;&lt;p&gt;I hope I wouldn’t act as Cain.&lt;br/&gt;
But Cain, no doubt, doubted he would act as Cain.&lt;/p&gt;&lt;p&gt;&lt;em&gt;If you do well, will you not be accepted?&lt;/em&gt;&lt;br/&gt;
Herders, craftsmen, musicians are all born of Cain&lt;br/&gt;
and haunted, like their father, by those words.&lt;br/&gt;
Lyres and pipes, smithies and cities,&lt;br/&gt;
all are children of Cain,&lt;br/&gt;
ever searching, ever questing to atone.&lt;br/&gt;
Poets too are children of Cain.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Do well and you will be accepted.&lt;/em&gt;&lt;br/&gt;
&lt;em&gt;Do well&lt;/em&gt; – simple words.&lt;br/&gt;
But what if like Cain my fruit, my children, my music, even my words are not enough to wash away the blood.&lt;br/&gt;
The blood He seemed to see before it ever washed those rocks.&lt;br/&gt;
The bloody taint on all the fruit Cain offered the same day Abel brought his spotless lambs.&lt;br/&gt;
&lt;em&gt;Do well and you too will be Abel.&lt;/em&gt;&lt;br/&gt;
It’s greater than I can bear.&lt;/p&gt;&lt;p&gt;I cannot be an able son.&lt;br/&gt;
My fruit is tainted like the father of gardeners, musicians, and poets.&lt;br/&gt;
There’s very little hope for Cain,&lt;br/&gt;
but Cain needed hope most of all.&lt;br/&gt;
I hope he hoped when Seth was born,&lt;br/&gt;
for the son of Seth was born for men like Cain,&lt;br/&gt;
and all his sons,&lt;br/&gt;
I hope&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Typesetting Poems with LaTeX]]></title><description><![CDATA[An introduction to typesetting poetry with LaTeX]]></description><link>https://www.dschapman.com/articles/typesetting-poems-with-latex-i</link><guid isPermaLink="false">https://www.dschapman.com/articles/typesetting-poems-with-latex-i</guid><pubDate>Tue, 30 Jan 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There are not many options when trying to typeset a collection of poetry. A word processor provides the necessary functionality, but it is not well suited for the work. Adobe’s InDesign provides the necessary precision but at a high cost, especially for smaller teams or individuals attempting to compile poems without paying Adobe’s monthly fees. For those who are looking for alternatives, LaTeX provides both a precise and free alternative.&lt;/p&gt;&lt;h2 id=&quot;what-is-latex&quot;&gt;What is LaTeX?&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/LaTeX&quot;&gt;LaTeX&lt;/a&gt; is a typesetting software, originally developed in 1983 for academic writing. Unlike other document preparation software, LaTeX is not a WYSIWYG (what you see is what you get), but instead uses a markup-like syntax to describe the document.&lt;/p&gt;&lt;p&gt;What that means in practice is that a LaTeX document reads much like an HTML document, with commands outlining different elements of the document.&lt;/p&gt;&lt;h2 id=&quot;getting-started-with-latex&quot;&gt;Getting Started with LaTeX&lt;/h2&gt;&lt;p&gt;In order to start compiling your poems with LaTeX you will need&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. To Install LaTeX&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I recommend that you use &lt;a href=&quot;https://www.tug.org/texlive/&quot;&gt;TeX Live&lt;/a&gt;. The TeX User Group website provides installations and instructions for &lt;a href=&quot;https://www.tug.org/texlive/windows.html&quot;&gt;Windows&lt;/a&gt;, &lt;a href=&quot;https://www.tug.org/mactex/&quot;&gt;MacOS&lt;/a&gt;, and &lt;a href=&quot;https://www.tug.org/texlive/quickinstall.html&quot;&gt;Linux&lt;/a&gt;. There are &lt;a href=&quot;http://www.tug.org/interest.html#free&quot;&gt;other free distributions of LaTeX&lt;/a&gt;; however, TeX Live is the most compatible with my text editor of choice.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. A Text Editor&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;You can use whatever text editor you’re most comfortable with to compose your document; however, I recommend Microsoft’s &lt;a href=&quot;https://code.visualstudio.com&quot;&gt;Visual Studio Code&lt;/a&gt; (Available on all platforms) since it integrates with LaTeX using the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop&quot;&gt;LaTeX Workshop Extension&lt;/a&gt; and allows you to compose and preview the output of your LaTeX in the same window.&lt;/p&gt;&lt;p&gt;(For more information on installing and managing extensions on VS Code check out &lt;a href=&quot;https://code.visualstudio.com/docs/editor/extension-gallery&quot;&gt;this link&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;Alternatively you can also use &lt;a href=&quot;https://www.overleaf.com&quot;&gt;OverLeaf&lt;/a&gt; to edit your LaTeX documents. You will need to create an account, but once you do you can immediately start editing your document from your browser without installing anything!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3. Learn the Basics of LaTeX syntax&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;LaTeX has existed since 1983, so there are &lt;a href=&quot;https://www.overleaf.com/learn/latex/Free_online_introduction_to_LaTeX_(part_1)&quot;&gt;plenty&lt;/a&gt; &lt;a href=&quot;https://www.latex-project.org/about/&quot;&gt;of&lt;/a&gt; &lt;a href=&quot;https://tobi.oetiker.ch/lshort/lshort.pdf&quot;&gt;resources&lt;/a&gt; that you can use to learn the basics of LaTeX, but here’s a short introduction to get you started.&lt;/p&gt;&lt;h3 id=&quot;the-basics-of-latex&quot;&gt;The Basics of LaTeX&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;All commands in LaTeX begin with a backslash (&lt;code class=&quot;language-text&quot;&gt;\&lt;/code&gt;) and often include arguments contained in curly brackets (&lt;code class=&quot;language-text&quot;&gt;{}&lt;/code&gt;).&lt;/li&gt;&lt;li&gt;Every LaTeX document begins with a &lt;code class=&quot;language-text&quot;&gt;\documentclass&lt;/code&gt; command. The &lt;code class=&quot;language-text&quot;&gt;\documentclass&lt;/code&gt; command uses different arguments depending on the type of document you wish to produce.&lt;/li&gt;&lt;li&gt;Another type of command syntax can be seen with the &lt;code class=&quot;language-text&quot;&gt;\begin{document}&lt;/code&gt; and &lt;code class=&quot;language-text&quot;&gt;\end{document}&lt;/code&gt; commands. These commands bookend the content of a LaTeX document much like the content of an HTML document is found between the &lt;code class=&quot;language-text&quot;&gt;&amp;lt;body&amp;gt;&lt;/code&gt; and &lt;code class=&quot;language-text&quot;&gt;&amp;lt;/body&amp;gt;&lt;/code&gt; tags. You will see that other commands use the same &lt;code class=&quot;language-text&quot;&gt;\begin{}&lt;/code&gt; and &lt;code class=&quot;language-text&quot;&gt;\end{}&lt;/code&gt; structure to define different elements of the document.&lt;/li&gt;&lt;li&gt;Comments in LaTeX are defined by the &lt;code class=&quot;language-text&quot;&gt;%&lt;/code&gt; character. Any text on the line following the character will be ignored by the LaTeX compiler.&lt;/li&gt;&lt;li&gt;Some times you will need functionality that is not supported natively by LaTeX. In these cases you can take advantage of packages that are included with your LaTeX distribution. In order to use these packages simply include the &lt;code class=&quot;language-text&quot;&gt;\usepackage{package-name}&lt;/code&gt; command at the beginning of your document. LaTeX includes &lt;a href=&quot;https://en.wikibooks.org/wiki/LaTeX/Package_Reference&quot;&gt;a large variety of packages&lt;/a&gt; which extend its functionality allowing you to manage page margins, change fonts, print mathematical formulas, or even typeset critical editions of poetry.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Keeping all that in mind, here is the minimum starting point to create a LaTeX document:&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;latex&quot;&gt;&lt;pre class=&quot;language-latex&quot;&gt;&lt;code class=&quot;language-latex&quot;&gt;&lt;span class=&quot;token function selector&quot;&gt;\documentclass&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;article&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token function selector&quot;&gt;\begin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;%The text of the document will go here.&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\end&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&quot;typesetting-a-poem-with-poemscol&quot;&gt;Typesetting a Poem with poemscol&lt;/h2&gt;&lt;p&gt;Now that we have some background, we can return to the original problem - typesetting a collection of poetry. To typeset poetry with LaTeX we’re going to take advantage of one of LaTeX’s existing packages - &lt;a href=&quot;https://ctan.org/pkg/poemscol?lang=en&quot;&gt;poemscol&lt;/a&gt;. Poemscol was originally developed to typeset critical editions of poetry so it has more than enough functionality for what we’re trying to do.&lt;/p&gt;&lt;p&gt;Before we can use the package we have to import it by adding these two commands to the top of our document &lt;code class=&quot;language-text&quot;&gt;\usepackage{poemscol}&lt;/code&gt; and &lt;code class=&quot;language-text&quot;&gt;\usepackage{fancyhdr}&lt;/code&gt;. Fancyhdr is another LaTeX package required by poemscol, so we will have to include it every time we create a poemscol document. Once we’ve done that we’re ready to start typesetting a poem!&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;latex&quot;&gt;&lt;pre class=&quot;language-latex&quot;&gt;&lt;code class=&quot;language-latex&quot;&gt;&lt;span class=&quot;token function selector&quot;&gt;\documentclass&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;article&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\usepackage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;fancyhdr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;% required by poemscol&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\usepackage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;poemscol&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;% required to typeset poems&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\begin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;%The text of the document will go here.&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\end&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&quot;the-poem-command&quot;&gt;The Poem Command&lt;/h3&gt;&lt;p&gt;Now that we’ve imported the package, it’s time to use the poem command to declare our poem. Much as we used the &lt;code class=&quot;language-text&quot;&gt;\begin{document}&lt;/code&gt; and &lt;code class=&quot;language-text&quot;&gt;\end{document}&lt;/code&gt; commands to begin and end our document, we will use the &lt;code class=&quot;language-text&quot;&gt;\begin{poem}&lt;/code&gt; and &lt;code class=&quot;language-text&quot;&gt;\end{poem}&lt;/code&gt; commands to define the beginning and end of our poem.&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;latex&quot;&gt;&lt;pre class=&quot;language-latex&quot;&gt;&lt;code class=&quot;language-latex&quot;&gt;&lt;span class=&quot;token function selector&quot;&gt;\documentclass&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;article&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\usepackage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;fancyhdr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;% required by poemscol&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\usepackage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;poemscol&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;% required to typeset poems&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\begin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token function selector&quot;&gt;\begin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;poem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;%The text of the poem will go here.&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\end&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;poem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token function selector&quot;&gt;\end&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To add a title, just place the command &lt;code class=&quot;language-text&quot;&gt;\poemtitle{Title}&lt;/code&gt; before the beginning of the poem, and all that we’re missing is the poem.&lt;/p&gt;&lt;p&gt;For this example, I’m going to use Gerard Manley Hopkin’s poem &lt;em&gt;Pied Beauty&lt;/em&gt; since it allows us to demonstrate two staples of typesetting poetry - stanzas and indented lines.&lt;/p&gt;&lt;h3 id=&quot;lines-stanzas-and-indents&quot;&gt;Lines, Stanzas, and Indents&lt;/h3&gt;&lt;p&gt;Stanzas function just like the poem and document commands we used earlier. To begin a stanza issue the &lt;code class=&quot;language-text&quot;&gt;\begin{stanza}&lt;/code&gt; and &lt;code class=&quot;language-text&quot;&gt;\end{stanza}&lt;/code&gt; to end the stanza.&lt;/p&gt;&lt;p&gt;However, marking out the stanzas is not enough, we also have to define each line of verse. Because LaTeX is not a word processor, it does not interpret a line break in the source code as a line break in the final document. For this reason every line (except for the last one of a stanza) must end with the &lt;code class=&quot;language-text&quot;&gt;\verseline&lt;/code&gt; command to indicate the end of a line of verse.&lt;/p&gt;&lt;p&gt;Poets will also occasionally use indentation to set lines apart. In poemscol indents are issued in-line by using the command &lt;code class=&quot;language-text&quot;&gt;\verseindent&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;After copying in the poem and using these commands our typeset document should look something like this:&lt;/p&gt;&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;latex&quot;&gt;&lt;pre class=&quot;language-latex&quot;&gt;&lt;code class=&quot;language-latex&quot;&gt;&lt;span class=&quot;token function selector&quot;&gt;\poemtitle&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;Pied Beauty&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\begin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;poem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\begin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;stanza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
G&lt;span class=&quot;token function selector&quot;&gt;\textsc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;lory&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; be to God for dappled things--- &lt;span class=&quot;token function selector&quot;&gt;\verseline&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\verseindent&lt;/span&gt; For skies of couple-colour as a brinded cow; &lt;span class=&quot;token function selector&quot;&gt;\verseline&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\verseindent&lt;/span&gt;&lt;span class=&quot;token function selector&quot;&gt;\verseindent&lt;/span&gt; For rose-moles all in stipple upon trout that swim;&lt;span class=&quot;token function selector&quot;&gt;\verseline&lt;/span&gt;
Fresh-firecoal chestnut-falls; finches’ wings;&lt;span class=&quot;token function selector&quot;&gt;\verseline&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\verseindent&lt;/span&gt; Landscape plotted and pieced—fold, fallow, and plough;&lt;span class=&quot;token function selector&quot;&gt;\verseline&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\verseindent&lt;/span&gt;&lt;span class=&quot;token function selector&quot;&gt;\verseindent&lt;/span&gt; And all trades, their gear and tackle and trim.&lt;span class=&quot;token function selector&quot;&gt;\verseline&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\end&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;stanza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\begin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;stanza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
All things counter, original, spare, strange;&lt;span class=&quot;token function selector&quot;&gt;\verseline&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\verseindent&lt;/span&gt; Whatever is fickle, freckled (who knows how?)&lt;span class=&quot;token function selector&quot;&gt;\verseline&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\verseindent&lt;/span&gt;&lt;span class=&quot;token function selector&quot;&gt;\verseindent&lt;/span&gt; With swift, slow; sweet, sour; adazzle, dim;&lt;span class=&quot;token function selector&quot;&gt;\verseline&lt;/span&gt;
He fathers-forth whose beauty is past change:&lt;span class=&quot;token function selector&quot;&gt;\verseline&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\versephantom&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;He fathers-&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;Praise him.
&lt;span class=&quot;token function selector&quot;&gt;\end&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;stanza&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token function selector&quot;&gt;\end&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;poem&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You may have noticed a couple commands I haven’t explained yet. Let’s start with &lt;code class=&quot;language-text&quot;&gt;\versephantom{}&lt;/code&gt;. Versephantom is useful when you want to customize the size of your line indent. The verseindent command can be redefined, but that would affect all instances of the command. Versephantom allows you to create an indent of any character size - in this case Hopkins indented the final line so that its first letter falls on the first letter of the word forth on the line above. By issuing the command with an argument of “He fathers-” we are telling LaTeX to create whitespace equal to the length of the phrase “He fathers-”, which allows us to indent exactly as Hopkins did.&lt;/p&gt;&lt;p&gt;The other command you may have noticed is &lt;code class=&quot;language-text&quot;&gt;\textsc{}&lt;/code&gt;. This is an example of how you format text in latex. &lt;code class=&quot;language-text&quot;&gt;\textsc&lt;/code&gt; indicates that the text should be printed in small caps, &lt;code class=&quot;language-text&quot;&gt;\textit&lt;/code&gt; indicates that the text should be italicized, and &lt;code class=&quot;language-text&quot;&gt;\textbf&lt;/code&gt; indicates that the text should be bolded.&lt;/p&gt;&lt;p&gt;Once you’ve finished entering these commands the finished document should look similar to this:&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/81ff8285c51c34714b9db151dbb86457/Pied-Beauty.png&quot; alt=&quot;The finished poem&quot;/&gt;&lt;/p&gt;&lt;p&gt;And just like that you’ve typeset your first poem using LaTeX!&lt;/p&gt;</content:encoded></item><item><title><![CDATA[On Writing Poems Daily]]></title><description><![CDATA[My reflections on writing one poem every day for a year.]]></description><link>https://www.dschapman.com/articles/on-writing-poems-daily</link><guid isPermaLink="false">https://www.dschapman.com/articles/on-writing-poems-daily</guid><pubDate>Sat, 23 Dec 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Beginning in November of 2016 and continuing through November of 2017 I wrote one poem every day. Once every 24 hours for 365 days I sat down to write a new poem from scratch. It was a unique experience, and I learned a great deal in the process about poetry, writing, and habits. Here are a few of those lessons.&lt;/p&gt;&lt;div&gt;Creativity comes in waves.&lt;/div&gt;&lt;p&gt;There were streaks of time when everything I wrote felt flat to me. Sometimes for a week or more at a time the poems would feel rote and if there was a spark to them I couldn’t see them. The poems that I loved also came in waves. There were days when I felt like I was sinking three pointers shot after shot. It felt great, and I don’t even like basketball.&lt;/p&gt;&lt;div&gt;Keep writing through every mood.&lt;/div&gt;&lt;p&gt;Writing every day, I frequently found myself writing despite my mood, inspiration, or interest. I’ve had poems that I really like come out of boredom, regret, dissatisfaction, as well as their opposites. Honest exploration or at least acceptance of my emotional state helped me produce writing that I liked more often than the days I “lied”.&lt;/p&gt;&lt;div&gt;Most of what I write disappoints me to some degree.&lt;/div&gt;&lt;p&gt;I’m not proud of a lot of the poems I wrote this year and that’s fine. I’ve known I wanted to write since I was ten years old. I remember the second I announced my ambition to my Mom, yet I’ve usually shied away from finishing writing projects for over a decade – in large part due to a fear of producing something so bad that it was clear I had no business writing. The truth is Frank Herbert is right, “fear is the mind killer.” Many bad poems and novels must be written before stumbling on a couple good ones. And in the end I found that I was not writing to produce those few good poems. I was writing because I loved writing, rhymes, and words, producing a few good poems was an added blessing.&lt;/p&gt;&lt;div&gt;Every piece of writing needs editing.&lt;/div&gt;&lt;p&gt;One of the downsides of posting poems the same day I wrote them was that I only had time to do a quick pass for spelling, grammar, and other minor improvements before posting them. At the end of the year I had a 370-page document of poems that I sorted through and edited down into &lt;a href=&quot;/poetry/seasons-of-thought&quot;&gt;a collection of poetry&lt;/a&gt;.&lt;/p&gt;&lt;div&gt;Any task can become a part of your routine.&lt;/div&gt;&lt;p&gt;I was surprised how quickly writing became part of my routine. I even started resenting it the same way I resent other habits I’ve established. “It’s 11pm, I’m in bed, and I forgot to brush my teeth” easily became “It’s 11pm, I’m in bed, and I have to write my poem. But it also became something that I needed to do in the same way that I need to brush my teeth or shower to feel prepared in the morning.&lt;/p&gt;&lt;div&gt;Any task can stop being in your routine.&lt;/div&gt;&lt;p&gt;This can be both good and bad. During that year I cut different things out of my day when necessary because I was prioritizing writing. However, the other side is that the habit of writing that I took a year to cultivate, took only a week to disappear.&lt;/p&gt;&lt;div&gt;Inspiration can come from anywhere&lt;/div&gt;&lt;p&gt;This is what excites me still about writing a poem every day. There is poetry everywhere waiting to be recognized and pointed out. I saw a man walking in plaid sweatpants, a sunhat, and a plunger, a church sign I disagree with, a father holding his son, LaLa Land, traffic jams , and a field on a cold day. I walked with eyes a little more open since starting this project last year, and I hope you will too.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Novelized Epic: Dialogue and Laughter in The Lord of the Rings]]></title><description><![CDATA[In The Lord of the Rings the combined elements of the epic and the novel do not result in an unapproachable epic; instead, The Lord of the Rings as a novel liberates the epic genre from “all that serves as a brake on [its] unique development," creating an amalgamation of the two forms in dialogue with one another, a novelized epic.]]></description><link>https://www.dschapman.com/articles/the-novelized-epic</link><guid isPermaLink="false">https://www.dschapman.com/articles/the-novelized-epic</guid><pubDate>Tue, 09 Dec 2014 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Russian philosopher and literary critic &lt;a href=&quot;https://en.wikipedia.org/wiki/Mikhail_Bakhtin&quot;&gt;Mikhail Bakhtin&lt;/a&gt; differentiates between the novel and the epic. The novel by its very nature is “ever questing, ever examining itself and subjecting its established forms to review”.&lt;div count=&quot;1&quot;&gt;Bakhtin, 39&lt;/div&gt; In contrast, the epic is a static genre; its development is completed, and its setting is distant and unapproachable to both the author and the reader. While &lt;em&gt;The Lord of the Rings&lt;/em&gt; is full of Mikhail Bakhtin’s markers for an epic, it also has several elements in common with the novel. In The Lord of the Rings the combined elements of the epic and the novel do not result in an unapproachable epic; instead, &lt;em&gt;The Lord of the Rings&lt;/em&gt; as a novel liberates the epic genre from “all that serves as a brake on [its] unique development,”&lt;div count=&quot;2&quot;&gt;Bakhtin, 39&lt;/div&gt; creating an amalgamation of the two forms in dialogue with one another, a novelized epic.&lt;/p&gt;&lt;h2 id=&quot;the-epic-and-the-novel&quot;&gt;The Epic and the Novel&lt;/h2&gt;&lt;p&gt;The epic genre has three characterizing features: “(1) a national epic past … serves as the subject for an epic; (2) national tradition serves as the source for the epic; (3) an absolute epic distance separates the epic world … from the time in which the singer (the author and his audience) lives”. The epic then is not only distanced from contemporary reality but “inaccessible” to the author whose only attitude towards this world is “the reverent point of view of the descendant”. Epics cannot help but be monologic in voice, since “The epic absolute past is the single source and beginning of everything good”&lt;div count=&quot;3&quot;&gt;Bakhtin, 13-15&lt;/div&gt;.&lt;/p&gt;&lt;p&gt;In contrast to the epic, Bakhtin identifies the novel as being characterized by “three dimensionality” and “multi-languaged consciousness”&lt;div count=&quot;4&quot;&gt;Bakhtin 11&lt;/div&gt;. Or as the Bakhtin scholar Michael Holquist defines it, “Novels are overwhelmingly intertextual, constantly referring within themselves, to other works outside them”&lt;div count=&quot;5&quot;&gt;Holquist, 88&lt;/div&gt;. According to Bakhtin, &lt;strong&gt;the epic is an already completed genre sequestered in the unapproachable past&lt;/strong&gt;, while the novel is, as its name implies, a new genre that “parodies other genres … incorporat[ing] others into its own particular structure, reformulating and reaccentuating them”&lt;div count=&quot;6&quot;&gt;Bakhtin, 5&lt;/div&gt;, producing a dialogue not only within the text and between works, but also between genres.&lt;/p&gt;&lt;div&gt;The novel produces dialogue within the text, between works, and between genres.&lt;/div&gt;&lt;p&gt;&lt;em&gt;The Lord of the Rings&lt;/em&gt; by J.R.R. Tolkien has many characteristics of the epic. The world of Middle Earth is, as Bakhtin describes the epic, “walled off absolutely from all subsequent times”&lt;div count=&quot;7&quot;&gt;Bakhtin, 15&lt;/div&gt;. The events of The Lord of the Rings take place in our world, but our world has changed from one of dwarves, elves, and hobbits to a world of machines and technology that is foreign and separated from the world of Middle Earth. In both the prologue and the appendixes to The Lord of the Rings, Tolkien refers to his work as a selection and translation from an older book, “The Red Book of Westmarch,” distancing the work into the epic past, far off from both the author and the reader.&lt;/p&gt;&lt;p&gt;Many of the characters in the Lord of the Rings fit the epic mold of being a valorized “founder” or “ancestor”&lt;div count=&quot;8&quot;&gt;Bakhtin, 15&lt;/div&gt;. Aragorn takes on the role of the hero, destined to reclaim the kingdom of his ancestors and found a new line of kings. Boromir fits the role of the tragic hero, the Achilles who dies before his time; and Gandalf holds the epic role of the supernatural advisor to the hero. Even the plot of the book takes place at a pivotal time in the history of Middle Earth, what Bakhtin refers to as a “peak time”&lt;div count=&quot;9&quot;&gt;Bakhtin, 13&lt;/div&gt;, as heroes gather together to topple a tyranny and establish an era of peace.&lt;/p&gt;&lt;p&gt;However, from the very beginning of the novel this valorized distance is eroded away by the presence of hobbits in the story. The world of the Shire provides the point of entry into the epic setting of Middle Earth. &lt;em&gt;The Lord of the Rings&lt;/em&gt; does not begin with the deeds of mighty heroes slaying dragons, which would solidify the setting in the absolute past, but it begins with the birthday celebration of a humble old hobbit. The Shire shows a world that is analogous to the setting of Tolkien and his readers, if idealized. There are houses with gardens, fond old relatives as well as unpleasant relatives. It is a snapshot of an ideal everyday life. Frodo’s gradual introduction to the epic world of Middle Earth, provides an easy point of entry for the reader into the aggrandized world of the valorized past. For Bakhtin “contemporary reality serves as the subject, and even more important – it is the starting point for understanding, evaluating and formulating” the novel&lt;div count=&quot;10&quot;&gt;Bakhtin, 22&lt;/div&gt;.&lt;/p&gt;&lt;div&gt;In &lt;em&gt;The Lord of the Rings&lt;/em&gt; contemporary reality finds a voice in the hobbits and the Shire as they guide the reader into the epic setting.&lt;/div&gt;&lt;p&gt;In addition to providing an entrance to the epic world, the hobbits provide another important step in the novelization of the epic. In “Epic and Novel” Bakhtin shows the elements of the novel as they develop during the course of history. He identifies Menippean satire&lt;div&gt;According to Wikipedia, the genre of Menippean satire is a form of satire, usually in prose, which has a length and structure similar to a novel…Other features found in Menippean satire are different forms of parody and mythological burlesque, a critique of the myths inherited from traditional culture, a rhapsodic nature, a fragmented narrative, the combination of many different targets, and the rapid moving between styles and points of view.&lt;/div&gt; and other serio-comedies as prototypes of the novel as they parodize other genres, contemporizing “the absolute past of gods demigods and heroes” by bringing it low and representing it “on a plane equal with contemporary life”&lt;div count=&quot;11&quot;&gt;Bakhtin, 21&lt;/div&gt;. &lt;strong&gt;The most important element of these serio-comedies is laughter.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Katerina Clark and Michael Holquist write that “laughter, through the instrument of satire and parody, call the sanctity of the unified language into question”&lt;div count=&quot;12&quot;&gt;Clark, 289&lt;/div&gt;. Bakhtin says something similar in a section of “Epic and Novel”:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;It is precisely laughter that destroys the epic and in general destroys any hierarchical distancing and valorized distance … Everything that makes us laugh is close at hand, all comical creativity works in a zone of maximal proximity… Laughter demolishes fear and piety before an object, before a world, making of it an object of familiar contact and thus clearing the ground for an absolutely free investigation of it. Laughter is a vital factor in laying down that prerequisite for fearlessness without which it would be impossible to approach the world realistically.&lt;div count=&quot;13&quot;&gt;Bakhtin, 23&lt;/div&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 id=&quot;laughter-tears-down-walls&quot;&gt;Laughter Tears Down Walls&lt;/h2&gt;&lt;p&gt;Laughter tears down the walls of distance and “unified language” which separate the epic from the more dialogic novel, but Bakhtin appears to also be saying that laughter tears down any organized structure that tyrannizes through “unified language” and fear. The hobbits in &lt;em&gt;The Lord of the Rings&lt;/em&gt; fulfill both functions of laughter, providing the laughter which not only creates a novelized epic, but that also tears down the tyrannies of unified language present in the story.&lt;/p&gt;&lt;p&gt;Hobbits are consistently described in &lt;em&gt;The Lord of the Rings&lt;/em&gt; as “laughing”. The new line that is added to the old Ent list of inhabitants of Middle Earth reads “hungry as hunters, the Hobbit children, the laughing-folk, the little people”&lt;div count=&quot;14&quot;&gt;Tolkien, 572&lt;/div&gt;. Even from the prologue the hobbits from Hobbiton are closely associated with laughter. Their mouths are “apt to laughter and to eating and drinking. And laugh they did, and eat, and drink, often and heartily, being fond of simple jests at all times”&lt;div count=&quot;15&quot;&gt;Tolkien, 2&lt;/div&gt;. The joviality of the hobbits at the beginning of The Lord of the Rings plays a large role in their ability to shorten the distance between the epic world and the reader. They provide “familiarization of the world through laughter and popular speech” that invites the reader into the epic world&lt;div count=&quot;16&quot;&gt;Bakhtin, 23&lt;/div&gt;. But the hobbits in The Lord of the Rings do more than simply familiarize the reader with the world of Middle Earth; they also provide the familiarizing laughter that allows for the unified language or &lt;div tiptext=&quot;monologic: having only one speaker&quot;&gt;monologic&lt;/div&gt; tyrannies of Saruman and Sauron to be doubted, taken apart, exposed, and examined freely.&lt;/p&gt;&lt;p&gt;Merry and Pippin in Fangorn reconnect Treebeard with the world around him, awakening him from his recollections of the completed past. Their questions about the world of Fangorn and about Saruman cause him to see the world for a little while through the eyes of a hasty hobbit. As he speaks about the harm that Saruman and his orcs have done to the forest he declares, “I will stop it!” A little later he admits his own hastiness in coming to this decision but the decision remains&lt;div count=&quot;17&quot;&gt;Tolkien, 463&lt;/div&gt;. He has awakened to Saruman’s efforts to recast the land in a monologic vision of “metal and wheels” with Saruman at the center. This awakening prompts Treebeard and the rest of the Ents to actions which bring about the destruction of Saruman and his monologic tyranny of the land.&lt;/p&gt;&lt;p&gt;The quest of Frodo and Sam into Mordor is not as obviously filled with laughter as Merry and Pippin’s adventures. The road to Mordor is long and dark, and the very threat of the Ring is the threat of an overwhelming monologic voice which seeks to overwhelm all other voices with its cries. This is the temptation that both Gandalf and Galadriel see in the Ring, lifting themselves up as the ruler of the world, with good intentions, but ultimately the ring would subvert their intentions leaving only rulers who are “terrible” and inspire “despair” in their subjects&lt;div count=&quot;17&quot;&gt;Tolkien, 356&lt;/div&gt;. This is also the fate that befell Smeagol who has two clear personalities – “the “old weary hobbit, shrunken by the years that had carried him far beyond his time”&lt;div count=&quot;18&quot;&gt;Tolkien, 699&lt;/div&gt; and the monster, Gollum, created by an obsession with the Ring, who ultimately subsumes Smeagol, shutting out the dialogue in their character and becoming only the monologic voice of the Ring. The threat of the ring is the threat of a voice that subsumes all other voices, becoming the only speaker in a monologic world.&lt;/p&gt;&lt;p&gt;It is this threat of the consuming voice of the ring that Frodo and Sam are set against. And so their role as laughter in &lt;em&gt;The Lord of the Rings&lt;/em&gt; is not focused on their ability to familiarize others or even themselves with the dangers of a monologic voice; instead their role in the face of the overwhelming voice of Sauron and the Ring is to retain their ability to laugh. In other words the hobbits must retain their separate voices and their ability to familiarize themselves with the world around them without succumbing to the voice of the Ring as Gollum did.&lt;/p&gt;&lt;p&gt;Frodo and Sam survive their quest in large part due to their continuing dialogue with one another. In their dialogue Sam has the important role of refamiliarizing Frodo with the world as seen through they eyes of someone who has the ability to laugh and see the world the way it is. On the stairs of Cirith Ungol, Sam breaks down his understanding of the old epic stories to show that all the heroes of old were “folk” who seem to have “just landed in [the stories]”&lt;div count=&quot;19&quot;&gt;Tolkien, 696&lt;/div&gt;. By “familiarizing” the old stories, Sam provides hope that just like the “folk” in the stories, they have a chance as long as they continue forward. As they come closer and closer to Mount Doom, Frodo begins to lose his identity apart from the ring, but Sam continues to provide a “laughing voice” reminding him of the joys in life. “‘Do you remember that bit of rabbit, Mr. Frodo?’ he said. ‘And our place under the warm bank in Captain Faramir’s country, the day I saw an oliphaunt?’”&lt;div count=&quot;20&quot;&gt;Tolkien, 916&lt;/div&gt;.&lt;/p&gt;&lt;p&gt;Although Sam’s efforts do not conquer the voice of the ring, they provide another voice, reminding Frodo that there is a world apart from the ring, and providing him with the support to keep moving.&lt;/p&gt;&lt;h2 id=&quot;the-threat-of-a-single-voice&quot;&gt;The Threat of a Single Voice&lt;/h2&gt;&lt;p&gt;After the defeat of Sauron the hobbits use laughter one more time to end a monologic tyranny. On their return to the Shire, it is no longer the free land that it once was. In perhaps the most obvious example, they use laughter to break apart the tyrannical voice that grips their land. The Shire has been taken over by “The Chief up at Bag End.” The Chief, controlled by Saruman, has instituted laws across the Shire: no admittance at night, no hospitality, no pipeweed, and no beer. Food is rationed and the hobbit inhabitants of the land are marginalized. Their laughing voices are no longer heard. When the four hobbits are told to “come along quiet” they “roar with laughter” flouting the authority of the chief and beginning the process of awakening the Shire to voices outside the seductive voice of Saruman. The laughter spreads much as it did in Fangorn, and soon the hobbits rise up and revolt in the face of the monologic voice, allowing free discourse to reign once again.&lt;/p&gt;&lt;p&gt;While the hobbits play a major role as laughter that awakens and reawakens characters to the presence of dialogue in the face of a monologic world, there are several characters in &lt;em&gt;The Lord of the Rings&lt;/em&gt; who do ignore the dialogue present in the world and suffer as a result. Michael Holquist commenting on Bakhtin points out that “Dialogism figures a close relation between bodies and novels because they both militate against monadism, the illusion of closed-off bodies”&lt;div count=&quot;21&quot;&gt;Holquist, 90&lt;/div&gt;. Gollum has already been discussed briefly as someone who has lost his sense of the dialogue present in the world. He hears only the all-consuming voice of the Ring. Denethor ignores the discussions of Gondor’s defenses and hopes, and listens only to his inner monologue of despair. Saruman is also blind to the importance of dialogue and falls into the trap of thinking that he can, within himself, find all the necessary elements for dialogue. “For I am Saruman the Wise … Saruman of Many Colours!”&lt;div count=&quot;22&quot;&gt;Tolkien, 252&lt;/div&gt;.&lt;/p&gt;&lt;div&gt;Saruman replaces the other members of the council with himself, subsuming their colors and their voices until only his voice remains.&lt;/div&gt;&lt;p&gt;But monadism is unsustainable and Saruman, as well as Denethor and Gollum, are unable to sustain dialogue with only themselves. Gollum loses the ability to hear any voice, even his own beside the Ring. Denethor is unable to believe any words that conflict with the voice of despair, and kills himself to escape what he believes to be certain death. And Saruman by subsuming all the elements of the dialogue among wizards, loses all of his power as a wizard and even his identity as Saruman, becoming only Sharkey – a sad fragment of the great being that he once was. Every attempt by a character in &lt;em&gt;The Lord of the Rings&lt;/em&gt; to establish himself as a monologic voice results in the loss of even the identity wherein he found his voice.&lt;/p&gt;&lt;p&gt;In contrast to those characters who lose their identity by withdrawing from dialogue, stand characters like Aragorn who participates in dialogue with other characters and has several aspects to his nature, as shown by his multiple names. Aragorn is called Strider, Aragorn, Isildur’s heir, Elessar, and Dúnadan. Each of these names captures a different aspect of his identity and his role in society. Dúnadan means man of the west&lt;div count=&quot;23&quot;&gt;Tolkien, 226&lt;/div&gt;, but he is called Strider in Bree where he is viewed with distrust by the very people he protects. The many names of Aragorn provide a dialogue within his own nature, but unlike Saruman’s attempts to envelop all voices of the council in his own identity, the many names of Aragorn emerge as a result of his participation in a dialogue with his ancestors, language, the people of Bree, as well as the hobbits, who through their interactions with Aragorn, add a layer of affection to the term Strider.&lt;/p&gt;&lt;p&gt;Dialogue is also present in one of the core concepts of the book, fellowship. The eponymous fellowship of the ring extends throughout the story and it throws together characters from diverse backgrounds and cultures serving as a form of carnival in the story. Michael Holquist says that Carnival, “like the novel, draws attention to the variety” of relations present in the world. Carnival comes from the renaissance practice of holding festivals that threw together people from all backgrounds and occupations for as long as the carnival lasted. Katerina Clark and Michael Holquist tie carnival to laughter, saying that “carnival keeps alive a sense of variety and change”&lt;div count=&quot;24&quot;&gt;Clark, 301&lt;/div&gt;, in a sense reminding the participants that there is a dialogue present around them, not just the single voice of authority that exists in their day to day life.&lt;/p&gt;&lt;p&gt;Carnival not only reminds participants of the presence of dialogue in the world, as Sam reminds Frodo that voices exist outside of the voice of the ring, but like laughter it can also free “the folk … from the oppression of such gloomy categories as ‘eternal,’ ‘immovable,’ ‘absolute,’ ‘unchangeable,’ and instead” expose them “to the gay and free laughing aspect of the world, with its unfinished and open character, with the joy of change and renewal.”&lt;div count=&quot;25&quot;&gt;Bakhtin quoted in Clark 301&lt;/div&gt;. The fellowship as a type of carnival reminds the participants of the dialogue present in the world, but also serves as an active participant, both in the fight against the monologic tyrannies of Saruman, and Sauron and the novel’s fight against the “eternal” and “absolute” nature of the epic’s monologic voice.&lt;/p&gt;&lt;p&gt;In &lt;em&gt;The Lord of the Rings&lt;/em&gt; elements of the monologic epic setting exist alongside the dialogue of the novel. Dialogue is promoted throughout the story by laughter and carnival, serving as an effective way of resisting the monologic threats of Sauron, Saruman, and the Ring. Despite its epic setting, dialogic qualities abound in The Lord of the Rings, which break down the monologic qualities of the text. The conversation between the epic setting and the dialogue within the novel produces a new genre with the setting and other attributes of the epic, but given new life and meaning when combined with the dialogic qualities of the novel.&lt;/p&gt;&lt;h2 id=&quot;works-cited&quot;&gt;Works Cited&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Bakhtin, M. M. “Epic and Novel.” The Dialogic Imagination: Four Essays. Ed. Michael Holquist. Trans. Caryl Emerson and Michael Holquist. Austin: University of Texas Press, 1981. Print.&lt;/li&gt;&lt;li&gt;Clark, Katerina and Michael Holquist. Mikhail Bakhtin. Cambridge: Harvard University Press, 1984. Print.&lt;/li&gt;&lt;li&gt;Holquist, Michael. Dialogism: Bakhtin and his World. 2nd ed. New York: Routledge, 2002. Print.&lt;/li&gt;&lt;li&gt;Tolkien, J. R. R. &lt;em&gt;The Lord of the Rings&lt;/em&gt;. New York: Houghton Mifflin Company, 1994. Print.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item></channel></rss>