<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>elliotec | Mike Elliott</title><description>Mike Elliott: software engineering and consciousness studies. Projects and posts.</description><link>https://elliotec.com/</link><item><title>Wrong Mindfulness: The Noble Eightfold Path as a Critique of Its Own Extraction</title><link>https://elliotec.com/wrong-mindfulness/</link><guid isPermaLink="true">https://elliotec.com/wrong-mindfulness/</guid><pubDate>Fri, 17 Apr 2026 07:59:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;This Dhamma discourse on the Great Forty has been set rolling and cannot be stopped by any recluse or brahmin or god or Māra or Brahmā or anyone in the world.&lt;/p&gt;
&lt;p&gt;Mahācattārīsaka Sutta (MN 117.36), in Ñāṇamoli &amp;amp; Bodhi (&lt;a href=&quot;#ref-nanamoli-2009&quot; id=&quot;cite-nanamoli-2009-1&quot; class=&quot;cite&quot;&gt;2009&lt;/a&gt;, p. 650)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Noble Eightfold Path is not an à la carte menu of distinct items that can be picked out individually to serve a goal or purpose as someone sees fit. It is an entangled, relational, and causal system in which each concept builds upon and is built upon by each other concept. This structure is made explicit in The Great Forty Discourse (Mahācattārīsaka Sutta, MN 117; &lt;a href=&quot;#ref-nanamoli-2009&quot; id=&quot;cite-nanamoli-2009-2&quot; class=&quot;cite&quot;&gt;Ñāṇamoli &amp;amp; Bodhi, 2009&lt;/a&gt;): right concentration is defined as concentration accompanied by right view, right intention, right effort, and right mindfulness operating in tandem. Each factor’s position as “right” (sammā) is dependent on its relationship to the others’ position as such.&lt;/p&gt;
&lt;p&gt;A stark distinction is made in The Great Forty Discourse that is not often discussed in modern literature on mindfulness and its appropriation - that every path has a “wrong” (micchā) counterpart. “Wrong” mindfulness in this context isn’t simply poor technique or ignorance or inattentiveness but is defined as mindfulness that is operating in the absence of the other conditioning factors of the Path, particularly right view (&lt;a href=&quot;#ref-nanamoli-2009&quot; id=&quot;cite-nanamoli-2009-3&quot; class=&quot;cite&quot;&gt;Ñāṇamoli &amp;amp; Bodhi, 2009&lt;/a&gt;). Mindfulness being used out of context or understanding of this relationship is still “mindfulness” that requires real attentional skill and produces real cognitive effects. It is not morally wrong in the objective sense to practice mindfulness in its isolated extracted form.&lt;/p&gt;
&lt;p&gt;But when mindfulness is practiced absent of right view in conjunction, the sutta implies consequences: “In one of right view, wrong view is abolished, and the many evil unwholesome states that originate with wrong view as condition are also abolished, and the many wholesome states that originate with right view as condition come to fulfilment by development” (&lt;a href=&quot;#ref-nanamoli-2009&quot; id=&quot;cite-nanamoli-2009-4&quot; class=&quot;cite&quot;&gt;Ñāṇamoli &amp;amp; Bodhi, 2009, MN 117.35, p. 650&lt;/a&gt;). The inverse is not formally stated but should be assumed - that wrong view operates unabolished, allowing all the evil and unwholesome states that depend on it for their proliferation when one factor of the Path is decontextualized.&lt;/p&gt;
&lt;p&gt;This distinction has implications for the global commercialization of mindfulness. Over the past few decades, mindfulness has been extracted from the integrated system in which it is a core factor, deprived of its ontological context, and repackaged as a standalone attention tool for productivity enhancements, stress reduction, and even military performance (&lt;a href=&quot;#ref-jha-2015&quot; id=&quot;cite-jha-2015-1&quot; class=&quot;cite&quot;&gt;Jha et al., 2015&lt;/a&gt;; &lt;a href=&quot;#ref-kabat-zinn-2003&quot; id=&quot;cite-kabat-zinn-2003-1&quot; class=&quot;cite&quot;&gt;Kabat-Zinn, 2003&lt;/a&gt;; &lt;a href=&quot;#ref-purser-2019&quot; id=&quot;cite-purser-2019-1&quot; class=&quot;cite&quot;&gt;Purser, 2019&lt;/a&gt;). This detachment is described as secularization for the purpose of accessibility (&lt;a href=&quot;#ref-kabat-zinn-2003&quot; id=&quot;cite-kabat-zinn-2003-2&quot; class=&quot;cite&quot;&gt;Kabat-Zinn, 2003&lt;/a&gt;), and the critical response from figures like Purser (&lt;a href=&quot;#ref-purser-2019&quot; id=&quot;cite-purser-2019-2&quot; class=&quot;cite&quot;&gt;2019&lt;/a&gt;) and Hyland (&lt;a href=&quot;#ref-hyland-2015&quot; id=&quot;cite-hyland-2015-1&quot; class=&quot;cite&quot;&gt;2015&lt;/a&gt;, &lt;a href=&quot;#ref-hyland-2017&quot; id=&quot;cite-hyland-2017-1&quot; class=&quot;cite&quot;&gt;2017&lt;/a&gt;) poses this decontextualization as an appropriation and commodification separating mindfulness from its ethical foundations that give it true transformative potential.&lt;/p&gt;
&lt;p&gt;These framings, while valid, overlook the deeper structural reality. The Eightfold Path provides an internal diagnostic system that already predicts and identifies this commodification and appropriation as a failure mode. The discourse provides a taxonomy of right and wrong factors, details their integration and entanglement with each other, and explicitly defines wrong mindfulness as mindfulness operating in wrong view. These constitute an intrinsic critique of the exact extracted state that the mindfulness industry has become. Contemporary critical theory on “McMindfulness” is useful and approachable, but unnecessary to name what is happening here when the pathology was described by its own doctrine 2,400 years before it started.&lt;/p&gt;
&lt;p&gt;The attentional liberation technology created millennia ago designed to break us free from samsara and end suffering (dukkha) by dissolving delusion, craving, and harmful livelihood - all hallmarks of our modern neoliberal societal system - is being repackaged and sold to optimize an individual’s ability to cope with their part in the proliferation of this same type of system intended by the Path to be liberated from. The rest of this essay will work through each factor in the Noble Eightfold Path to demonstrate that the commercial extraction and decontextualization of mindfulness creates a structural inversion of its objective rather than an autonomously useful tool, or simply a reduction in benefit compared with remaining integrated and interdependent with the whole Path.&lt;/p&gt;
&lt;h2 id=&quot;right-view-sammā-diṭṭhi&quot;&gt;Right View (sammā diṭṭhi)&lt;/h2&gt;
&lt;p&gt;Right view, or right understanding, is the foundation upon which the Path is built (&lt;a href=&quot;#ref-nanamoli-2009&quot; id=&quot;cite-nanamoli-2009-5&quot; class=&quot;cite&quot;&gt;Ñāṇamoli &amp;amp; Bodhi, 2009, MN 117.4, p. 647&lt;/a&gt;). It is the understanding of the three marks of existence, which are: dependence of self (anatta), impermanence (anicca), and suffering or unsatisfactoriness (dukkha). It is also the understanding that the three marks of existence lead to the Four Noble Truths, which are that there is suffering or unsatisfactoriness, there is a cause for this suffering, there is an end to this suffering, and there is a path that leads there, which is the Noble Eightfold Path. Noticing the self-referential and recursive nature of the three Marks of Existence, the Four Noble Truths, and the Noble Eightfold Path in the first path factor of right view provides a strong basis for understanding the requirement of integration of the rest (&lt;a href=&quot;#ref-kirmayer-2015&quot; id=&quot;cite-kirmayer-2015-1&quot; class=&quot;cite&quot;&gt;Kirmayer, 2015&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Commercial mindfulness strips this ontological framing, replacing it with the substitution of a metaphysical idea that optimization of the independent self through productivity is the goal, and the system in which the self is embedded is not the source of suffering, but rather the suffering is within the self and can be mitigated. This is a direct classification of wrong view (micchā diṭṭhi) because it is a misdirected understanding of how things are as defined by the text. Hyland (&lt;a href=&quot;#ref-hyland-2017&quot; id=&quot;cite-hyland-2017-2&quot; class=&quot;cite&quot;&gt;2017&lt;/a&gt;) notes that this commercialization (which he describes as McDonaldization) of mindfulness is a reduction from its spiritual and ethical origin in Buddhist tradition, which subverts its original intention.&lt;/p&gt;
&lt;p&gt;Anālayo (&lt;a href=&quot;#ref-analayo-2020&quot; id=&quot;cite-analayo-2020-1&quot; class=&quot;cite&quot;&gt;2020&lt;/a&gt;) provides a counterargument that even in ancient cultures, Mindfulness-Based Stress Reduction (MBSR) techniques were used for health benefits outside the political context the word “McMindfulness” connotes. This position is worth engaging with regarding the necessity of MBSR to include political activism to justify the term “McMindfulness,” but fails to address whether MBSR pulled from the ontological framework of the Path is a clear distortion of right view.&lt;/p&gt;
&lt;p&gt;A prominent example of someone operating in wrong view (and thus, the inversion of all other path factors) is Marc Benioff, the CEO of Salesforce. He is a multi-billionaire that personally invests in commodification of mindfulness such as the Calm app, put “mindfulness zones” on every floor of the Salesforce tower in San Francisco, hired Thich Nhat Hanh’s monks as “design consultants” for Salesforce’s annual conference, and stated how he used mindfulness practices to stay calm while laying off 20% of his workforce (&lt;a href=&quot;#ref-clifford-2019&quot; id=&quot;cite-clifford-2019-1&quot; class=&quot;cite&quot;&gt;Clifford, 2019&lt;/a&gt;; &lt;a href=&quot;#ref-gilchrist-2020&quot; id=&quot;cite-gilchrist-2020-1&quot; class=&quot;cite&quot;&gt;Gilchrist, 2020&lt;/a&gt;; &lt;a href=&quot;#ref-lipton-2016&quot; id=&quot;cite-lipton-2016-1&quot; class=&quot;cite&quot;&gt;Lipton, 2016&lt;/a&gt;). A billionaire CEO who uses a decontextualized contemplative practice designed for the dissolution of suffering to maintain self-equanimity while creating suffering for others, and who credits the practice with helping him “make tough decisions” is a particularly sharp illustration of the Path’s antithesis.&lt;/p&gt;
&lt;h2 id=&quot;right-intention-sammā-saṅkappa&quot;&gt;Right Intention (sammā saṅkappa)&lt;/h2&gt;
&lt;p&gt;Right intention comprises intention toward renunciation (nekkhamma), intention toward non-ill-will (abyāpāda), and intention toward non-cruelty (avihiṃsā) (&lt;a href=&quot;#ref-nanamoli-2009&quot; id=&quot;cite-nanamoli-2009-6&quot; class=&quot;cite&quot;&gt;Ñāṇamoli &amp;amp; Bodhi, 2009, MN 117.10-13, pp. 647-648&lt;/a&gt;). Commercial mindfulness is an explicit inversion of all three right intention components. Renunciation inverts to acquisition on both the consumer and producer side - meet your goals through purchasing apps, courses, retreats, certifications, or make your money through selling the same. Non-ill-will inverts to competitive advantage in the corporate space - optimize attention, decrease stress, outperform the competition (&lt;a href=&quot;#ref-hyland-2015&quot; id=&quot;cite-hyland-2015-2&quot; class=&quot;cite&quot;&gt;Hyland, 2015&lt;/a&gt;). And perhaps the most extreme inversion of all, non-cruelty is completely turned on its head toward operational effectiveness and lethality in military contexts where mindfulness-based interventions are increasingly adopted (&lt;a href=&quot;#ref-jha-2015&quot; id=&quot;cite-jha-2015-2&quot; class=&quot;cite&quot;&gt;Jha et al., 2015, 2025&lt;/a&gt;; &lt;a href=&quot;#ref-nassif-2023&quot; id=&quot;cite-nassif-2023-1&quot; class=&quot;cite&quot;&gt;Nassif et al., 2023&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The marketing, medicalization, and injection into professional and military contexts shed the doctrines of Buddhism and the Noble Eightfold Path of its foreign and countercultural image to the West and to assimilate its constituent pieces into mainstream American culture, which systematically replaces renunciation with consumption and non-cruelty with killing (&lt;a href=&quot;#ref-wilson-2014&quot; id=&quot;cite-wilson-2014-1&quot; class=&quot;cite&quot;&gt;Wilson, 2014&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;right-speech-sammā-vācā&quot;&gt;Right Speech (sammā vācā)&lt;/h2&gt;
&lt;p&gt;Right speech means abstaining from lying, divisive speech, abusive speech, and idle chatter (&lt;a href=&quot;#ref-nanamoli-2009&quot; id=&quot;cite-nanamoli-2009-7&quot; class=&quot;cite&quot;&gt;Ñāṇamoli &amp;amp; Bodhi, 2009, MN 117.14-17, pp. 648-649&lt;/a&gt;). Marketing terminology around commercial mindfulness is rife with manifestations of this inversion. The current opening pitch on the website for the mindfulness app Headspace is: “Relax your mind, and wake up as the person you want to be” (Headspace, n.d.). That sentence has plenty of path inversion to critique, but it is first an illustrative example of divisive speech explicitly for the purpose of selling the product. Calm, another popular mindfulness app has a website headline stating “Calm your mind. Change your life” (Calm, n.d.). This is common terminology in the industry, as is that of “awakening,” “transformation,” “presence,” and so forth. Even saying “clinically proven” is equivocal, because it can be said technically without perjury if one weak study showed any sign of efficacy without control.&lt;/p&gt;
&lt;p&gt;None of this is lying in the pure sense, but a tactical linguistic deployment of a vague authority of tradition that the industry has emptied of its content. Contemporary Western interpretations of mindfulness have been significantly simplified and removed from their Buddhist origins in a move deemed essential for the mainstreaming of the concept. The ambiguity is not accidental, but strategic (&lt;a href=&quot;#ref-thanissaro-2023&quot; id=&quot;cite-thanissaro-2023-1&quot; class=&quot;cite&quot;&gt;Thanissaro, 2023&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;right-action-sammā-kammanta&quot;&gt;Right Action (sammā kammanta)&lt;/h2&gt;
&lt;p&gt;Right action is abstaining from killing, taking what is not given, and sexual misconduct (&lt;a href=&quot;#ref-nanamoli-2009&quot; id=&quot;cite-nanamoli-2009-8&quot; class=&quot;cite&quot;&gt;Ñāṇamoli &amp;amp; Bodhi, 2009, MN 117.18-21, p. 649&lt;/a&gt;). The most obvious inversion to right action is the act of commodification of mindfulness itself. The typical colonial capitalist cycle of extraction without reciprocity is discussed extensively in critical theory of mindfulness (&lt;a href=&quot;#ref-hyland-2015&quot; id=&quot;cite-hyland-2015-3&quot; class=&quot;cite&quot;&gt;Hyland, 2015&lt;/a&gt;; &lt;a href=&quot;#ref-kirmayer-2015&quot; id=&quot;cite-kirmayer-2015-2&quot; class=&quot;cite&quot;&gt;Kirmayer, 2015&lt;/a&gt;; &lt;a href=&quot;#ref-purser-2019&quot; id=&quot;cite-purser-2019-3&quot; class=&quot;cite&quot;&gt;Purser, 2019&lt;/a&gt;; &lt;a href=&quot;#ref-thanissaro-2023&quot; id=&quot;cite-thanissaro-2023-2&quot; class=&quot;cite&quot;&gt;Thanissaro, 2023&lt;/a&gt;; &lt;a href=&quot;#ref-wilson-2014&quot; id=&quot;cite-wilson-2014-2&quot; class=&quot;cite&quot;&gt;Wilson, 2014&lt;/a&gt;). The mindfulness industrial complex disproportionately serves wealthy, white, Western populations while extracting from contemplative traditions developed in monastic communities practicing renunciation and ethical doctrine, repackaging and selling the parts useful to their cause without acknowledgment. The fact that mindfulness has become a multibillion-dollar industry backed by venture capital is a clear picture of wrong action on display.&lt;/p&gt;
&lt;p&gt;A recent extreme case that shines a floodlight on the inversion of right action (as well as many other aspects of the Path) is particularly relevant here. OneTaste was a sex-focused women’s wellness company that promoted a core practice of “orgasmic meditation” in which men manually stimulated women in group settings. The founder Nicole Daedone was convicted of forced labor for coercing and exploiting vulnerable women into performing sex acts with the company’s clients and investors under the guise of its necessity to obtain “freedom and enlightenment.” She sold her stake in the company for $12 million and is reportedly now teaching meditation to other inmates in federal prison (&lt;a href=&quot;#ref-associated-press-2026&quot; id=&quot;cite-associated-press-2026-1&quot; class=&quot;cite&quot;&gt;Associated Press, 2026&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;right-livelihood-sammā-ājīva&quot;&gt;Right Livelihood (sammā ājīva)&lt;/h2&gt;
&lt;p&gt;Right livelihood means earning a living in ways that do not cause harm and not possessing more than is necessary. The tradition specifically lists trading in weapons, living beings, meat, intoxicants, and poisons as wrong livelihood (&lt;a href=&quot;#ref-nanamoli-2009&quot; id=&quot;cite-nanamoli-2009-9&quot; class=&quot;cite&quot;&gt;Ñāṇamoli &amp;amp; Bodhi, 2009, MN 117.26-33, pp. 649-650&lt;/a&gt;). This is where the inversion of the Path is most visible. The meditation app company Headspace Health was valued at $3 billion in 2021. Aetna reported an eleven-to-one return on investment from its mindfulness programs, calculating $3,000 per employee in recaptured productivity (&lt;a href=&quot;#ref-gelles-2015&quot; id=&quot;cite-gelles-2015-1&quot; class=&quot;cite&quot;&gt;Gelles, 2015&lt;/a&gt;; &lt;a href=&quot;#ref-purser-2019&quot; id=&quot;cite-purser-2019-4&quot; class=&quot;cite&quot;&gt;Purser, 2019&lt;/a&gt;). The inversion is quantifiable, revealing the intention behind the deployment of mindfulness not as liberation of suffering, but as extracted productivity gains measured in dollars. Millions are saved by teaching employees to breathe through their exploitation, and the teachers profit too.&lt;/p&gt;
&lt;p&gt;The practice of mindfulness in the military is yet again egregiously misdirected in its application within the frame of right livelihood. Mindfulness-based attention training offers “key competitive advantage in the modern-day battlefield,” and enhanced “operational performance in active-duty soldiers,” which is an explicit statement by researchers of exemplified wrong livelihood (&lt;a href=&quot;#ref-jha-2025&quot; id=&quot;cite-jha-2025-1&quot; class=&quot;cite&quot;&gt;Jha et al., 2025&lt;/a&gt;; &lt;a href=&quot;#ref-nassif-2023&quot; id=&quot;cite-nassif-2023-2&quot; class=&quot;cite&quot;&gt;Nassif et al., 2023&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;right-effort-sammā-vāyāma&quot;&gt;Right Effort (sammā vāyāma)&lt;/h2&gt;
&lt;p&gt;Right effort in the Path is that of effort directed toward preventing unwholesome states from arising, abandoning unwholesome states that have already arisen, cultivating wholesome states, and maintaining wholesome states already present (&lt;a href=&quot;#ref-nanamoli-2009&quot; id=&quot;cite-nanamoli-2009-10&quot; class=&quot;cite&quot;&gt;Ñāṇamoli &amp;amp; Bodhi, 2009, MN 141.24, p. 1100&lt;/a&gt;). Its inverse is apparent in commercialized mindfulness through the redirection of effort toward optimization of an individual self within an unchanged and unchanging system of dukkha. Practitioners exert effort in their practice, paying for app subscriptions, tracking streaks, and attending retreats, in service of maintaining a self that is calmer and more attentive, but still structured around craving.&lt;/p&gt;
&lt;p&gt;Like all path inversions, right effort without right view is just learning to cope with a better management of suffering in samsara. Mindfulness stripped of the teachings on ethics and the liberating goal of dissolving attachment to a false sense of self leaves a self-discipline tool under the guise of self-help. The self-discipline is what the system needs an individual to have to maintain stasis; the self-help is the liberation from the system that the system strips away (&lt;a href=&quot;#ref-purser-2016&quot; id=&quot;cite-purser-2016-1&quot; class=&quot;cite&quot;&gt;Purser et al., 2016&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;right-mindfulness-sammā-sati&quot;&gt;Right Mindfulness (sammā sati)&lt;/h2&gt;
&lt;p&gt;This is, of course, the primary subject of commodification being discussed, and the factor being most distorted by extraction. Right mindfulness is defined specifically as mindfulness that keeps the other path factors in view: “Mindfully one abandons wrong view, mindfully one enters upon and abides in right view: this is one’s right mindfulness” (&lt;a href=&quot;#ref-nanamoli-2009&quot; id=&quot;cite-nanamoli-2009-11&quot; class=&quot;cite&quot;&gt;Ñāṇamoli &amp;amp; Bodhi, 2009, MN 117.9, p. 647&lt;/a&gt;). It is of course, a practice of present-moment contemplation, but canonically, it involves contemplation of body, feeling-tone (pleasantness, unpleasantness, or neutrality), mind-states (observation of the overall quality or condition of the mind), and the dhammas - including the hindrances (mental obstacles that prevent clarity, such as sensory desire, ill-will, agitation, and doubt), the aggregates of a person (material form, feeling-tone, perception, mental formations, and consciousness), the sense bases (the five senses plus the mind), and the four noble truths (&lt;a href=&quot;#ref-nanamoli-2009&quot; id=&quot;cite-nanamoli-2009-12&quot; class=&quot;cite&quot;&gt;Ñāṇamoli &amp;amp; Bodhi, 2009, MN 10, pp. 145-155&lt;/a&gt;). The fourth foundation of mindfulness includes contemplating the Path within the practice of the Path.&lt;/p&gt;
&lt;p&gt;This definition, again, has several layers of recursion and self-reference, highlighting the entanglement with the rest of the Path factors and other doctrines. The reduction of sati to “non-judgemental present-moment awareness” as described by Kabat-Zinn (&lt;a href=&quot;#ref-kabat-zinn-2003&quot; id=&quot;cite-kabat-zinn-2003-3&quot; class=&quot;cite&quot;&gt;2003&lt;/a&gt;) is not strictly untrue, but out of context is a simplification to the point of functional neutering of the broader liberative framework. This contemporary reframing of mindfulness is at odds with premodern Buddhist epistemology, which directed mindfulness practice toward right view and discernment, and extracting such techniques from their social contexts changes the effects and purpose of the practice (&lt;a href=&quot;#ref-kirmayer-2015&quot; id=&quot;cite-kirmayer-2015-3&quot; class=&quot;cite&quot;&gt;Kirmayer, 2015&lt;/a&gt;; &lt;a href=&quot;#ref-sharf-2015&quot; id=&quot;cite-sharf-2015-1&quot; class=&quot;cite&quot;&gt;Sharf, 2015&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;right-concentration-sammā-samādhi&quot;&gt;Right Concentration (sammā samādhi)&lt;/h2&gt;
&lt;p&gt;Right concentration is defined in the Exposition of the Truths (MN 141) as the four jhānas - progressive states of deep meditation and absorption that alter the structure of conscious experience and lead to profound insight (&lt;a href=&quot;#ref-nanamoli-2009&quot; id=&quot;cite-nanamoli-2009-13&quot; class=&quot;cite&quot;&gt;Ñāṇamoli &amp;amp; Bodhi, 2009, MN 141.31, p. 1100&lt;/a&gt;). These states are the progressive culmination of practice and involve adherence to the Path in order to achieve. The first jhāna requires elimination of sensory desire and unwholesome states, bringing forth applied and sustained thought, along with rapture, contentment, and unification of mind. The second jhāna is the cessation of applied and sustained thought, effortless attention. Rapture, contentment, and unification of mind stay. The third jhāna is when rapture fades and only contentment and equanimity remain. The fourth jhāna is when contentment and pain cease, and only pure equanimity and mindfulness are present - this is the stage at which insight free from distortion happens.&lt;/p&gt;
&lt;p&gt;Right concentration is conspicuously absent in most commercial mindfulness applications. When viewed through the critical lens that is the objective of this essay, this omission appears to be no accident. The parts of the Path that survived extraction into secularism and commodification are compatible with neoliberal consumerism and exploitation - present moment attention is useful for productivity, non-reactivity is useful for tolerance of exploitative conditions, stress reduction is useful for decreasing strain on the system including healthcare costs.&lt;/p&gt;
&lt;p&gt;The parts of the Path that could be reached to dissolve the individual notion of a self, that could bring profound insights into liberation from the contemporary world order that relies on individualization and apathy for its proliferation, were dropped from the mainstreaming of mindfulness. Right concentration is the most potentially destabilizing element of the Path, and the tradition placed it at the peak given the tenacity and endurance one must employ to reach it. Aside from its threat to the system commodifying mindfulness, these characteristics make right concentration an easy target for exclusion under the same excuse as secularization and decontextualization for mass adoption.&lt;/p&gt;
&lt;h2 id=&quot;the-path-is-self-correcting&quot;&gt;The Path Is Self-Correcting&lt;/h2&gt;
&lt;p&gt;The Noble Eightfold Path is a formalized integrated architecture with explicit right and wrong (sammā/micchā) distinctions made across each factor. The decontextualization of mindfulness is internally identified as a misdirected, pathological pattern rather than just simply imperfect. As stated by MN 117.35, mindfulness practiced without right view creates a platform for the consequences of “evil, unwholesome states” (&lt;a href=&quot;#ref-nanamoli-2009&quot; id=&quot;cite-nanamoli-2009-14&quot; class=&quot;cite&quot;&gt;Ñāṇamoli &amp;amp; Bodhi, 2009, p. 650&lt;/a&gt;). The sutta further makes clear in MN 117.37 that anyone censuring or rejecting the framework is honoring and praising those who hold wrong view, wrong intention, wrong livelihood, and so on, and is worthy themselves of being censured and rejected (&lt;a href=&quot;#ref-nanamoli-2009&quot; id=&quot;cite-nanamoli-2009-15&quot; class=&quot;cite&quot;&gt;Ñāṇamoli &amp;amp; Bodhi, 2009, p. 651&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The Noble Eightfold Path immanently provides the criteria necessary to critique inversion of the system. The Path does not need McDonaldization theory (&lt;a href=&quot;#ref-hyland-2017&quot; id=&quot;cite-hyland-2017-3&quot; class=&quot;cite&quot;&gt;Hyland, 2017&lt;/a&gt;; &lt;a href=&quot;#ref-purser-2019&quot; id=&quot;cite-purser-2019-5&quot; class=&quot;cite&quot;&gt;Purser, 2019&lt;/a&gt;), Marxist economic philosophy (&lt;a href=&quot;#ref-harvey-2014&quot; id=&quot;cite-harvey-2014-1&quot; class=&quot;cite&quot;&gt;Harvey, 2014&lt;/a&gt;), or neocolonial analysis of cultural appropriation (&lt;a href=&quot;#ref-carrette-2005&quot; id=&quot;cite-carrette-2005-1&quot; class=&quot;cite&quot;&gt;Carrette &amp;amp; King, 2005&lt;/a&gt;) to name what is happening to it, though these frameworks validate it. The Path’s own system is sufficient to build a more precise critique by specifying the mechanisms of failure. The extraction and decontextualization of an entangled constituent interdependent with the others create a pure inversion of the tradition rather than a modest reduction of its value.&lt;/p&gt;
&lt;p&gt;While this view on the state of the corruption of a beautiful system designed to decrease suffering (dukkha) may feel like it generates more suffering, we can find solace in the Three Marks of Existence foundational to the understanding of the Path. Suffering is a key mark of human existence, but so is impermanence (anicca), and there is no independent self (anatta) to remain in this state of suffering. Said differently, suffering is part of life, nothing lasts forever (including this systemic corruption, and our suffering from it), and we are all in this together. The more we understand this, the less we and the system will suffer, and so the wheel turns.&lt;/p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;p id=&quot;ref-analayo-2020&quot;&gt;Anālayo, B. (2020). The myth of McMindfulness. &lt;em&gt;Mindfulness&lt;/em&gt;, &lt;em&gt;11&lt;/em&gt;(2), 472-479. &lt;a href=&quot;https://doi.org/10.1007/s12671-019-01264-x&quot;&gt;https://doi.org/10.1007/s12671-019-01264-x&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-analayo-2020-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-associated-press-2026&quot;&gt;Associated Press. (2026, March 31). Founder of ‘orgasmic meditation’ company gets nine years in prison in forced labor conspiracy. &lt;em&gt;The Guardian&lt;/em&gt;. &lt;a href=&quot;https://www.theguardian.com/us-news/2026/mar/31/orgasmic-meditation-founder-prison&quot;&gt;https://www.theguardian.com/us-news/2026/mar/31/orgasmic-meditation-founder-prison&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-associated-press-2026-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Calm. (n.d.). Home page. Retrieved April 19, 2026, from &lt;a href=&quot;https://www.calm.com/&quot;&gt;https://www.calm.com/&lt;/a&gt;&lt;/p&gt;
&lt;p id=&quot;ref-carrette-2005&quot;&gt;Carrette, J., &amp;amp; King, R. (2005). &lt;em&gt;Selling spirituality: The silent takeover of religion&lt;/em&gt;. Routledge. &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-carrette-2005-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-clifford-2019&quot;&gt;Clifford, C. (2019, November 5). Salesforce CEO Marc Benioff: Why we have “mindfulness zones” where employees put away phones, clear their minds. &lt;em&gt;CNBC&lt;/em&gt;. &lt;a href=&quot;https://www.cnbc.com/2019/11/05/salesforce-ceo-marc-benioff-why-we-have-mindfulness-zones.html&quot;&gt;https://www.cnbc.com/2019/11/05/salesforce-ceo-marc-benioff-why-we-have-mindfulness-zones.html&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-clifford-2019-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-gelles-2015&quot;&gt;Gelles, D. (2015). &lt;em&gt;Mindful work: How meditation is changing business from the inside out&lt;/em&gt;. Houghton Mifflin Harcourt. &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-gelles-2015-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-gilchrist-2020&quot;&gt;Gilchrist, K. (2020, October 16). Salesforce CEO Marc Benioff developed this mindset to help him lead through crisis. &lt;em&gt;CNBC&lt;/em&gt;. &lt;a href=&quot;https://www.cnbc.com/2020/10/16/salesforce-ceo-marc-benioff-developed-this-mindset-to-lead-in-crisis.html&quot;&gt;https://www.cnbc.com/2020/10/16/salesforce-ceo-marc-benioff-developed-this-mindset-to-lead-in-crisis.html&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-gilchrist-2020-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-harvey-2014&quot;&gt;Harvey, D. (2014). &lt;em&gt;Seventeen contradictions and the end of capitalism&lt;/em&gt;. Profile Books. &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-harvey-2014-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Headspace. (n.d.). Home page. Retrieved April 19, 2026, from &lt;a href=&quot;https://www.headspace.com/&quot;&gt;https://www.headspace.com/&lt;/a&gt;&lt;/p&gt;
&lt;p id=&quot;ref-hyland-2015&quot;&gt;Hyland, T. (2015). McMindfulness in the workplace: Vocational learning and the commodification of the present moment. &lt;em&gt;Journal of Vocational Education and Training&lt;/em&gt;, &lt;em&gt;67&lt;/em&gt;(2), 219-234. &lt;a href=&quot;https://doi.org/10.1080/13636820.2015.1022871&quot;&gt;https://doi.org/10.1080/13636820.2015.1022871&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-hyland-2015-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩1&lt;/a&gt; &lt;a href=&quot;#cite-hyland-2015-2&quot; aria-label=&quot;back to citation 2 in the text&quot;&gt;↩2&lt;/a&gt; &lt;a href=&quot;#cite-hyland-2015-3&quot; aria-label=&quot;back to citation 3 in the text&quot;&gt;↩3&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-hyland-2017&quot;&gt;Hyland, T. (2017). McDonaldizing spirituality: Mindfulness, education, and consumerism. &lt;em&gt;Journal of Transformative Education&lt;/em&gt;, &lt;em&gt;15&lt;/em&gt;(4), 334-356. &lt;a href=&quot;https://doi.org/10.1177/1541344617696972&quot;&gt;https://doi.org/10.1177/1541344617696972&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-hyland-2017-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩1&lt;/a&gt; &lt;a href=&quot;#cite-hyland-2017-2&quot; aria-label=&quot;back to citation 2 in the text&quot;&gt;↩2&lt;/a&gt; &lt;a href=&quot;#cite-hyland-2017-3&quot; aria-label=&quot;back to citation 3 in the text&quot;&gt;↩3&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-jha-2025&quot;&gt;Jha, A. P., Izaguirre, M. K., &amp;amp; Adler, A. B. (2025). Mindfulness training in military settings: Emerging evidence and best-practice guidance. &lt;em&gt;Current Psychiatry Reports, 27&lt;/em&gt;(6), 393-407. &lt;a href=&quot;https://doi.org/10.1007/s11920-025-01608-6&quot;&gt;https://doi.org/10.1007/s11920-025-01608-6&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-jha-2025-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-jha-2015&quot;&gt;Jha, A. P., Morrison, A. B., Dainer-Best, J., Parker, S., Rostrup, N., &amp;amp; Stanley, E. A. (2015). Minds “at attention”: Mindfulness training curbs attentional lapses in military cohorts. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;10&lt;/em&gt;(2), e0116889. &lt;a href=&quot;https://doi.org/10.1371/journal.pone.0116889&quot;&gt;https://doi.org/10.1371/journal.pone.0116889&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-jha-2015-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩1&lt;/a&gt; &lt;a href=&quot;#cite-jha-2015-2&quot; aria-label=&quot;back to citation 2 in the text&quot;&gt;↩2&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-kabat-zinn-2003&quot;&gt;Kabat-Zinn, J. (2003). Mindfulness-based interventions in context: Past, present, and future. &lt;em&gt;Clinical Psychology: Science and Practice&lt;/em&gt;, &lt;em&gt;10&lt;/em&gt;(2), 144-156. &lt;a href=&quot;https://doi.org/10.1093/clipsy.bpg016&quot;&gt;https://doi.org/10.1093/clipsy.bpg016&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-kabat-zinn-2003-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩1&lt;/a&gt; &lt;a href=&quot;#cite-kabat-zinn-2003-2&quot; aria-label=&quot;back to citation 2 in the text&quot;&gt;↩2&lt;/a&gt; &lt;a href=&quot;#cite-kabat-zinn-2003-3&quot; aria-label=&quot;back to citation 3 in the text&quot;&gt;↩3&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-kirmayer-2015&quot;&gt;Kirmayer, L. J. (2015). Mindfulness in cultural context. &lt;em&gt;Transcultural Psychiatry&lt;/em&gt;, &lt;em&gt;52&lt;/em&gt;(4), 447-469. &lt;a href=&quot;https://doi.org/10.1177/1363461515598949&quot;&gt;https://doi.org/10.1177/1363461515598949&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-kirmayer-2015-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩1&lt;/a&gt; &lt;a href=&quot;#cite-kirmayer-2015-2&quot; aria-label=&quot;back to citation 2 in the text&quot;&gt;↩2&lt;/a&gt; &lt;a href=&quot;#cite-kirmayer-2015-3&quot; aria-label=&quot;back to citation 3 in the text&quot;&gt;↩3&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-lipton-2016&quot;&gt;Lipton, J. (2016, October 6). Salesforce CEO Marc Benioff’s plan to keep calm and tech on. &lt;em&gt;CNBC&lt;/em&gt;. &lt;a href=&quot;https://www.cnbc.com/2016/10/06/salesforce-ceo-marc-benioffs-plan-to-keep-calm-and-tech-on.html&quot;&gt;https://www.cnbc.com/2016/10/06/salesforce-ceo-marc-benioffs-plan-to-keep-calm-and-tech-on.html&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-lipton-2016-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-nanamoli-2009&quot;&gt;Ñāṇamoli, Bhikkhu, &amp;amp; Bodhi, Bhikkhu (Trans.). (2009). &lt;em&gt;The middle length discourses of the Buddha: A translation of the Majjhima Nikāya&lt;/em&gt; (4th ed.). Wisdom Publications. &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-nanamoli-2009-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩1&lt;/a&gt; &lt;a href=&quot;#cite-nanamoli-2009-2&quot; aria-label=&quot;back to citation 2 in the text&quot;&gt;↩2&lt;/a&gt; &lt;a href=&quot;#cite-nanamoli-2009-3&quot; aria-label=&quot;back to citation 3 in the text&quot;&gt;↩3&lt;/a&gt; &lt;a href=&quot;#cite-nanamoli-2009-4&quot; aria-label=&quot;back to citation 4 in the text&quot;&gt;↩4&lt;/a&gt; &lt;a href=&quot;#cite-nanamoli-2009-5&quot; aria-label=&quot;back to citation 5 in the text&quot;&gt;↩5&lt;/a&gt; &lt;a href=&quot;#cite-nanamoli-2009-6&quot; aria-label=&quot;back to citation 6 in the text&quot;&gt;↩6&lt;/a&gt; &lt;a href=&quot;#cite-nanamoli-2009-7&quot; aria-label=&quot;back to citation 7 in the text&quot;&gt;↩7&lt;/a&gt; &lt;a href=&quot;#cite-nanamoli-2009-8&quot; aria-label=&quot;back to citation 8 in the text&quot;&gt;↩8&lt;/a&gt; &lt;a href=&quot;#cite-nanamoli-2009-9&quot; aria-label=&quot;back to citation 9 in the text&quot;&gt;↩9&lt;/a&gt; &lt;a href=&quot;#cite-nanamoli-2009-10&quot; aria-label=&quot;back to citation 10 in the text&quot;&gt;↩10&lt;/a&gt; &lt;a href=&quot;#cite-nanamoli-2009-11&quot; aria-label=&quot;back to citation 11 in the text&quot;&gt;↩11&lt;/a&gt; &lt;a href=&quot;#cite-nanamoli-2009-12&quot; aria-label=&quot;back to citation 12 in the text&quot;&gt;↩12&lt;/a&gt; &lt;a href=&quot;#cite-nanamoli-2009-13&quot; aria-label=&quot;back to citation 13 in the text&quot;&gt;↩13&lt;/a&gt; &lt;a href=&quot;#cite-nanamoli-2009-14&quot; aria-label=&quot;back to citation 14 in the text&quot;&gt;↩14&lt;/a&gt; &lt;a href=&quot;#cite-nanamoli-2009-15&quot; aria-label=&quot;back to citation 15 in the text&quot;&gt;↩15&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-nassif-2023&quot;&gt;Nassif, T. H., Adrian, A. L., Gutierrez, I. A., Dixon, A. C., Rogers, S. L., Jha, A. P., &amp;amp; Adler, A. B. (2023). Optimizing performance and mental skills with mindfulness-based attention training: Two field studies with operational units. &lt;em&gt;Military Medicine&lt;/em&gt;, &lt;em&gt;188&lt;/em&gt;(3-4), e761-e770. &lt;a href=&quot;https://doi.org/10.1093/milmed/usab380&quot;&gt;https://doi.org/10.1093/milmed/usab380&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-nassif-2023-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩1&lt;/a&gt; &lt;a href=&quot;#cite-nassif-2023-2&quot; aria-label=&quot;back to citation 2 in the text&quot;&gt;↩2&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-purser-2019&quot;&gt;Purser, R. E. (2019). &lt;em&gt;McMindfulness: How mindfulness became the new capitalist spirituality&lt;/em&gt;. Repeater Books. &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-purser-2019-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩1&lt;/a&gt; &lt;a href=&quot;#cite-purser-2019-2&quot; aria-label=&quot;back to citation 2 in the text&quot;&gt;↩2&lt;/a&gt; &lt;a href=&quot;#cite-purser-2019-3&quot; aria-label=&quot;back to citation 3 in the text&quot;&gt;↩3&lt;/a&gt; &lt;a href=&quot;#cite-purser-2019-4&quot; aria-label=&quot;back to citation 4 in the text&quot;&gt;↩4&lt;/a&gt; &lt;a href=&quot;#cite-purser-2019-5&quot; aria-label=&quot;back to citation 5 in the text&quot;&gt;↩5&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-purser-2016&quot;&gt;Purser, R. E., Forbes, D., &amp;amp; Burke, A. (Eds.). (2016). &lt;em&gt;Handbook of mindfulness: Culture, context, and social engagement&lt;/em&gt;. Springer. &lt;a href=&quot;https://doi.org/10.1007/978-3-319-44019-4&quot;&gt;https://doi.org/10.1007/978-3-319-44019-4&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-purser-2016-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-sharf-2015&quot;&gt;Sharf, R. H. (2015). Is mindfulness Buddhist? (and why it matters). &lt;em&gt;Transcultural Psychiatry&lt;/em&gt;, &lt;em&gt;52&lt;/em&gt;(4), 470-484. &lt;a href=&quot;https://doi.org/10.1177/1363461514557561&quot;&gt;https://doi.org/10.1177/1363461514557561&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-sharf-2015-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-thanissaro-2023&quot;&gt;Thanissaro, N. (2023). Mindfulness and McMindfulness. In S. Stanley, R. E. Purser, &amp;amp; N. Singh (Eds.), &lt;em&gt;Handbook of ethical foundations of mindfulness&lt;/em&gt; (pp. 13-38). Palgrave Macmillan. &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-thanissaro-2023-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩1&lt;/a&gt; &lt;a href=&quot;#cite-thanissaro-2023-2&quot; aria-label=&quot;back to citation 2 in the text&quot;&gt;↩2&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-wilson-2014&quot;&gt;Wilson, J. (2014). &lt;em&gt;Mindful America: The mutual transformation of Buddhist meditation and American culture&lt;/em&gt;. Oxford University Press. &lt;a href=&quot;https://doi.org/10.1093/acprof:oso/9780199827817.001.0001&quot;&gt;https://doi.org/10.1093/acprof:oso/9780199827817.001.0001&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-wilson-2014-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩1&lt;/a&gt; &lt;a href=&quot;#cite-wilson-2014-2&quot; aria-label=&quot;back to citation 2 in the text&quot;&gt;↩2&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</content:encoded></item><item><title>Psychedelic Integration as Systemic Spiritual Bypassing</title><link>https://elliotec.com/psychedelic-integration-as-systemic-spiritual-bypassing/</link><guid isPermaLink="true">https://elliotec.com/psychedelic-integration-as-systemic-spiritual-bypassing/</guid><pubDate>Fri, 05 Dec 2025 18:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;the-modern-mental-health-crisis&quot;&gt;The Modern Mental Health Crisis&lt;/h2&gt;
&lt;p&gt;The mental health crisis we are experiencing in the modernized Western world is primarily a socio-economic and political epidemic rather than simply a biological problem sweeping our societies (&lt;a href=&quot;#ref-davies-2021&quot; id=&quot;cite-davies-2021-1&quot; class=&quot;cite&quot;&gt;Davies, 2021&lt;/a&gt;). The individualization of mental health diverts responsibility and attention away from the extractive and oppressive systems of neoliberal capitalism and their propensity toward profiteering through exploitative industrial complexes.&lt;/p&gt;
&lt;p&gt;Loneliness, overwork, burnout, inequality, insecurity, social fragmentation, and isolation are examples of forms of distress that are becoming increasingly widespread and prevalent (&lt;a href=&quot;#ref-davies-2021&quot; id=&quot;cite-davies-2021-2&quot; class=&quot;cite&quot;&gt;Davies, 2021&lt;/a&gt;). But instead of addressing the structural societal causes, Western culture reframes these psychological challenges into individual “disorders.” People respond differently to their environments and internal struggles, so our society has built frameworks to categorize these ailments into diagnoses that can be labelled onto them with the intention of treating them, often with medication.&lt;/p&gt;
&lt;p&gt;The DSM (Diagnostic and Statistical Manual of Mental Disorders) is perhaps the most widely used and best known of these frameworks. The first edition published in 1952 was created by a committee of 28 members of the American Psychiatric Association and contained 106 disorders explained using psychodynamic theories. The DSM-III published in 1980 marked a turning point, abandoning psychoanalytical theories and adopting a symptom-based model, framing the disorders as having biological causality that could be treated medically (&lt;a href=&quot;#ref-first-2012&quot; id=&quot;cite-first-2012-1&quot; class=&quot;cite&quot;&gt;First, 2012&lt;/a&gt;). Upon publication of the DSM-5 in 2013, the number of disorders ballooned to around 370 diagnostic categories including subtypes and specifiers, and the task force voting them into existence remained a mere 28 members – 68% of those members had close ties and potential conflicts of interest with the pharmaceutical industry (&lt;a href=&quot;#ref-cosgrove-2009&quot; id=&quot;cite-cosgrove-2009-1&quot; class=&quot;cite&quot;&gt;Cosgrove et al., 2009&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;As of 2022, it is estimated that over 23.1% of the adult population in the United States is currently living with a mental illness (&lt;a href=&quot;#ref-national-institute-of-mental-health-2022&quot; id=&quot;cite-national-institute-of-mental-health-2022-1&quot; class=&quot;cite&quot;&gt;National Institute of Mental Health, 2022&lt;/a&gt;). Surprisingly, there is no biomarker for any diagnosis in the DSM, despite the often-heard phrase “chemical imbalance” as the cause – due to the lack of biological evidence, diagnosis remains entirely symptom-cluster based.&lt;/p&gt;
&lt;p&gt;Yet the rate of psychotropic medication usage in the U.S. alone has risen significantly over the decades (&lt;a href=&quot;#ref-paulose-ram-2004&quot; id=&quot;cite-paulose-ram-2004-1&quot; class=&quot;cite&quot;&gt;Paulose-Ram et al., 2004&lt;/a&gt;; &lt;a href=&quot;#ref-sanborn-2023&quot; id=&quot;cite-sanborn-2023-1&quot; class=&quot;cite&quot;&gt;Sanborn et al., 2023&lt;/a&gt;; &lt;a href=&quot;#ref-stafford-2001&quot; id=&quot;cite-stafford-2001-1&quot; class=&quot;cite&quot;&gt;Stafford et al., 2001&lt;/a&gt;). With the rise of standard medicalization of mental illness has come both a rise in realizations that they simply aren’t working (&lt;a href=&quot;#ref-davies-2021&quot; id=&quot;cite-davies-2021-3&quot; class=&quot;cite&quot;&gt;Davies, 2021&lt;/a&gt;), and an increased interest in alternative treatments to these disorders – notably that of psychedelic therapy.&lt;/p&gt;
&lt;h2 id=&quot;the-psychedelic-therapy-response&quot;&gt;The Psychedelic Therapy Response&lt;/h2&gt;
&lt;p&gt;While traditional models of psychiatry have framed distress and mental health disorders as individual biochemical imbalances requiring medical intervention, psychedelic therapy as a treatment might ostensibly provide a break from that perspective, given the ancient origins, indigenous practices, and Western countercultural recent past that so heavily emphasized “oneness” in spiritual, social, collective relationship to nature and consciousness.&lt;/p&gt;
&lt;p&gt;Alas, we find it follows the same arc that happens to many countercultural practices under neoliberalism: beginning as a movement that includes a radical critique of mainstream society, met with heavy suppression and fear, then gaining enough momentum to be absorbed and standardized via “proper channels” like medicine, eventually being regulated, the narrative shaped, and sold back to the public as a commodity under the terms of the system (&lt;a href=&quot;#ref-aday-2023&quot; id=&quot;cite-aday-2023-1&quot; class=&quot;cite&quot;&gt;Aday et al., 2023&lt;/a&gt;; &lt;a href=&quot;#ref-barber-2022&quot; id=&quot;cite-barber-2022-1&quot; class=&quot;cite&quot;&gt;Barber &amp;amp; Aaronson, 2022&lt;/a&gt;; &lt;a href=&quot;#ref-sanchez-petrement-2023&quot; id=&quot;cite-sanchez-petrement-2023-1&quot; class=&quot;cite&quot;&gt;Sanchez Petrement, 2023&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;This is not to say that psychedelic therapy is definitively ineffective in treating these maladies. By many accounts following the latest mainstream narrative of psychedelic research, the effectiveness of psychedelics for “treatment resistant” mental illness has been touted as showing remarkable promise (&lt;a href=&quot;#ref-mitchell-2021&quot; id=&quot;cite-mitchell-2021-1&quot; class=&quot;cite&quot;&gt;Mitchell et al., 2021&lt;/a&gt;; &lt;a href=&quot;#ref-rosenblat-2024&quot; id=&quot;cite-rosenblat-2024-1&quot; class=&quot;cite&quot;&gt;Rosenblat et al., 2024&lt;/a&gt;). Unfortunately, these promises are presently unfounded, lack sufficient evidence, and must be met with extreme caution and remain unfulfilled until larger, more representative, rigorous, and longitudinal research is completed (&lt;a href=&quot;#ref-butler-2022&quot; id=&quot;cite-butler-2022-1&quot; class=&quot;cite&quot;&gt;Butler et al., 2022&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Some highly anticipated studies claiming this promise have been shown to suffer from poor blinding and strong expectancy effects, ethical concerns, and safety-reporting oversights, all muddling data integrity. Perhaps one of the most notable contemporary examples is that of the Phase 3 trial for MDMA-assisted therapy for PTSD being denied approval in 2024 by the FDA (&lt;a href=&quot;#ref-singh-2025&quot; id=&quot;cite-singh-2025-1&quot; class=&quot;cite&quot;&gt;Singh, 2025&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Deeper still than the glaring problems with empirical methodology and disastrously unethical sexual abuse issues, the moving train of corporate investment is driving much of this inadequate research (&lt;a href=&quot;#ref-barber-2025&quot; id=&quot;cite-barber-2025-1&quot; class=&quot;cite&quot;&gt;Barber et al., 2025&lt;/a&gt;; &lt;a href=&quot;#ref-buchman-2024&quot; id=&quot;cite-buchman-2024-1&quot; class=&quot;cite&quot;&gt;Buchman &amp;amp; Rosenbaum, 2024&lt;/a&gt;). It is important to recall historical precedents of corporate meddling in research to further status and monetary gain such as those of the tobacco industry and explore them as possible analogues or precursors to what we see now given the current state of research of psychedelics (&lt;a href=&quot;#ref-francey-2000&quot; id=&quot;cite-francey-2000-1&quot; class=&quot;cite&quot;&gt;Francey &amp;amp; Chapman, 2000&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;the-integration-excuse&quot;&gt;The Integration Excuse&lt;/h2&gt;
&lt;p&gt;Partly in order to make up for the gap in empirical evidence that psychedelic substances alone are as effective as promised in treating mental disorders, Psychedelic Assisted (Psycho)therapy (PAP or PAT) has been touted as a necessary component of psychedelic treatment which involves a preparation phase (including set and setting), a liminal phase (the psychedelic trip or journey), and an integration phase (&lt;a href=&quot;#ref-muthukumaraswamy-2025&quot; id=&quot;cite-muthukumaraswamy-2025-1&quot; class=&quot;cite&quot;&gt;Muthukumaraswamy et al., 2025&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Integration has been a loaded term in the industry, with no consensus definition or standardized techniques, and often disparate or unclear goals. Many clinicians and participants treat integration as a safeguard or guarantee of benefit, but the loose definition and ongoing process characterizing it poses inherent risks and ethical hazards, especially without the supporting empirical evidence for that assumption, much like the substances themselves (&lt;a href=&quot;#ref-bathje-2022&quot; id=&quot;cite-bathje-2022-1&quot; class=&quot;cite&quot;&gt;Bathje et al., 2022&lt;/a&gt;; &lt;a href=&quot;#ref-pilecki-2021&quot; id=&quot;cite-pilecki-2021-1&quot; class=&quot;cite&quot;&gt;Pilecki et al., 2021&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In an attempt to erode some ambiguity regarding integration concepts, Bathje et al. (&lt;a href=&quot;#ref-bathje-2022&quot; id=&quot;cite-bathje-2022-2&quot; class=&quot;cite&quot;&gt;2022&lt;/a&gt;) critically analyzed a comprehensive set of different definitions and practices to provide a synthesized definition and model. In their research, they note: “we must acknowledge that treating integration as a separate phase of psychedelic experiences probably imposes Western dualistic thinking” (p. 3). They go on to discuss Cartesian dualism, Marx’s theory of alienation, existential distress associated with climate change and inequality, and lack of freedom, collectivism, and egalitarianism as potential reasons why there is a renewed interest in psychedelics, and why integration is more necessary for Westerners than Indigenous people.&lt;/p&gt;
&lt;p&gt;Much like psychiatry, the DSM, and the medical-industrial complex, integration as we view it through these frameworks and “synthesized models” is a Western invention, created by and for the systems that apparently caused the need for it in the first place. This self-fulfilling prophecy loop is a symptom of the notion of “capitalist realism” – that there is no alternative form of social organization so we must live and operate within the system and that capitalism simply is reality (&lt;a href=&quot;#ref-sanchez-petrement-2023&quot; id=&quot;cite-sanchez-petrement-2023-2&quot; class=&quot;cite&quot;&gt;Sanchez Petrement, 2023&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;As is the way of capitalism, this has led to commodification of the concept of integration. An estimated 91.2% of the cost of PAT sessions ($7,543 per patient) goes to specialized therapists’ compensation (&lt;a href=&quot;#ref-marseille-2020&quot; id=&quot;cite-marseille-2020-1&quot; class=&quot;cite&quot;&gt;Marseille et al., 2020&lt;/a&gt;). Naturally, investors and heads of pharmaceutical companies have started implementing cost-cutting techniques by replacing the human element with digital integration apps run on profit-oriented algorithms under the guise of broadening access. This standardized formulaic solution reduces integration to a solvable technical problem that further disconnects the individual from the ceremonial, therapeutic, communal aspects of these experiences that have been successful in Indigenous communities throughout history (&lt;a href=&quot;#ref-sanabria-2025&quot; id=&quot;cite-sanabria-2025-1&quot; class=&quot;cite&quot;&gt;Sanabria &amp;amp; Tófoli, 2025&lt;/a&gt;; &lt;a href=&quot;#ref-yoo-2025&quot; id=&quot;cite-yoo-2025-1&quot; class=&quot;cite&quot;&gt;Yoo &amp;amp; Sakopoulos, 2025&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;It also has the paradoxical effect of decreasing access to these treatments and risks bias in rates of effectiveness, since the data provided by research in this field on which these formulas and algorithms are built is gathered on an incredibly non-diverse set of participants who are predominantly white, highly educated Westerners (&lt;a href=&quot;#ref-haft-2025&quot; id=&quot;cite-haft-2025-1&quot; class=&quot;cite&quot;&gt;Haft et al., 2025&lt;/a&gt;; &lt;a href=&quot;#ref-hovmand-2023&quot; id=&quot;cite-hovmand-2023-1&quot; class=&quot;cite&quot;&gt;Hovmand et al., 2023&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;the-non-western-perspectives&quot;&gt;The Non-Western Perspectives&lt;/h2&gt;
&lt;p&gt;In contrast to the way Western culture treats mental health and integration as personal, non-communal concepts requiring one to look into the individual self for healing and change, most societies outside the West have long traditions of approaching what we call mental illness with holistic healing methods that incorporate spiritual, physical, and social balance with communal support (&lt;a href=&quot;#ref-burns-2015&quot; id=&quot;cite-burns-2015-1&quot; class=&quot;cite&quot;&gt;Burns &amp;amp; Tomita, 2015&lt;/a&gt;; &lt;a href=&quot;#ref-cruz-2022&quot; id=&quot;cite-cruz-2022-1&quot; class=&quot;cite&quot;&gt;Cruz et al., 2022&lt;/a&gt;; &lt;a href=&quot;#ref-ned-2022&quot; id=&quot;cite-ned-2022-1&quot; class=&quot;cite&quot;&gt;Ned et al., 2022&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;This is also true for the use of psychedelics in these non-Western cultures. In societies where the psychedelic substance and ritual are embedded in a communal, spiritual lifestyle with a deep emphasis on nature and cosmological connection, integration usually isn’t singled out as a distinct “phase,” rather as a natural part of the broader cultural practice. But when Westerners participate in these indigenous rituals – usually through psychedelic tourism – the necessity of the specific integration phase often becomes apparent to preserve the lasting benefits of the experience, lest these often life-changing aspects and purpose of the rituals get quickly lost in the day-to-day grind of the return to modern life in the system (&lt;a href=&quot;#ref-cowley-court-2023&quot; id=&quot;cite-cowley-court-2023-1&quot; class=&quot;cite&quot;&gt;Cowley-Court et al., 2023&lt;/a&gt;; &lt;a href=&quot;#ref-dupuis-2021&quot; id=&quot;cite-dupuis-2021-1&quot; class=&quot;cite&quot;&gt;Dupuis, 2021&lt;/a&gt;; &lt;a href=&quot;#ref-jimenez-garrido-2020&quot; id=&quot;cite-jimenez-garrido-2020-1&quot; class=&quot;cite&quot;&gt;Jiménez-Garrido et al., 2020&lt;/a&gt;; &lt;a href=&quot;#ref-williams-2022&quot; id=&quot;cite-williams-2022-1&quot; class=&quot;cite&quot;&gt;Williams et al., 2022&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Indigenous groups allowing Westerners to participate in their rituals must contend with a dilemma: to cater specifically to these tourists for economic survival in the age of globalization at the cost of potential dilution of their own culture. The so-called and aptly named “psychedelic renaissance” is made possible by neocolonial extractivism, another hallmark of Western neoliberal capitalism that has eerily similar parallels to the European Renaissance also driven through colonialism. Dealing with this dichotomy of participating in these rituals and returning to Western capitalist society can be difficult to resolve and integrate, so one response is to claim “reciprocity” by paying the indigenous groups money and simply acknowledging their cultural practices (&lt;a href=&quot;#ref-dupuis-2021&quot; id=&quot;cite-dupuis-2021-2&quot; class=&quot;cite&quot;&gt;Dupuis, 2021&lt;/a&gt;; &lt;a href=&quot;#ref-williams-2022&quot; id=&quot;cite-williams-2022-2&quot; class=&quot;cite&quot;&gt;Williams et al., 2022&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;But sometimes, reintegration into the Western world after deep psychedelic experiences or rituals can have the effect of individuals entering spiritual bypass, characterized by Picciotto et al. (&lt;a href=&quot;#ref-picciotto-2018&quot; id=&quot;cite-picciotto-2018-1&quot; class=&quot;cite&quot;&gt;2018&lt;/a&gt;) as “a defensive psychological posture cultivated by a tendency to privilege spiritual beliefs or experiences over and against psychological needs creating a means of avoiding or bypassing difficult emotions or experiences” (p. 1).&lt;/p&gt;
&lt;h2 id=&quot;a-societal-spiritual-bypass&quot;&gt;A Societal Spiritual Bypass&lt;/h2&gt;
&lt;p&gt;Western culture tends to secularize science and biochemical mechanisms from materialist, naturalist, and as discussed earlier, Cartesian dualist perspectives. But spirituality is a ubiquitous phenomenon in human life and worldview (&lt;a href=&quot;#ref-lynn-2024&quot; id=&quot;cite-lynn-2024-1&quot; class=&quot;cite&quot;&gt;Lynn &amp;amp; Schell, 2024&lt;/a&gt;). In the current sociopolitical climate of the United States, spirituality has been coopted and weaponized as a tool to push forward neoliberal and right-wing (and particularly Christian) nationalist agendas, abandoning the religious freedom and cultural pluralist ideals long defining the “religious right” until recently (&lt;a href=&quot;#ref-li-2023&quot; id=&quot;cite-li-2023-1&quot; class=&quot;cite&quot;&gt;Li &amp;amp; Froese, 2023&lt;/a&gt;; &lt;a href=&quot;#ref-saiya-2025&quot; id=&quot;cite-saiya-2025-1&quot; class=&quot;cite&quot;&gt;Saiya, 2025&lt;/a&gt;; &lt;a href=&quot;#ref-smidt-2024&quot; id=&quot;cite-smidt-2024-1&quot; class=&quot;cite&quot;&gt;Smidt, 2024&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The literature rarely uses the term “spiritual bypassing” outside the frame of the individual, which as we’ve explored, is the modus operandi of Western thought and systems. But the societal neoliberal capitalist feedback loop is incentivized to seize the ubiquity of spirituality as a mechanism to perpetuate its insatiable purpose. It has even been convincingly proposed that neoliberalism itself has become its own religion (&lt;a href=&quot;#ref-guest-2022&quot; id=&quot;cite-guest-2022-1&quot; class=&quot;cite&quot;&gt;Guest, 2022&lt;/a&gt;; &lt;a href=&quot;#ref-mavelli-2019&quot; id=&quot;cite-mavelli-2019-1&quot; class=&quot;cite&quot;&gt;Mavelli, 2019&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Given the deep social substrate of humanity, assumptions can be made of disparate human societies operating similarly to how individuals behave (&lt;a href=&quot;#ref-offer-2019&quot; id=&quot;cite-offer-2019-1&quot; class=&quot;cite&quot;&gt;Offer, 2019&lt;/a&gt;; &lt;a href=&quot;#ref-pizarro-2022&quot; id=&quot;cite-pizarro-2022-1&quot; class=&quot;cite&quot;&gt;Pizarro et al., 2022&lt;/a&gt;). It can then naturally be argued that the concept of spiritual bypass can be applied to a society made up of, and beyond, the individual. Therefore, it would also be plausible to say that given the propensity for neoliberal capitalist self-serving ideals to perpetuate economic growth at all costs, such a society would readily employ these avoidant mechanisms to evade facing difficult truths as a defense against its own psychological, or more aptly, sociological “harm” against the perpetuation of the system.&lt;/p&gt;
&lt;h2 id=&quot;reassessing-the-roots-of-distress&quot;&gt;Reassessing the Roots of Distress&lt;/h2&gt;
&lt;p&gt;The mental health crisis in the Western world is a byproduct of the sociopolitical and economic systems that have a self-preserving mandate to remain in power. These structures employ colonialism, extraction, and profiteering to further their goals. Their inherent limitlessness and insatiability force their methods to exploit every aspect of individual and societal existence possible. The medicalization of mental illness, and even the unsupported notion of biochemical causes thereof, is a uniquely Western example of the phenomenon that is rooted in this systemically extractive social machine.&lt;/p&gt;
&lt;p&gt;These exploitations are not limited to cultural phenomena currently or formerly associated with counter-cultural or anti-Western ideals, as is apparent by the commercialization of psychedelics and the creation of standardized, cost-effective ways to commodify and profit from even the peripheral narrative around these substances as in the concept of integration.&lt;/p&gt;
&lt;p&gt;Neoliberalism can be argued to have gone so far as employing evasive tools like spiritual bypassing (verging on spiritual abuse) to distract from the underlying issues caused by the system itself. It creates self-serving concepts such as integration, which as discussed in the psychedelic discourse can be seen as a Western idea created out of the apparent necessity of responding to the discordant struggle of returning to the distressing lifestyle in which it operates. Returning, that is, from experiences that have the ability – and even propensity – to allow individuals to think and act in a way less conducive to existing in these oppressive systems they live in.&lt;/p&gt;
&lt;p&gt;Psychedelic integration as defined by Western epistemology is a characteristic of systemic spiritual bypassing by the dominant, exploitative, extractive system of capitalist neoliberalism that must be challenged by reframing the ailments that PAT claims to treat as caused by these systems themselves, rather than individual “disorders.”&lt;/p&gt;
&lt;p&gt;We must as Western society rethink how we view mental health, psychedelics, and community in service of our own prosperity and cognitive liberty, to refocus the blame on where it truly lies – in the systems that create and perpetuate our distress for their own gain.&lt;/p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;p id=&quot;ref-aday-2023&quot;&gt;Aday, J. S., Barnett, B. S., Grossman, D., Murnane, K. S., Nichols, C. D., &amp;amp; Hendricks, P. S. (2023). Psychedelic commercialization: A wide-spanning overview of the emerging psychedelic industry. &lt;em&gt;Psychedelic Medicine&lt;/em&gt;, &lt;em&gt;1&lt;/em&gt;(3), 150-165. &lt;a href=&quot;https://doi.org/10.1089/psymed.2023.0013&quot;&gt;https://doi.org/10.1089/psymed.2023.0013&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-aday-2023-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-barber-2022&quot;&gt;Barber, G. S., &amp;amp; Aaronson, S. T. (2022). The emerging field of psychedelic psychotherapy. &lt;em&gt;Current Psychiatry Reports&lt;/em&gt;, &lt;em&gt;24&lt;/em&gt;(10), 583-590. &lt;a href=&quot;https://doi.org/10.1007/s11920-022-01363-y&quot;&gt;https://doi.org/10.1007/s11920-022-01363-y&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-barber-2022-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-barber-2025&quot;&gt;Barber, M., Gardner, J., &amp;amp; Carter, A. (2025). History, hype, and responsible psychedelic medicine: A qualitative study of psychedelic researchers. &lt;em&gt;Journal of Bioethical Inquiry&lt;/em&gt;, &lt;em&gt;22&lt;/em&gt;(2), 327-343. &lt;a href=&quot;https://doi.org/10.1007/s11673-024-10386-4&quot;&gt;https://doi.org/10.1007/s11673-024-10386-4&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-barber-2025-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-bathje-2022&quot;&gt;Bathje, G. J., Majeski, E., &amp;amp; Kudowor, M. (2022). Psychedelic integration: An analysis of the concept and its practice. &lt;em&gt;Frontiers in Psychology&lt;/em&gt;, &lt;em&gt;13&lt;/em&gt;, 824077. &lt;a href=&quot;https://doi.org/10.3389/fpsyg.2022.824077&quot;&gt;https://doi.org/10.3389/fpsyg.2022.824077&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-bathje-2022-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩1&lt;/a&gt; &lt;a href=&quot;#cite-bathje-2022-2&quot; aria-label=&quot;back to citation 2 in the text&quot;&gt;↩2&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-buchman-2024&quot;&gt;Buchman, D., &amp;amp; Rosenbaum, D. (2024). Psychedelics in PERIL: The commercial determinants of health, financial entanglements and population health ethics. &lt;em&gt;Public Health Ethics&lt;/em&gt;, &lt;em&gt;17&lt;/em&gt;(1-2), 24-39. &lt;a href=&quot;https://doi.org/10.1093/phe/phae002&quot;&gt;https://doi.org/10.1093/phe/phae002&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-buchman-2024-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-burns-2015&quot;&gt;Burns, J. K., &amp;amp; Tomita, A. (2015). Traditional and religious healers in the pathway to care for people with mental disorders in Africa: A systematic review and meta-analysis. &lt;em&gt;Social Psychiatry and Psychiatric Epidemiology&lt;/em&gt;, &lt;em&gt;50&lt;/em&gt;(6), 867-877. &lt;a href=&quot;https://doi.org/10.1007/s00127-014-0989-7&quot;&gt;https://doi.org/10.1007/s00127-014-0989-7&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-burns-2015-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-butler-2022&quot;&gt;Butler, M., Jelen, L., &amp;amp; Rucker, J. (2022). Expectancy in placebo-controlled trials of psychedelics: If so, so what? &lt;em&gt;Psychopharmacology&lt;/em&gt;, &lt;em&gt;239&lt;/em&gt;(10), 3047-3055. &lt;a href=&quot;https://doi.org/10.1007/s00213-022-06221-6&quot;&gt;https://doi.org/10.1007/s00213-022-06221-6&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-butler-2022-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-cosgrove-2009&quot;&gt;Cosgrove, L., Bursztajn, H. J., &amp;amp; Krimsky, S. (2009). Developing unbiased diagnostic and treatment guidelines in psychiatry. &lt;em&gt;New England Journal of Medicine&lt;/em&gt;, &lt;em&gt;360&lt;/em&gt;(19), 2035-2036. &lt;a href=&quot;https://doi.org/10.1056/NEJMc0810237&quot;&gt;https://doi.org/10.1056/NEJMc0810237&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-cosgrove-2009-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-cowley-court-2023&quot;&gt;Cowley-Court, T., Chenhall, R., Sarris, J., Bouso, J. C., Tófoli, L. F., Opaleye, E. S., Schubert, V., &amp;amp; Perkins, D. (2023). Life after ayahuasca: A qualitative analysis of the psychedelic integration experiences of 1630 ayahuasca drinkers from a global survey. &lt;em&gt;Psychoactives&lt;/em&gt;, &lt;em&gt;2&lt;/em&gt;(2), 201-221. &lt;a href=&quot;https://doi.org/10.3390/psychoactives2020014&quot;&gt;https://doi.org/10.3390/psychoactives2020014&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-cowley-court-2023-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-cruz-2022&quot;&gt;Cruz, M. L., Christie, S., Allen, E., Meza, E., Nápoles, A. M., &amp;amp; Mehta, K. M. (2022). Traditional healers as health care providers for the Latine community in the United States, a systematic review. &lt;em&gt;Health Equity&lt;/em&gt;, &lt;em&gt;6&lt;/em&gt;(1), 412-426. &lt;a href=&quot;https://doi.org/10.1089/heq.2021.0099&quot;&gt;https://doi.org/10.1089/heq.2021.0099&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-cruz-2022-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-davies-2021&quot;&gt;Davies, J. (2021). &lt;em&gt;Sedated: How modern capitalism created our mental health crisis&lt;/em&gt;. Atlantic Books. &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-davies-2021-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩1&lt;/a&gt; &lt;a href=&quot;#cite-davies-2021-2&quot; aria-label=&quot;back to citation 2 in the text&quot;&gt;↩2&lt;/a&gt; &lt;a href=&quot;#cite-davies-2021-3&quot; aria-label=&quot;back to citation 3 in the text&quot;&gt;↩3&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-dupuis-2021&quot;&gt;Dupuis, D. (2021). Psychedelics as tools for belief transmission. Set, setting, suggestibility, and persuasion in the ritual use of hallucinogens. &lt;em&gt;Frontiers in Psychology&lt;/em&gt;, &lt;em&gt;12&lt;/em&gt;. &lt;a href=&quot;https://doi.org/10.3389/fpsyg.2021.730031&quot;&gt;https://doi.org/10.3389/fpsyg.2021.730031&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-dupuis-2021-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩1&lt;/a&gt; &lt;a href=&quot;#cite-dupuis-2021-2&quot; aria-label=&quot;back to citation 2 in the text&quot;&gt;↩2&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-first-2012&quot;&gt;First, M. B. (2012). The development of DSM-III from a historical/conceptual perspective. In K. S. Kendler &amp;amp; J. Parnas (Eds.), &lt;em&gt;Philosophical issues in psychiatry II: Nosology&lt;/em&gt;. Oxford University Press. &lt;a href=&quot;https://doi.org/10.1093/med/9780199642205.003.0020&quot;&gt;https://doi.org/10.1093/med/9780199642205.003.0020&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-first-2012-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-francey-2000&quot;&gt;Francey, N., &amp;amp; Chapman, S. (2000). “Operation Berkshire”: The international tobacco companies’ conspiracy. &lt;em&gt;BMJ: British Medical Journal&lt;/em&gt;, &lt;em&gt;321&lt;/em&gt;(7257), 371-374. &lt;a href=&quot;https://doi.org/10.1136/bmj.321.7257.371&quot;&gt;https://doi.org/10.1136/bmj.321.7257.371&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-francey-2000-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-guest-2022&quot;&gt;Guest, M. (2022). &lt;em&gt;Neoliberal religion: Faith and power in the twenty-first century&lt;/em&gt; (1st ed.). Bloomsbury Academic. &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-guest-2022-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-haft-2025&quot;&gt;Haft, S. L., Downey, A. E., Raymond-Flesch, M., Fernandes-Osterhold, G., Bradley, E. R., O’Donovan, A., &amp;amp; Woolley, J. (2025). A systematic review of participant diversity in psychedelic-assisted psychotherapy trials. &lt;em&gt;Psychiatry Research&lt;/em&gt;, &lt;em&gt;345&lt;/em&gt;, 116359. &lt;a href=&quot;https://doi.org/10.1016/j.psychres.2025.116359&quot;&gt;https://doi.org/10.1016/j.psychres.2025.116359&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-haft-2025-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-hovmand-2023&quot;&gt;Hovmand, O. R., Poulsen, E. D., Arnfred, S., &amp;amp; Storebø, O. J. (2023). Risk of bias in randomized clinical trials on psychedelic medicine: A systematic review. &lt;em&gt;Journal of Psychopharmacology&lt;/em&gt;, &lt;em&gt;37&lt;/em&gt;(7), 649-659. &lt;a href=&quot;https://doi.org/10.1177/02698811231180276&quot;&gt;https://doi.org/10.1177/02698811231180276&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-hovmand-2023-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-jimenez-garrido-2020&quot;&gt;Jiménez-Garrido, D. F., Gómez-Sousa, M., Ona, G., Dos Santos, R. G., Hallak, J. E. C., Alcázar-Córcoles, M. Á., &amp;amp; Bouso, J. C. (2020). Effects of ayahuasca on mental health and quality of life in naïve users: A longitudinal and cross-sectional study combination. &lt;em&gt;Scientific Reports&lt;/em&gt;, &lt;em&gt;10&lt;/em&gt;(1), 4075. &lt;a href=&quot;https://doi.org/10.1038/s41598-020-61169-x&quot;&gt;https://doi.org/10.1038/s41598-020-61169-x&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-jimenez-garrido-2020-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-li-2023&quot;&gt;Li, R., &amp;amp; Froese, P. (2023). The duality of American Christian nationalism: Religious traditionalism versus Christian statism. &lt;em&gt;Journal for the Scientific Study of Religion&lt;/em&gt;, &lt;em&gt;62&lt;/em&gt;(4), 770-801. &lt;a href=&quot;https://doi.org/10.1111/jssr.12868&quot;&gt;https://doi.org/10.1111/jssr.12868&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-li-2023-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-lynn-2024&quot;&gt;Lynn, C., &amp;amp; Schell, L. (2024). Why religion and spirituality are important in human biological research. &lt;em&gt;American Journal of Human Biology&lt;/em&gt;, &lt;em&gt;36&lt;/em&gt;, e24106. &lt;a href=&quot;https://doi.org/10.1002/ajhb.24106&quot;&gt;https://doi.org/10.1002/ajhb.24106&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-lynn-2024-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-marseille-2020&quot;&gt;Marseille, E., Kahn, J. G., Yazar-Klosinski, B., &amp;amp; Doblin, R. (2020). The cost-effectiveness of MDMA-assisted psychotherapy for the treatment of chronic, treatment-resistant PTSD. &lt;em&gt;PLOS ONE&lt;/em&gt;, &lt;em&gt;15&lt;/em&gt;(10), e0239997. &lt;a href=&quot;https://doi.org/10.1371/journal.pone.0239997&quot;&gt;https://doi.org/10.1371/journal.pone.0239997&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-marseille-2020-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-mavelli-2019&quot;&gt;Mavelli, L. (2019). Neoliberalism as religion: Sacralization of the market and post-truth politics. &lt;em&gt;International Political Sociology&lt;/em&gt;. &lt;a href=&quot;https://doi.org/10.1093/ips/olz021&quot;&gt;https://doi.org/10.1093/ips/olz021&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-mavelli-2019-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-mitchell-2021&quot;&gt;Mitchell, J. M., Bogenschutz, M., Lilienstein, A., Harrison, C., Kleiman, S., Parker-Guilbert, K., Ot’alora G., M., Garas, W., Paleos, C., Gorman, I., Nicholas, C., Mithoefer, M., Carlin, S., Poulter, B., Mithoefer, A., Quevedo, S., Wells, G., Klaire, S. S., van der Kolk, B., … Doblin, R. (2021). MDMA-assisted therapy for severe PTSD: A randomized, double-blind, placebo-controlled phase 3 study. &lt;em&gt;Nature Medicine&lt;/em&gt;, &lt;em&gt;27&lt;/em&gt;(6), 1025-1033. &lt;a href=&quot;https://doi.org/10.1038/s41591-021-01336-3&quot;&gt;https://doi.org/10.1038/s41591-021-01336-3&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-mitchell-2021-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-muthukumaraswamy-2025&quot;&gt;Muthukumaraswamy, S. D., Baggott, M. J., Schenberg, E. E., Repantis, D., Wolff, M., Forsyth, A., &amp;amp; Noorani, T. (2025). Psychedelic-assisted therapy as a complex intervention: Implications for clinical trial design. &lt;em&gt;Therapeutic Advances in Psychopharmacology&lt;/em&gt;, &lt;em&gt;15&lt;/em&gt;, 20451253251381074. &lt;a href=&quot;https://doi.org/10.1177/20451253251381074&quot;&gt;https://doi.org/10.1177/20451253251381074&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-muthukumaraswamy-2025-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-national-institute-of-mental-health-2022&quot;&gt;National Institute of Mental Health. (2022). &lt;em&gt;Mental illness&lt;/em&gt;. &lt;a href=&quot;https://www.nimh.nih.gov/health/statistics/mental-illness&quot;&gt;https://www.nimh.nih.gov/health/statistics/mental-illness&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-national-institute-of-mental-health-2022-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-ned-2022&quot;&gt;Ned, L., Kpobi, L., &amp;amp; Ohajunwa, C. (2022). Thinking about mental health and spirituality from the Indigenous knowledge systems frame of reference. &lt;em&gt;Disability Studies Quarterly&lt;/em&gt;, &lt;em&gt;41&lt;/em&gt;(4). &lt;a href=&quot;https://doi.org/10.18061/dsq.v41i4.8450&quot;&gt;https://doi.org/10.18061/dsq.v41i4.8450&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-ned-2022-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-offer-2019&quot;&gt;Offer, J. (2019). Herbert Spencer, sociological theory, and the professions. &lt;em&gt;Frontiers in Sociology&lt;/em&gt;, &lt;em&gt;4&lt;/em&gt;. &lt;a href=&quot;https://doi.org/10.3389/fsoc.2019.00077&quot;&gt;https://doi.org/10.3389/fsoc.2019.00077&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-offer-2019-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-paulose-ram-2004&quot;&gt;Paulose-Ram, R., Jonas, B. S., Orwig, D., &amp;amp; Safran, M. A. (2004). Prescription psychotropic medication use among the U.S. adult population: Results from the third National Health and Nutrition Examination Survey, 1988-1994. &lt;em&gt;Journal of Clinical Epidemiology&lt;/em&gt;, &lt;em&gt;57&lt;/em&gt;(3), 309-317. &lt;a href=&quot;https://doi.org/10.1016/j.jclinepi.2003.05.001&quot;&gt;https://doi.org/10.1016/j.jclinepi.2003.05.001&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-paulose-ram-2004-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-picciotto-2018&quot;&gt;Picciotto, G., Fox, J., &amp;amp; Neto, F. (2018). A phenomenology of spiritual bypass: Causes, consequences, and implications. &lt;em&gt;Journal of Spirituality in Mental Health&lt;/em&gt;, &lt;em&gt;20&lt;/em&gt;(4), 333-354. &lt;a href=&quot;https://doi.org/10.1080/19349637.2017.1417756&quot;&gt;https://doi.org/10.1080/19349637.2017.1417756&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-picciotto-2018-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-pilecki-2021&quot;&gt;Pilecki, B., Luoma, J. B., Bathje, G. J., Rhea, J., &amp;amp; Narloch, V. F. (2021). Ethical and legal issues in psychedelic harm reduction and integration therapy. &lt;em&gt;Harm Reduction Journal&lt;/em&gt;, &lt;em&gt;18&lt;/em&gt;, 40. &lt;a href=&quot;https://doi.org/10.1186/s12954-021-00489-1&quot;&gt;https://doi.org/10.1186/s12954-021-00489-1&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-pilecki-2021-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-pizarro-2022&quot;&gt;Pizarro, J. J., Zumeta, L. N., Bouchat, P., Włodarczyk, A., Rimé, B., Basabe, N., Amutio, A., &amp;amp; Páez, D. (2022). Emotional processes, collective behavior, and social movements: A meta-analytic review of collective effervescence outcomes during collective gatherings and demonstrations. &lt;em&gt;Frontiers in Psychology&lt;/em&gt;, &lt;em&gt;13&lt;/em&gt;. &lt;a href=&quot;https://doi.org/10.3389/fpsyg.2022.974683&quot;&gt;https://doi.org/10.3389/fpsyg.2022.974683&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-pizarro-2022-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-rosenblat-2024&quot;&gt;Rosenblat, J. D., Meshkat, S., Doyle, Z., Kaczmarek, E., Brudner, R. M., Kratiuk, K., Mansur, R. B., Schulz-Quach, C., Sethi, R., Abate, A., Ali, S., Bawks, J., Blainey, M. G., Brietzke, E., Cronin, V., Danilewitz, J., Dhawan, S., Di Fonzo, A., Di Fonzo, M., … McIntyre, R. S. (2024). Psilocybin-assisted psychotherapy for treatment resistant depression: A randomized clinical trial evaluating repeated doses of psilocybin. &lt;em&gt;Med&lt;/em&gt;, &lt;em&gt;5&lt;/em&gt;(3), 190-200.e5. &lt;a href=&quot;https://doi.org/10.1016/j.medj.2024.01.005&quot;&gt;https://doi.org/10.1016/j.medj.2024.01.005&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-rosenblat-2024-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-saiya-2025&quot;&gt;Saiya, N. (2025). The varieties of American Christian nationalism. &lt;em&gt;Politics and Religion&lt;/em&gt;, &lt;em&gt;18&lt;/em&gt;(2), 171-189. &lt;a href=&quot;https://doi.org/10.1017/S1755048325000069&quot;&gt;https://doi.org/10.1017/S1755048325000069&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-saiya-2025-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-sanabria-2025&quot;&gt;Sanabria, E., &amp;amp; Tófoli, L. F. (2025). Integration or commodification? A critical review of individual-centered approaches in psychedelic healing. &lt;em&gt;Journal of Psychedelic Studies&lt;/em&gt;, &lt;em&gt;9&lt;/em&gt;(3), 202-211. &lt;a href=&quot;https://doi.org/10.1556/2054.2024.00411&quot;&gt;https://doi.org/10.1556/2054.2024.00411&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-sanabria-2025-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-sanborn-2023&quot;&gt;Sanborn, M., Ali, M. M., &amp;amp; Creedon, T. B. (2023). National trends in psychotropic medication prescribing before and during the COVID-19 pandemic. &lt;em&gt;Psychiatry Research&lt;/em&gt;, &lt;em&gt;325&lt;/em&gt;, 115248. &lt;a href=&quot;https://doi.org/10.1016/j.psychres.2023.115248&quot;&gt;https://doi.org/10.1016/j.psychres.2023.115248&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-sanborn-2023-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-sanchez-petrement-2023&quot;&gt;Sanchez Petrement, M. (2023). Historicizing psychedelics: Counterculture, renaissance, and the neoliberal matrix. &lt;em&gt;Frontiers in Sociology&lt;/em&gt;, &lt;em&gt;8&lt;/em&gt;, 1114523. &lt;a href=&quot;https://doi.org/10.3389/fsoc.2023.1114523&quot;&gt;https://doi.org/10.3389/fsoc.2023.1114523&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-sanchez-petrement-2023-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩1&lt;/a&gt; &lt;a href=&quot;#cite-sanchez-petrement-2023-2&quot; aria-label=&quot;back to citation 2 in the text&quot;&gt;↩2&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-singh-2025&quot;&gt;Singh, B. (2025). MDMA-assisted therapy for post-traumatic stress disorder: Regulatory challenges and a path forward. &lt;em&gt;CNS Drugs&lt;/em&gt;, &lt;em&gt;39&lt;/em&gt;(4), 339-343. &lt;a href=&quot;https://doi.org/10.1007/s40263-025-01162-y&quot;&gt;https://doi.org/10.1007/s40263-025-01162-y&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-singh-2025-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-smidt-2024&quot;&gt;Smidt, C. E. (2024). Christian nationalism, civic republicanism, and radical secularism in contemporary American politics over time. &lt;em&gt;Religions&lt;/em&gt;, &lt;em&gt;15&lt;/em&gt;(11), 1364. &lt;a href=&quot;https://doi.org/10.3390/rel15111364&quot;&gt;https://doi.org/10.3390/rel15111364&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-smidt-2024-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-stafford-2001&quot;&gt;Stafford, R. S., MacDonald, E. A., &amp;amp; Finkelstein, S. N. (2001). National patterns of medication treatment for depression, 1987 to 2001. &lt;em&gt;Primary Care Companion to the Journal of Clinical Psychiatry&lt;/em&gt;, &lt;em&gt;3&lt;/em&gt;(6), 232-235. &lt;a href=&quot;https://doi.org/10.4088/pcc.v03n0611&quot;&gt;https://doi.org/10.4088/pcc.v03n0611&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-stafford-2001-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-williams-2022&quot;&gt;Williams, K., Romero, O. S. G., Braunstein, M., &amp;amp; Brant, S. (2022). Indigenous philosophies and the “psychedelic renaissance.” &lt;em&gt;Anthropology of Consciousness&lt;/em&gt;, &lt;em&gt;33&lt;/em&gt;(2), 506-527. &lt;a href=&quot;https://doi.org/10.1111/anoc.12161&quot;&gt;https://doi.org/10.1111/anoc.12161&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-williams-2022-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩1&lt;/a&gt; &lt;a href=&quot;#cite-williams-2022-2&quot; aria-label=&quot;back to citation 2 in the text&quot;&gt;↩2&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;ref-yoo-2025&quot;&gt;Yoo, M., &amp;amp; Sakopoulos, S. (2025). The birth of the psychedelic industry: Capitalising on the psychedelic renaissance. &lt;em&gt;Future Humanities&lt;/em&gt;, &lt;em&gt;3&lt;/em&gt;(1), e70004. &lt;a href=&quot;https://doi.org/10.1002/fhu2.70004&quot;&gt;https://doi.org/10.1002/fhu2.70004&lt;/a&gt; &lt;span class=&quot;cite-backs&quot;&gt; &lt;a href=&quot;#cite-yoo-2025-1&quot; aria-label=&quot;back to citation 1 in the text&quot;&gt;↩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</content:encoded></item><item><title>Introducing my &quot;now page&quot;</title><link>https://elliotec.com/introducing-the-now-page/</link><guid isPermaLink="true">https://elliotec.com/introducing-the-now-page/</guid><pubDate>Mon, 13 Nov 2023 06:42:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;whats-a-now-page&quot;&gt;What’s a now page?&lt;/h2&gt;
&lt;p&gt;It’s a movement started and popularized by &lt;a href=&quot;https://sive.rs/&quot;&gt;Derek Sivers&lt;/a&gt; - &lt;a href=&quot;https://nownownow.com/about&quot;&gt;learn all about it at this link&lt;/a&gt;. In short, it’s a page that tells the world what’s going on with me at this point in my life. I’m using it as double duty for it’s own sake as well as for an “about” page for now, but that will come too eventually.&lt;/p&gt;
&lt;h2 id=&quot;why-now&quot;&gt;Why now?&lt;/h2&gt;
&lt;p&gt;I’ve been wanting to update my site for a while, and meaning to do the now page in particular since I found out about it in like 2016. Now that I have some motivation and help with childcare, the time is right for updating this site, and a now page seemed like a natural place to start because a lot of time has passed since my last post here.&lt;/p&gt;
&lt;h2 id=&quot;where-is-it&quot;&gt;Where is it?&lt;/h2&gt;
&lt;p&gt;My now page will have a permalink at &lt;a href=&quot;https://elliotec.com/now&quot;&gt;elliotec.com/now&lt;/a&gt;. The first update ever goes out today with this post, and I don’t know if or how I plan to archive updates to it (aside from git I suppose), so I’m going to post the contents of the first update below.&lt;/p&gt;
&lt;h2 id=&quot;first-update&quot;&gt;First update:&lt;/h2&gt;
&lt;p&gt;Updated November 12, 2023, from my home in Salt Lake City.&lt;/p&gt;
&lt;h2 id=&quot;work&quot;&gt;Work&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;For my day job, I work as a &lt;strong&gt;&lt;em&gt;Director of Engineering at &lt;a href=&quot;https://ezcater.com&quot;&gt;ezCater&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;, the largest online marketplace for catering and corporate food solutions. I’ve been in this role for a bit over a year now, and it’s a blast.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;My primary focus is overseeing the Demand Product Engineering organization building the ecommerce marketplace, ML-powered recommendation engines, and account management tools for our highest value customers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I spend most of my time setting and communicating the vision for technical strategy on company product development goals, their execution plans, portfolio stewardship, and org design.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I work remotely and go to the headquarters in Boston for a few days every couple months.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;home&quot;&gt;Home&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;My wife and I (and a bunch of contractors) completed a &lt;strong&gt;&lt;em&gt;major house addition and remodel&lt;/em&gt;&lt;/strong&gt;. We started design in mid 2020 and moved in early 2023. It took longer and was more expensive than expected, but we are very happy with the result.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;We have a daughter!&lt;/em&gt;&lt;/strong&gt; She’s 2 now, and the best thing in the world. This is the realest reason why I haven’t made any posts on this site lately. She’s where I spend most of my time, but it’s time well spent. We had an Au Pair from Germany move in a month ago to help out, and it’s been amazing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We’ve been traveling a ton. Roughly 12 countries in Asia, Europe, and Oceania, and about the same number of US states over the past few years. Covid lockdowns and living in a very small house with 2 dogs, a cat, and a baby during the remodel gave us some serious cabin fever.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;self&quot;&gt;Self&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;I’ve been &lt;strong&gt;&lt;em&gt;studying German in earnest&lt;/em&gt;&lt;/strong&gt; for the last 5 years. I’ve had a teacher from Vienna during this time who I’ve been meeting with weekly. I’m relatively fluent now. My wife’s family is from Austria and Switzerland, so they all speak German, and we’re teaching it to our daughter.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I started the &lt;strong&gt;&lt;em&gt;Keto&lt;/em&gt;&lt;/strong&gt; diet in mid-2022 for brain health and lost a bunch of excess covid weight too. It remains my primary diet, though I ditch it now and then for vacations and special occasions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I’ve been working with a personal trainer over the past few months to improve strength and especially mobility, inspired by reading Peter Atilla’s book &lt;a href=&quot;https://peterattiamd.com/outlive/&quot;&gt;Outlive&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I’ve taken most of the month of November off of alcohol, until Thanksgiving. I do this once or twice a year. It’s a lot easier with the buddy system, and my friend &lt;a href=&quot;https://squidtree.com&quot;&gt;Shaine&lt;/a&gt; has joined me this time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Oneironautics&quot;&gt;Oneironautics&lt;/a&gt; - I’ve found a renewed interest in &lt;strong&gt;&lt;em&gt;dreams and lucid dreaming&lt;/em&gt;&lt;/strong&gt; lately, inspired by the books &lt;a href=&quot;https://www.goodreads.com/en/book/show/26485097&quot;&gt;“Dream Yoga”&lt;/a&gt; and &lt;a href=&quot;https://www.goodreads.com/book/show/316781.Exploring_the_World_of_Lucid_Dreaming&quot;&gt;“Exploring the World of Lucid Dreaming”&lt;/a&gt;. I’ve made a lot of progress and use the app &lt;a href=&quot;https://apps.apple.com/us/app/shape-lucid-dream-coach/id1577026266&quot;&gt;Shape&lt;/a&gt; as a helpful tool for dream journaling and state checks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I got a bunch of cool tattoos :D&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;hobbies&quot;&gt;Hobbies&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Pickleball!&lt;/em&gt;&lt;/strong&gt; A group of friends have been playing roughly weekly for most of this year. It’s super fun and we’re getting better.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;My &lt;a href=&quot;https://www.synology.com/en-us/products/DS723+&quot;&gt;Synology NAS&lt;/a&gt;. Inspired by my previously mentioned friend Shaine and the idea of &lt;strong&gt;&lt;em&gt;Tech Independence&lt;/em&gt;&lt;/strong&gt;, I’ve been developing and improving it, usually with Shaine’s help and not enough documenting of the process, for a few years. I use it for a number of things, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A file store, network-wide accessible media server, and Dropbox replacement, including auto-uploading pictures from my phone&lt;/li&gt;
&lt;li&gt;A note-taking center, &lt;a href=&quot;https://www.buildingasecondbrain.com/&quot;&gt;Second Brain&lt;/a&gt; style (with Neovim,Vimwiki, and &lt;a href=&quot;https://1writerapp.com/&quot;&gt;1Writer&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Self-hosted privacy front ends for Youtube and Google with &lt;a href=&quot;https://invidious.io/&quot;&gt;Invidious&lt;/a&gt; and &lt;a href=&quot;https://github.com/benbusby/whoogle-search&quot;&gt;Whoogle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pi-hole.net/&quot;&gt;Pi-hole&lt;/a&gt; for network-level tracker and ad blocking, DNS sinkhole, and DHCP server&lt;/li&gt;
&lt;li&gt;An RSS/Atom feed aggregator and reader with &lt;a href=&quot;https://freshrss.org/index.html&quot;&gt;FreshRSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A Minecraft server that my friends wanted but haven’t used yet&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nginxproxymanager.com/&quot;&gt;Nginx Proxy Manager&lt;/a&gt; so all these things can have domain names and SSL within my network&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.synology.com/en-global/surveillance&quot;&gt;Surveillance Station&lt;/a&gt; with Reolink PoE cameras for my home security system&lt;/li&gt;
&lt;li&gt;My primary &lt;a href=&quot;https://www.synology.com/en-global/dsm/feature/mailplus&quot;&gt;email server&lt;/a&gt;, and hopefully soon personal calendar as well&lt;/li&gt;
&lt;li&gt;Not yet hosting this site, but that’s the next goal&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href=&quot;https://onewheel.com/&quot;&gt;OneWheel&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;. I got a Pint early-pandemic, and recently upgraded to the GT as a birthday present from my wife this year. I love that thing. I have clocked about 150 miles on it in 2 months, and counting. It’s like snowboarding (my winter hobby), but you can go uphill and all around the city.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Music. I play &lt;strong&gt;&lt;em&gt;guitar or drums&lt;/em&gt;&lt;/strong&gt; almost every day that I’m home, and started self-directed piano courses with &lt;a href=&quot;https://flowkey&quot;&gt;Flowkey&lt;/a&gt;. I travel a lot and have been thinking about portable ways to make music, carting around my harmonica before realizing I’m in a hotel room and nobody in the building wants to hear that. I’ve started playing around with Garageband on the iPad and would like to see where I can get with it.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;reading&quot;&gt;Reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Recently finished the audiobook for &lt;a href=&quot;https://www.goodreads.com/book/show/21343.The_Five_Dysfunctions_of_a_Team&quot;&gt;The Five Dysfunctions of a Team&lt;/a&gt; for work&lt;/li&gt;
&lt;li&gt;Constantly referring to &lt;a href=&quot;https://www.goodreads.com/book/show/44135420-team-topologies&quot;&gt;Team Topologies&lt;/a&gt; at work&lt;/li&gt;
&lt;li&gt;Started listening to the &lt;a href=&quot;https://www.goodreads.com/book/show/25499718-children-of-time&quot;&gt;Children of Time series&lt;/a&gt; (again) at my wife’s persistent request&lt;/li&gt;
&lt;li&gt;Started reading &lt;a href=&quot;https://www.goodreads.com/book/show/530415.The_Art_of_Doing_Science_and_Engineering&quot;&gt;The Art of Doing Science and Engineering&lt;/a&gt; (again) with more diligence&lt;/li&gt;
&lt;li&gt;Began flipping through physical copies of &lt;a href=&quot;https://www.goodreads.com/book/show/23503006-unflattening&quot;&gt;Unflattening&lt;/a&gt; and &lt;a href=&quot;https://howtorebuildcivilization.com/products/the-book&quot;&gt;The Book&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I started using &lt;a href=&quot;https://howtorebuildcivilization.com/products/the-book&quot;&gt;Libro.fm&lt;/a&gt; for audiobooks to replace Audible, and my Kindle library is so huge it’s daunting to look for an alternative for e-books but I want one.&lt;/li&gt;
&lt;li&gt;I also want to start updating and reviewing on my &lt;a href=&quot;https://www.goodreads.com/user/show/11256894&quot;&gt;Goodreads account&lt;/a&gt; again, maybe I’ll get around to it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;this-website&quot;&gt;This website&lt;/h2&gt;
&lt;p&gt;This website has existed roughly in it’s current form for over a decade. I’ve had a bunch of thoughts around building my own SSG for the sake of it, but honestly &lt;strong&gt;&lt;em&gt;the current set up is still working very well&lt;/em&gt;&lt;/strong&gt; and it’s tough to justify a change. Maybe I’ll do some design updates, and definitely will move the server to my NAS from Digital Ocean. Other than that, I’m going to try to update this page and make more posts. See ya soon!&lt;/p&gt;
</content:encoded></item><item><title>Can&apos;t end 2020 without a single blog post!</title><link>https://elliotec.com/cant-end-2020-without/</link><guid isPermaLink="true">https://elliotec.com/cant-end-2020-without/</guid><pubDate>Fri, 01 Jan 2021 05:11:00 GMT</pubDate><content:encoded>&lt;p&gt;So here it is.&lt;/p&gt;
</content:encoded></item><item><title>Greenery - A Bash script to get all the green squares on Github</title><link>https://elliotec.com/greenery-a-bash-script-to-get-all-the-green-squares-on-github/</link><guid isPermaLink="true">https://elliotec.com/greenery-a-bash-script-to-get-all-the-green-squares-on-github/</guid><pubDate>Wed, 20 Mar 2019 20:52:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;get-that-green&quot;&gt;Get that green&lt;/h2&gt;
&lt;img src=&quot;/images/pusher.png&quot; alt=&quot;green squares&quot; width=&quot;1910&quot; height=&quot;450&quot; loading=&quot;eager&quot; decoding=&quot;async&quot;/&gt;
&lt;p&gt;&lt;em&gt;Heh, 4,303 contributions? Yeah…&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I remember when first starting out in development, people would tell me that hiring managers and recruiters &lt;em&gt;really cared&lt;/em&gt; about those little green contribution squares on Github. It shows how active you are, they said. The more squares you have the better, they told me.&lt;/p&gt;
&lt;p&gt;At first I believed them and genuinely tried to commit code near-daily to make sure my public image at least seemed prolific enough to be noticed. Pretty quickly I realized how easily this could be automated. I didn’t think much about how to do that yet, and it felt a bit dirty, especially when I was looking for my first dev job.&lt;/p&gt;
&lt;p&gt;With a bit more experience and a few fewer shits to give, I figured I’d give it a shot for a little scripting practice and fun.&lt;/p&gt;
&lt;h2 id=&quot;greenery&quot;&gt;Greenery&lt;/h2&gt;
&lt;p&gt;The first thing I needed was some content to actually commit. The obvious choice was Unix’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Fortune_(Unix)&quot;&gt;&lt;code&gt;fortune&lt;/code&gt;&lt;/a&gt;, which generates a pseudorandom quote based on parameters you give it. I used shorter fortunes for commit messages and longer ones for the file contents.&lt;/p&gt;
&lt;p&gt;Then I needed to write the script to automatically generate the files based on the fortunes, commit a random number of changes daily (for the different shades of green on the squares), and push them to a Github repo. Nothing a tiny bash script and cron job can’t handle.&lt;/p&gt;
&lt;p&gt;There are 6 files involved in this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;README.md&lt;/code&gt; - totally unnecessary. I just use it as a disclaimer to make it clear I’m bullshitting.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;.gitignore&lt;/code&gt; - absolutely essential to ignore the file which contains your Github credentials, in my case &lt;code&gt;push.sh&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;file.txt&lt;/code&gt; - the only file that ever changes, contents are replaced by the fortune command on each commit.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;committed.sh&lt;/code&gt; - the file that generates the fortunes, replaces the contents of &lt;code&gt;file.txt&lt;/code&gt;, and commits up to &lt;a href=&quot;https://en.wikipedia.org/wiki/23_enigma&quot;&gt;23&lt;/a&gt; (but no fewer than 1) changes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#758575DD&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;NUMBER&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=$((&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;$RANDOM&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt; % 23&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; ((&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; &amp;#x3C;=&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; NUMBER&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  echo&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; `&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;/usr/games/fortune&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; ~/greenery/file.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;  /usr/bin/git&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; ~/greenery/&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; -A&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;  /usr/bin/git&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; ~/greenery/&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; -m&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;/usr/games/fortune&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; -sn&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 32&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;done&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;&lt;code&gt;push.sh&lt;/code&gt; - the file that runs the &lt;code&gt;committed&lt;/code&gt; script and pushes to Github with your credentials. &lt;strong&gt;Do not commit this file.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#758575DD&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;bash&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; ~/greenery/committed.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;/usr/bin/git&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; -C&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; ~/greenery&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; push&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; -u&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; https://{MY_GITHUB_USERNAME}:{MY_GITHUB_PASSWORD}@github.com/{MY_GITHUB_USERNAME}/greenery.git&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; master&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;&lt;code&gt;cron.txt&lt;/code&gt; - this is a reference file for the actual cron job run by my server which you can edit in a Unix environment with &lt;code&gt;crontab -e&lt;/code&gt;. Look up how to write cron jobs, here you see I have mine running on the 20th minute of the 16th hour of every day 🔥&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;20 16 * * * bash ~/greenery/push.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That’s it. Super tiny, totally works, totally tricked a recruiter or two maybe.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/elliotec/greenery&quot;&gt;Here’s the repo for reference.&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Building a non-boring 404 page with CSS animations</title><link>https://elliotec.com/building-a-fun-404-page-with-css-animations/</link><guid isPermaLink="true">https://elliotec.com/building-a-fun-404-page-with-css-animations/</guid><pubDate>Fri, 12 Oct 2018 17:17:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;check-out-the-404-page-in-action&quot;&gt;&lt;a href=&quot;https://elliotec.com/floatin-in-space&quot;&gt;Check out the 404 page in action&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&quot;every-site-should-have-a-custom-404-page&quot;&gt;Every site should have a custom 404 page&lt;/h2&gt;
&lt;p&gt;Don’t you hate it when you hit a dead end on a website and you get the ugly and menacing default 404 page? Well yeah it’s usually not that big of a deal but it’s always nice to see something a little more creative.
I wanted to make a 404 page that wasn’t boring but also not too gimmicky. There are &lt;a href=&quot;https://blog.hubspot.com/blog/tabid/6307/bid/33766/10-clever-website-error-messages-from-creative-companies.aspx&quot;&gt;a bunch of clever ideas for these error pages&lt;/a&gt;, so I thought I’d throw in my own take.&lt;/p&gt;
&lt;h2 id=&quot;css-animations-are-hard&quot;&gt;CSS animations are hard&lt;/h2&gt;
&lt;p&gt;I’d been a front end developer for a while, but hadn’t spent much time with CSS animations and they always seemed like a good skill to have at least a baseline knowledge of. Most of the applications I’ve developed haven’t needed much animation aside from a little transition here and there or using a JS library so I wanted to learn how they worked in raw CSS. The 404 page was the perfect opportunity. Turns out they’re more complex than I expected!&lt;/p&gt;
&lt;p&gt;I didn’t really have any ideas on what I wanted to do, so I just started drawing a face in CSS. Another thing I hadn’t done before was create “art” with just HTML and CSS so this was really interesting to me if still very rudimentary. After drawing the face, I wanted to see how I could animate it making facial expressions. That was not easy. I had big ambitions to make the face smile and frown and laugh and cry, but I ended up keeping it simple and having them open and close their mouth in the form of saying “wow,” while shifting their eyes around.&lt;/p&gt;
&lt;p&gt;Then I needed a background. I looked up something like “space CSS animations” and found something to go off of that I could create the illusion of flying through the stars.&lt;/p&gt;
&lt;p&gt;Then it all came together and I animated the face bouncing around the screen, flying through space going in and out of view using different transition techniques. It was fun and funny! So here’s how I did it.&lt;/p&gt;
&lt;h2 id=&quot;the-routing&quot;&gt;The routing&lt;/h2&gt;
&lt;p&gt;First, I had to make sure that any page that is not found will redirect to this page. It’s pretty straight forward with Nginx.&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;/etc/nginx/sites-available/elliotec.com&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;server {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  # a bunch of other config in here...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  location / {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    try_files $uri $uri/ =404;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  error_page 404 /floatin-in-space/index.html&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  location = /floatin-in-space/index.html {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    root /srv/www/elliotec.com/;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    internal;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;the-project-code&quot;&gt;The project code&lt;/h2&gt;
&lt;p&gt;In &lt;code&gt;elliotec.com/floatin-in-space/index.html&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;  body&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    background&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; black&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;headwrap&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    padding&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    -webkit-animation&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt; shrink &lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; ease-in-out&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; infinite&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; alternate&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; both&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    height&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 30&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    width&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 25&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    border&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; solid&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; black&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    border-radius&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    background-color&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; #&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt;ffe0bd&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    -webkit-animation&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt; spin &lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; linear&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; infinite&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    margin&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; auto&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;right-eye&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;left-eye&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    height&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    width&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 3.5&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    border&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; solid&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; black&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    border-radius&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    position&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; relative&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    background-color&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; white&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    -webkit-animation&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt; bounce &lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;.5&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; ease-in-out&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; infinite&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; Alternate&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; both&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;right-eye&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    top&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    left&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 6&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;left-eye&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    top&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    left&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 15&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;left-pupil&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;right-pupil&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    height&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; .6&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    width&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; .6&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    background&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; black&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    border-radius&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    position&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; relative&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    top&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    left&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;nose&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    position&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; relative&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    margin&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; auto&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    top&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 7&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    width&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    height&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    transform&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; rotate&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;95&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;deg&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    -webkit-transform&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; rotate&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;95&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;deg&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    border-right&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; solid&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; black&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    border-bottom&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; solid&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; black&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;mouth&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    height&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    width&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 11&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    border-radius&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    border&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; solid&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; black&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    position&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; relative&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    top&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 11&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    left&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 7&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    background&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; black&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  @&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;media&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;min-width&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 700&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;){&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;      .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;mouth&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;          -webkit-animation&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; ease-in&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; infinite&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; Alternate&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; both&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;      section&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;          -webkit-animation&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt; rise &lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; linear&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; infinite&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; alternate&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  @&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;-webkit-keyframes&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; bounce&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;    0%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      transform&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; scale&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;.7&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      -webkit-transform&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; scale&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;.7&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;    50%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      transform&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; scale&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;1.3&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      -webkit-transform&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; scale&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;1.3&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;    100%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      transform&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; scale&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      -webkit-transform&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; scale&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  @&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;-webkit-keyframes&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; shrink&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;    100%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      transform&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; scale&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;.01&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      -webkit-transform&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; scale&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;.01&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  @&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;-webkit-keyframes&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; open&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;    0%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      height&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; .5&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;    50%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      height&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;    100%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      height&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;em&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  @&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;-webkit-keyframes&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; spin&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;    100%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      -webkit-transform&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; rotate&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;360&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;deg&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  @&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;-webkit-keyframes&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; rise&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;    from&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      margin-top&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      margin-left&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;-80&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;    to&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      margin-top&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      margin-left&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 80&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;  body&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt; section&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;stars&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    overflow&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; hidden&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    position&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; absolute&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    top&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    bottom&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    left&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    right&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;stars&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    background&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; radial-gradient&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; #&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt;ddd&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; rgba&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    background-size&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 200&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 200&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    animation&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt; zoom &lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; infinite&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    opacity&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;stars&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;nth-child&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    background-position&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    animation-delay&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;stars&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;nth-child&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    background-position&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 20&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 60&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    animation-delay&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;stars&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;nth-child&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    background-position&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; -20&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; -30&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    animation-delay&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;stars&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;nth-child&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    background-position&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 40&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; -80&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    animation-delay&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;stars&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;nth-child&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    background-position&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; -20&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 35&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    animation-delay&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  @&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;keyframes&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; zoom&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;    0%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      opacity&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      transform&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; scale&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;0.5&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      animation-timing-function&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; ease-in&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;    85%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      opacity&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      transform&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; scale&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;2.8&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      animation-timing-function&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt; linear&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;    100%&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      opacity&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;      transform&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; scale&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;3.5&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;stars&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;stars&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;stars&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;stars&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;stars&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;stars&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;section&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;headwrap&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;right-eye&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;right-pupil&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;      &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;left-eye&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;        &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;left-pupil&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;      &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;nose&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;mouth&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;section&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And that’s it. Good times.&lt;/p&gt;
</content:encoded></item><item><title>How to Find and Replace Project-wide in Vim</title><link>https://elliotec.com/how-to-find-and-replace-in-project-with-vim/</link><guid isPermaLink="true">https://elliotec.com/how-to-find-and-replace-in-project-with-vim/</guid><pubDate>Sat, 14 Apr 2018 00:03:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;the-problem&quot;&gt;The problem&lt;/h2&gt;
&lt;p&gt;Sometimes one finds themselves with a need to search and replace some text throughout many places in a project. This often happens during a refactor, or when you made a mistake with a CLI code generator (like &lt;code&gt;rails scaffold&lt;/code&gt;), and you accidentally misspell something.&lt;/p&gt;
&lt;p&gt;In most modern IDEs, “find and replace all” is pretty simple - highlight the text, &lt;code&gt;Ctrl-Shift-F&lt;/code&gt;, enter the new text, and hit enter. As you know, Vim does things a little differently.&lt;/p&gt;
&lt;p&gt;You probably are already aware of how to find and replace all text within a file: &lt;code&gt;: %s/text/newText/g&lt;/code&gt; - “within this file, find all instances of &lt;code&gt;text&lt;/code&gt;, and replace it with &lt;code&gt;newText&lt;/code&gt;.”&lt;/p&gt;
&lt;p&gt;But doing so in multiple files at once with just one or two commands has proven difficult until &lt;a href=&quot;https://chrisarcand.com/vims-new-cdo-command/&quot;&gt;Vim 7.4.8 released&lt;/a&gt; the &lt;code&gt;:cdo&lt;/code&gt; and &lt;code&gt;:cfdo&lt;/code&gt; commands. NeoVim with FZF and Ag makes it even easier.&lt;/p&gt;
&lt;h2 id=&quot;the-solution&quot;&gt;The solution&lt;/h2&gt;
&lt;h3 id=&quot;setup&quot;&gt;Setup&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Make sure you’re using &lt;a href=&quot;https://neovim.io/&quot;&gt;Neovim&lt;/a&gt; (or Vim 7.4.8+, but really just use Neovim)&lt;/li&gt;
&lt;li&gt;Install &lt;a href=&quot;https://github.com/junegunn/fzf#installation&quot;&gt;FZF&lt;/a&gt; for the command line and as a &lt;a href=&quot;https://github.com/junegunn/fzf#as-vim-plugin&quot;&gt;vim plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Install &lt;a href=&quot;https://github.com/ggreer/the_silver_searcher&quot;&gt;Ag&lt;/a&gt;, so that it’s available automatically to FZF in vim&lt;/li&gt;
&lt;li&gt;If using iTerm2 on OSX, &lt;a href=&quot;https://github.com/junegunn/fzf.vim/issues/54#issuecomment-350417085&quot;&gt;set the alt/option key to Esc+&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;usage&quot;&gt;Usage&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Search the text you want to change in the current directory and it’s children with &lt;code&gt;:Ag text&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Keep typing to fuzzy filter items&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Select items with &lt;code&gt;alt-a&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Deselect items with &lt;code&gt;alt-d&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Tab&lt;/code&gt; and &lt;code&gt;Shift-Tab&lt;/code&gt; will toggle individual items in the list&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;code&gt;Enter&lt;/code&gt; will populate the quickfix list&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:cfdo %s/text/newText/g | :w&lt;/code&gt; will substitute all instances of &lt;code&gt;text&lt;/code&gt; with &lt;code&gt;newText&lt;/code&gt; that you have selected, and save each file.&lt;/li&gt;
&lt;li&gt;Rejoice.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;You can also make a macro to do cool stuff with &lt;code&gt;:cfdo&lt;/code&gt; rather than just substitution like &lt;code&gt;:cfdo {doCoolStuff} @a&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks to Github user &lt;a href=&quot;https://github.com/trevordmiller&quot;&gt;@trevordmiller&lt;/a&gt; for tips on this.&lt;/p&gt;
</content:encoded></item><item><title>A Hacker News Reader For No Reason - In 5K of Vanilla JS, HTML, &amp; CSS</title><link>https://elliotec.com/a-hacker-news-reader-for-no-reason/</link><guid isPermaLink="true">https://elliotec.com/a-hacker-news-reader-for-no-reason/</guid><pubDate>Sat, 18 Nov 2017 19:23:00 GMT</pubDate><content:encoded>&lt;p&gt;The title is only half true.&lt;/p&gt;
&lt;p&gt;The other night I was thinking about how my experience being fully entrenched in React and the modern JavaScript ecosystem lately might have influenced how I’d write an app by hand in vanilla HTML, CSS, and JS with no libraries or anything.&lt;/p&gt;
&lt;p&gt;Within the same hour I was looking at &lt;a href=&quot;https://news.ycombinator.com/&quot;&gt;Hacker News&lt;/a&gt; and some of it’s reader clients, noting how they all kind of sucked as far as UX (including HN itself - only recently adding comment collapsing and mobile support), and discovered &lt;a href=&quot;https://github.com/HackerNews/API&quot;&gt;the Hacker News API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Clearly this presented an opportunity to build my own HN reader in the lightest way I could - fully client side, no libraries, totally vanilla.&lt;/p&gt;
&lt;p&gt;So I did it in 2 files, 99 lines of JavaScript, and 99 lines of HTML/CSS.&lt;/p&gt;
&lt;p&gt;The files will automatically go through my build script since they’re hosted on this site (&lt;a href=&quot;https://elliotec.com/how-to-get-100-google-page-speed-score/&quot;&gt;as explained here&lt;/a&gt;). The JS is only 4.4 KB in the first place, but minifying it and gzipping it brought it down to 1.5 KB which is pretty significant. The HTML file is 3.5 KB minified and gzipped.&lt;/p&gt;
&lt;p&gt;I’ll save you the arithmetic, that’s a grand total of &lt;em&gt;5 KB&lt;/em&gt; on the initial load.&lt;/p&gt;
&lt;a href=&quot;/hn-no-reason/&quot; target=&apos;_blank&apos;&gt;
    &lt;h2&gt;Go to A Hacker News Reader For No Reason!&lt;/h2&gt;
    &lt;img src=&quot;/images/hn-no-reason.png&quot; alt=&apos;HN App Image&apos; width=&quot;700&quot; height=&quot;492&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; /&gt;
&lt;/a&gt;
&lt;h3 id=&quot;features&quot;&gt;Features&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Gets the top 30 stories in order with their points, just like the front page of HN.&lt;/li&gt;
&lt;li&gt;If the story has a URL, the title will take you to a new tab with the URL, otherwise it will toggle the text content of the story (like Ask, Show, Jobs, etc.).&lt;/li&gt;
&lt;li&gt;If the story has comments, there’s a link to toggle the comments.&lt;/li&gt;
&lt;li&gt;Each comment and their children are collapsible.&lt;/li&gt;
&lt;li&gt;There’s a link to the original story on HN, and to the user that submitted the story or comments.&lt;/li&gt;
&lt;li&gt;Looks decent on all devices.&lt;/li&gt;
&lt;li&gt;Super tiny and pretty fast.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;limitations&quot;&gt;Limitations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Since I’m using modern ECMAScript features, only more modern browsers will support it, but most of my audience is probably fine with that.&lt;/li&gt;
&lt;li&gt;It only shows the top stories - no support for New, Ask, Jobs, etc. unless they’re on the front page. This is not a limitation to me personally since I spend 99% of my HN time just on the front page.&lt;/li&gt;
&lt;li&gt;No login, upvote/downvote, or posting functionality. Unfortunately the HN API doesn’t support this yet, but if/when it does, maybe I’ll try to get all that in with another 99 lines :D&lt;/li&gt;
&lt;li&gt;I’m not a designer. This was styled with my typical aesthetic of a minimal dark theme with green all over. Probably not everyone’s favorite but certainly mine, and it’s mine, so whatever.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;the-code&quot;&gt;The Code&lt;/h3&gt;
&lt;p&gt;I wrote the styles in a &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; tag in &lt;code&gt;index.html&lt;/code&gt;. Since one of the goals I had with this was to keep it super small and light, I characteristically set an arbitrary limit of lines for myself at a number I figured seemed reasonable to finish it within.&lt;/p&gt;
&lt;p&gt;I fudged some of my usual code style guidelines and there were a few times I disrespected the 80-character line rule I prefer to abide by in order to hit the 99 line mark in both files, but nothing too crazy and I’m not crossing any hard bad-practice lines.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/elliotec/hn-no-reason&quot;&gt;You can check out the repo here&lt;/a&gt; -
but since it’s only 99 lines, I’ve posted the contents of JS file below.&lt;/p&gt;
&lt;p&gt;Note the use of several ES6+ features and the resemblance to React and JSX with the templating. Of course, there’s no fancy Virtual DOM or anything here and it’s simply manipulating the DOM as needed. I’m using functional and immutable patterns where applicable, in the parlance of our time.&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; hnBaseUrl&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;https://hacker-news.firebaseio.com/v0&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; state&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; fetchTopStories&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; topStoriesUrl&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; `&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;hnBaseUrl&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/topstories.json&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; fetch&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;topStoriesUrl&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;then&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; response&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;    .&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;then&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; fetchStories&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; fetchStories&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; topStories&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; data&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt; 29&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; storyIds&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; topStories&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;storyId&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; storyUrl&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; `&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;hnBaseUrl&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/item/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;storyId&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;.json&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; fetch&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;storyUrl&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;then&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; response&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;      .&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;then&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; Promise&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;all&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;storyIds&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;then&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;stories&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;    state&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;stories&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; stories&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;    renderStories&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;stories&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; renderStories&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;stories&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; stories&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; userUrl&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; `&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;https://news.ycombinator.com/user?id=&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;by&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; storyItemUrl&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; `&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;https://news.ycombinator.com/item?id=&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; html&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; `&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;      &amp;#x3C;div class=&apos;story&apos; id=&apos;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&apos;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;        &amp;#x3C;h3 class=&apos;title&apos;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;          ${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;url &lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; `&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&amp;#x3C;a href=&apos;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;url&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&apos; target=&apos;_blank&apos;&gt;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&amp;#x3C;/a&gt;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;            :&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; `&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&amp;#x3C;a href=&apos;javascript:void(0)&apos; onclick=&quot;toggleStoryText(&apos;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&apos;)&quot; &gt;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&amp;#x3C;/a&gt;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;        &amp;#x3C;/h3&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;        &amp;#x3C;span class=&apos;score&apos;&gt; &lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;score&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; &amp;#x3C;/span&gt; points by&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;        &amp;#x3C;a href=&apos;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;userUrl&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&apos; target=&apos;_blank&apos; class=&apos;story-by&apos;&gt; &lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;by&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&amp;#x3C;/a&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;        &amp;#x3C;div class=&apos;toggle-view&apos;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;          ${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;kids &lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; `&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;            &amp;#x3C;span&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;              onclick=&quot;fetchOrToggleComments(&apos;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;kids&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&apos;,&apos;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&apos;)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;              class=&apos;comments&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;            &gt; [toggle &lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;descendants&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; comments] &amp;#x3C;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;          :&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;          &amp;#x3C;a href=&apos;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;storyItemUrl&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&apos; target=&apos;_blank&apos; class=&apos;hnLink&apos;&gt;[view on HN]&amp;#x3C;/a&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;        &amp;#x3C;/div&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;        ${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;text &lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;          `&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&amp;#x3C;div class=&apos;storyText&apos; id=&apos;storyText-&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&apos; style=&apos;display:none;&apos;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;            ${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; &amp;#x3C;/div&gt;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;        &amp;#x3C;div id=&apos;comments-&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;story&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&apos; style=&apos;display: block;&apos;&gt;&amp;#x3C;/div&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;      &amp;#x3C;/div&gt; &lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;    document&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;getElementById&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;hn&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;insertAdjacentHTML&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;beforeend&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; html&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; toggleStoryText&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;storyId&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; storyText&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; document&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;getElementById&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;storyText-&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;storyId&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;  storyText&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;storyText&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; ===&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;block&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;none&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;block&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; fetchComments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;kids&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; storyId&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; commentIds&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; kids&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; allComments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; commentIds&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;commentId&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; commentUrl&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; `&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;hnBaseUrl&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/item/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;commentId&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;.json&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; fetch&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;commentUrl&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;then&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; response&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;()).&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;then&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; Promise&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;all&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;allComments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;then&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;comments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;    state&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;storyId&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; comments&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;    renderComments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;comments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; storyId&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; fetchOrToggleComments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;kids&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; storyId&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; toggleAllComments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;storyId&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; allComments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; document&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;getElementById&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;comments-&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;storyId&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;    allComments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;allComments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; ===&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;block&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;none&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;block&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;  state&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;storyId&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; toggleAllComments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;storyId&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; fetchComments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;kids&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; storyId&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; toggleComment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;commentId&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; document&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;getElementById&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;commentId&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; toggle&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; document&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;getElementById&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;toggle-&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;commentId&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;  comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; ===&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;block&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;none&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;block&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;  toggle&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;innerHTML&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;toggle&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;innerHTML&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; ===&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;[ - ]&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;[ + ]&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;[ - ]&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; renderComments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;comments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; storyId&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; comments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; userUrl&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; `&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;https://news.ycombinator.com/user?id=&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;by&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; html&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;deleted&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;dead&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&apos;&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; `&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;      &amp;#x3C;div class=&apos;comment&apos;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;        &amp;#x3C;span&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;          onclick=&apos;toggleComment(&quot;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&quot;)&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;          href=&apos;javascript:void(0)&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;          id=&apos;toggle-&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;          class=&apos;toggle-comment&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;        &gt;[ - ]&amp;#x3C;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;        &amp;#x3C;a href=&apos;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;userUrl&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&apos; class=&apos;comment-by&apos;&gt; &lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;by&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;&amp;#x3C;/a&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;        &amp;#x3C;div id=&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; class=&apos;comment-text&apos; style=&apos;display:block;&apos;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;          ${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;        &amp;#x3C;/div&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;      &amp;#x3C;/div&gt; &lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;    comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;parent&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; storyId&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; ?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;      document&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;getElementById&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;comments-&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;storyId&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;insertAdjacentHTML&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;beforeend&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; html&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;      :&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; document&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;getElementById&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;parent&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;insertAdjacentHTML&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;beforeend&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; html&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;kids&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt; return&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; fetchComments&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;comment&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;kids&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; storyId&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;fetchTopStories&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There you have it. Maybe someone else will also find a reason to use &lt;a href=&quot;https://elliotec.com/hn-no-reason/&quot;&gt;A Hacker News Reader For No Reason&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update 2018-03-04&lt;/em&gt;: This post has been translated into Russian at &lt;a href=&quot;http://clipartmag.com/ru-a-hacker-news-reader-for-no-reason&quot;&gt;clipartmag.com&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>How to Get 100/100 Google Page Speed Score with Middleman and Nginx</title><link>https://elliotec.com/how-to-get-100-google-page-speed-score/</link><guid isPermaLink="true">https://elliotec.com/how-to-get-100-google-page-speed-score/</guid><pubDate>Tue, 17 Oct 2017 18:01:00 GMT</pubDate><content:encoded>&lt;h3 id=&quot;everyone-hates-slow-websites-everyone-likes-fast-websites&quot;&gt;Everyone hates slow websites. Everyone likes fast websites.&lt;/h3&gt;
&lt;p&gt;I recently worked on a Google AMP (Accelerated Mobile Pages) project, which was created to mitigate bloated websites from being at the top of Google results on their mobile web index. I personally think AMP is a &lt;a href=&quot;https://danielmiessler.com/blog/google-amp-not-good-thing/&quot;&gt;bad thing&lt;/a&gt; &lt;a href=&quot;https://daringfireball.net/linked/2017/01/17/schreiber-amp&quot;&gt;for us&lt;/a&gt; but that’s beside the point of this article.&lt;/p&gt;
&lt;p&gt;The point of this article is that you can get a better user experience by just building websites that are fast, and you don’t need to use AMP. But if you wanted to, the methods in this post could also be a good starting point for getting your pages into AMP with minimal effort.&lt;/p&gt;
&lt;p&gt;I use the static site generator Middleman for the front end of the website you’re currently reading, and host it on a Digital Ocean Droplet in an Nginx server, so I’ll give some examples of how I achieved the perfect score in the context of this blog and its stack.&lt;/p&gt;
&lt;h3 id=&quot;google-pagespeed-insights&quot;&gt;Google PageSpeed Insights&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.google.com/speed/pagespeed/insights/&quot;&gt;Google PageSpeed Insights&lt;/a&gt; is a tool Google provides to score the speed of a website based on specific metrics including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Avoid landing page redirects&lt;/li&gt;
&lt;li&gt;Eliminate render-blocking JavaScript and CSS in above-the-fold content&lt;/li&gt;
&lt;li&gt;Enable compression&lt;/li&gt;
&lt;li&gt;Leverage browser caching&lt;/li&gt;
&lt;li&gt;Minify CSS&lt;/li&gt;
&lt;li&gt;Minify HTML&lt;/li&gt;
&lt;li&gt;Minify JavaScript&lt;/li&gt;
&lt;li&gt;Optimize images&lt;/li&gt;
&lt;li&gt;Prioritize visible content&lt;/li&gt;
&lt;li&gt;Reduce server response time&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I wanted a fast website, and I like to get 100% on things occasionally, so I set out on a quest to get elliotec.com the 100/100 score. So I got it. Now I’m going to tell you how to get it.&lt;/p&gt;
&lt;a href=&quot;https://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Felliotec.com&quot;&gt;
    &lt;img src=&quot;/images/pagespeed.png&quot; alt=&quot;Google PageSpeed Insights showing a perfect 100 out of 100 mobile score for elliotec.com&quot; width=&quot;1200&quot; height=&quot;668&quot; loading=&quot;eager&quot; decoding=&quot;async&quot;/&gt;
&lt;/a&gt;
&lt;h3 id=&quot;page-size&quot;&gt;Page size&lt;/h3&gt;
&lt;p&gt;Before getting into any of these rules in particular, lets talk about page size in general.
Make your codebase small. If you don’t need all of Bootstrap’s enormous CSS codebase loading on all your pages, use something lighter and customize up. If you don’t need a bunch of JavaScript on your page, like for a blog, then don’t put it on there. Having a few little fancy animations at the expense of hundreds of milliseconds is usually not worth it to a user. That said, if a core part of the brand or requirements put you in a place where heavy JavaScript is necessary, there are still strategies you can use to keep it slim and fast.&lt;/p&gt;
&lt;h3 id=&quot;client-and-server-control&quot;&gt;Client and Server Control&lt;/h3&gt;
&lt;p&gt;One thing you’ll need to get the 100/100 score is direct control of the front end assets and build tools around them. I used the static site generator Middleman to build this site with my configurations to increase the performance as much as possible. This website has virtually no JavaScript (other than the Squaresend plugin for email), but if I needed it I’d be handling it like the rest of my assets. &lt;a href=&quot;https://github.com/elliotec/ellio2/blob/source/config.rb&quot;&gt;Here’s the link to my full Middleman config.rb&lt;/a&gt; for your reference.&lt;/p&gt;
&lt;p&gt;Additionally, you’ll need full control of the server hosting your files. I use Nginx on Digital Ocean when I want full control of my servers, and since it’s just static files I don’t actually have to setup a database or backend other than the Nginx piece which is where a good chunk of the work here is.&lt;/p&gt;
&lt;h3 id=&quot;breaking-down-the-metrics&quot;&gt;Breaking down the metrics&lt;/h3&gt;
&lt;p&gt;Let’s get into some details now.&lt;/p&gt;
&lt;h5 id=&quot;avoid-landing-page-redirects&quot;&gt;Avoid landing page redirects&lt;/h5&gt;
&lt;p&gt;This first item is mostly self explanatory. You don’t want to land on a page and redirect a user as much as possible. This is relatively common when a desktop site redirects to mobile, and it is very expensive in terms of performance. If possible, build a site that is designed mobile-first and responsive to prevent necessity of redirects to mobile versions of the site.&lt;/p&gt;
&lt;h5 id=&quot;enable-compression&quot;&gt;Enable Compression&lt;/h5&gt;
&lt;p&gt;Here we already need control of the server. Since http supports sending compressed files over the network for faster transfers, we should take advantage of gzipping everything we can before it gets sent to the browser. It’s super easy to enable with Nginx and Middleman. In my global nginx.conf, I have:&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;#nginx.conf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;http {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    sendfile on;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    types_hash_max_size 2048;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    server_names_hash_bucket_size 128;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    include /etc/nginx/mime.types;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    default_type application/octet-stream;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    gzip on;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    gzip_disable &quot;msie6&quot;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    gzip_vary on;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    gzip_proxied any;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    gzip_comp_level 6;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    gzip_buffers 16 8k;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    gzip_http_version 1.1;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    gzip_min_length 256;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/x-font-ttf font/opentype image/svg+xml image/x-icon;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And in my Middleman config:&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ruby&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#758575DD&quot;&gt;# config.rb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;configure &lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt; do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;  activate &lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;gzip&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;leverage-browser-caching&quot;&gt;Leverage browser caching&lt;/h4&gt;
&lt;p&gt;Caching allows the browser to keep downloaded assets for a set period of time so that it doesn’t have to keep downloading the same files over and over. This is again quite easy to do with Nginx by setting expirations for different filetypes, like how I have in my local nginx.conf for this website:&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;#expiry map&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;map $sent_http_content_type $expires {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    default                     off;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    text/html                   epoch;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    text/css                    max;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    application/javascript      max;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    application/x-font-ttf      max;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    application/x-font-otf      max;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    application/font-woff       max;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    application/font-woff2      max;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ~image/                     max;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;server {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	listen 80;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	listen [::]:80;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	server_name elliotec.com www.elliotec.com;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    expires $expires;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    return 301 https://$server_name$request_uri;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can also ensure you are caching only files that haven’t changed by setting unique asset hashes on the filenames, which is done in Middleman with a simple addition to the build config like so:&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ruby&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#758575DD&quot;&gt;# config.rb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;configure &lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt; do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;  activate &lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;asset_hash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;minify-assets&quot;&gt;Minify assets&lt;/h4&gt;
&lt;p&gt;One of the more well known and simple page speed strategies is minifying your assets. Having a build step that minifies your HTML, CSS, and JavaScript is essential in modern web development, but it gets skipped a lot. You can drastically decrease your bundle sizes with minification. In Middleman, all you have to do is put a couple lines in your &lt;code&gt;config.rb&lt;/code&gt; to do the work for you, like this:&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ruby&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#758575DD&quot;&gt;# config.rb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;configure &lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt; do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;  activate &lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;minify_css&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;  activate &lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;minify_javascript&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;  activate &lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;minify_html&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The CSS and JS minification comes free with Middleman, but you’ll have to add &lt;code&gt;gem middleman-minify-html&lt;/code&gt; for the HTML piece which you definitely want even though it wont be giving you as large of gains as the other assets.&lt;/p&gt;
&lt;h4 id=&quot;optimize-images&quot;&gt;Optimize images&lt;/h4&gt;
&lt;p&gt;Images are usually the most expensive files for a browser to download as far as size and speed, so this is one of the areas that you can get some of the most performance gains for the effort. To start out, you’ll usually want to have images at their lowest viable size and quality. Tools like Photoshop have the ability to do a lot of powerful work around this, but you can optimize them even more in a build step using a tool like imageoptim. Of course with Middleman this is pretty effortless. First you’ll want to add &lt;code&gt;gem &apos;middleman-imageoptim&apos;, git: &apos;https://github.com/plasticine/middleman-imageoptim&apos;, branch: &apos;master&apos;&lt;/code&gt; to your gemfile, then:&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ruby&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#758575DD&quot;&gt;# config.rb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;configure &lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt; do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;  activate &lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;imageoptim&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nice, you just shaved a ton of weight off those heavy images.&lt;/p&gt;
&lt;h4 id=&quot;reduce-server-response-time&quot;&gt;Reduce server response time&lt;/h4&gt;
&lt;p&gt;Google has a pretty strict threshold on the acceptable server response time - keep it under 200ms. For a static site like this, that is basically a non-issue. If I were hosting dozens of server blocks on this same Digital Ocean Droplet, they could be fighting for resources and slowing things down so I wouldn’t recommend that. If you have a backend doing DB queries and such, there are numerous other reasons why your server could be slower than the 200ms threshold and you’ll definitely want to spend time analyzing and improving that.&lt;/p&gt;
&lt;h4 id=&quot;prioritize-visible-content&quot;&gt;Prioritize visible content&lt;/h4&gt;
&lt;p&gt;Prioritizing visible content means that the above-the-fold content should be small enough in size to not require additional round trips to the server in order to render. This can be done by doing things like loading third party scripts later, and generally keeping the above-the-fold content small and fast. A lot of the other items in here will help with this, but sometimes it’s really difficult to get this one perfect, especially if you have images as the initial visible content.&lt;/p&gt;
&lt;h4 id=&quot;eliminate-render-blocking-javascript-and-css-in-above-the-fold-content&quot;&gt;Eliminate render-blocking JavaScript and CSS in above-the-fold content&lt;/h4&gt;
&lt;p&gt;This is probably the trickiest item on the list, and it’s related to the previous one. There are a few strategies I used to get this one to pass. One, if you require third party JavaScripts or add the &lt;code&gt;async&lt;/code&gt; attribute to all &lt;code&gt;script&lt;/code&gt; tags like this: &lt;code&gt;&amp;lt;script async src=&quot;main.js&quot;&amp;gt;&lt;/code&gt;, so that external JavaScript files aren’t blocking the loading and rendering of the other content and load asynchronously.&lt;/p&gt;
&lt;p&gt;Then, inline your CSS and JS instead of making external resource calls to them. Doing this by hand would be terrible and ugly, but we have tools to do this for us. There’s a couple steps to get all your assets inlined on your pages.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You’ll first need to add sprockets (&lt;code&gt;gem &apos;middleman-sprockets&apos;&lt;/code&gt;) to your app because we are hijacking Middleman’s asset pipeline.&lt;/li&gt;
&lt;li&gt;Then in your &lt;code&gt;config.rb&lt;/code&gt; add the &lt;code&gt;inline: true&lt;/code&gt; hash to each minify build step like this:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ruby&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#758575DD&quot;&gt;# config.rb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;configure &lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt; do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;  activate &lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;minify_css&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt; inline&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;  activate &lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;minify_javascript&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt; inline&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Last, in your layout template where you pull in your CSS (wherever your &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; tag is probably):&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;&amp;#x3C;%= sprockets.find_asset(&apos;site&apos;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;to_s&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and likewise for any scripts you want to inline, in &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tags of course.&lt;/p&gt;
&lt;p&gt;Finally, I was having a lot of trouble getting the Google Analytics script on my site to not be render-blocking. It was the last thing on the list that I hadn’t achieved, and I was pretty annoyed that I wasn’t seeing that 100/100 score. Since my real goal was the number, and it was clear that my site was pretty fast already, &lt;a href=&quot;https://stackoverflow.com/questions/29162881/pagespeed-insights-99-100-because-of-google-analytics-how-can-i-cache-ga&quot;&gt;I found a silly hack online&lt;/a&gt; to trick the Page Speed Insights tool to ignore the Google Analytics script. If they can contradict themselves I figure I can do this, and You Can Too!&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;navigator&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;userAgent&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;indexOf&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;Speed Insights&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:#CB7676&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#758575DD&quot;&gt;// Your Google Analytics Code Here&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;all-done&quot;&gt;All done!&lt;/h3&gt;
&lt;p&gt;There ya go. If you followed the instructions in this post for your own self-hosted static site, you’ll get 100/100 score on Google Page Speed.
The speed is what matters and that’s good for everyone using your website, and it’s also gotta be good for some SEO, right?&lt;/p&gt;
&lt;p&gt;Join the discussion &lt;a href=&quot;https://news.ycombinator.com/item?id=15516957&quot;&gt;on Hacker News&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update 2018-01-26&lt;/em&gt;: This post has been translated into Russian at &lt;a href=&quot;https://howtorecover.me/kak-polucit-pokazatel-skorosti-google&quot;&gt;HowToRecover.me&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update 2019-3-23&lt;/em&gt;: This post has also been translated into &lt;a href=&quot;https://flyclipart.com/uz-middleman-va-nginx-100-ball&quot;&gt;Uzbek&lt;/a&gt; by &lt;a href=&quot;https://flyclipart.com&quot;&gt;Transparent Cliparts&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>University of Utah Coding for Rookies course syllabus &amp; notes</title><link>https://elliotec.com/coding-for-rookies/</link><guid isPermaLink="true">https://elliotec.com/coding-for-rookies/</guid><pubDate>Sat, 24 Jun 2017 18:58:00 GMT</pubDate><content:encoded>&lt;p&gt;This is a collection of notes on the 6 week course I designed for the University of Utah’s continuing education program in the summer of 2017.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.codingforrookies.com&quot;&gt;Go to CodingForRookies.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.codingforrookies.com&quot;&gt;&lt;img class=&quot;&quot; src=&quot;/images/cfr.png&quot; alt=&quot;Coding for Rookies course banner: a brief introduction to the Web and programming, by Mike Elliott&quot; width=&quot;2124&quot; height=&quot;500&quot; loading=&quot;eager&quot; decoding=&quot;async&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Visuify - the force-directed relationship graph with D3.js and Spotify</title><link>https://elliotec.com/force-directed-artist-relationship-graph-with-d3-js-and-the-spotify-api/</link><guid isPermaLink="true">https://elliotec.com/force-directed-artist-relationship-graph-with-d3-js-and-the-spotify-api/</guid><pubDate>Tue, 31 Jan 2017 04:13:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Update June 2026&lt;/em&gt;: The demo doesn’t work anymore due to Spotify changing their API, and I can’t be bothered to deal with it. Plus, &lt;a href=&quot;https://en.wikipedia.org/wiki/Criticism_of_Spotify&quot;&gt;you should stop using Spotify&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I’ve always loved data visualization done well and admired interactive graphs and maps seen on &lt;a href=&quot;https://www.nytimes.com/interactive/2016/12/21/upshot/Mapping-the-Shadows-of-New-York-City.html&quot;&gt;The New York Times&lt;/a&gt; and elsewhere.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://d3js.org/&quot;&gt;D3.js&lt;/a&gt; is a powerful data visualization library in JavaScript written by the former editor of the New York Times graphics department. It uses a jQuery-like syntax to create and manipulate interactive charts on the web.&lt;/p&gt;
&lt;p&gt;I finally made an excuse for myself to take a couple days and learn what D3 is all about in the form of a web app that maps a &lt;a href=&quot;https://en.wikipedia.org/wiki/Force-directed_graph_drawing&quot;&gt;force-directed graph&lt;/a&gt; of related artists to the artist the user inputs.&lt;/p&gt;
&lt;a href=&quot;https://elliotec.com/visuify/&quot;&gt;
    &lt;h2&gt;Play with Visuify!&lt;/h2&gt;
    &lt;img src=&quot;/images/visuify-small.png&quot; alt=&quot;Visuify rendering a force-directed graph of artists related to Animal Collective&quot; width=&quot;320&quot; height=&quot;362&quot; loading=&quot;eager&quot; decoding=&quot;async&quot;/&gt;
&lt;/a&gt;
&lt;p&gt;Click the link above to play around with it. Open the artist page in Spotify by clicking the artist name above the chart and hovering, clicking, and dragging the nodes and links do stuff too.&lt;/p&gt;
&lt;p&gt;The flow of the program is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;User inputs and submits the name of an artist&lt;/li&gt;
&lt;li&gt;A query for the artist is made to the &lt;a href=&quot;https://developer.spotify.com/web-api/&quot;&gt;Spotify Web API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The artist is stored, and another request is made for that artist’s related artists&lt;/li&gt;
&lt;li&gt;Each related artist to the original query is stored along with their relationships, and another request is made for the second degree of related artists to the original - that is, the related artists of each related artist to the original query&lt;/li&gt;
&lt;li&gt;Nodes and Links are drawn by D3 with specified interactions and styles based on the objects built in the previous step&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The most difficult part was structuring the data properly synchronously before executing D3 to draw the graph from it. I enlisted help from a few friends and my buddy Michal Scienski helped me get the promise chain to work properly, so kudos to him.&lt;/p&gt;
&lt;p&gt;After the data structure was sorted out, it was pretty fast and fun to get D3 to do what I wanted with it. Between the excellent documentation and the &lt;a href=&quot;https://gist.github.com/mbostock&quot;&gt;creator’s examples&lt;/a&gt;, I was able to build most of the features and functionality I wanted in a couple spare evenings. It was quickly apparent how powerful D3 can be and how many useful applications it has.&lt;/p&gt;
&lt;p&gt;Ideas for its future include routing by artist query and rewriting it in ES-Latest without jQuery or Lodash.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/elliotec/visuify&quot;&gt;See the code on Github&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Modules and Monoliths</title><link>https://elliotec.com/modules-and-monoliths/</link><guid isPermaLink="true">https://elliotec.com/modules-and-monoliths/</guid><pubDate>Sun, 21 Feb 2016 02:06:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;“Jack of all trades, master of none – though oftentimes better than
master of one.” - Someone&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-full-stack-developer&quot;&gt;The Full Stack Developer&lt;/h2&gt;
&lt;p&gt;Those words are met with controversy in the industry.&lt;/p&gt;
&lt;p&gt;A lot of developers are quite annoyed with the term. They argue that it
isn’t possible to be truly full stack, whatever their definition of
“truly” might be.&lt;/p&gt;
&lt;p&gt;They believe that mastery of a specific skill set within a software
stack is more valuable than being decent at all of it. This can be true,
especially in large corporations and enterprise systems with hundreds of
developers that are assigned specific tasks and siloed by their
specialization.&lt;/p&gt;
&lt;p&gt;Mastering one specific language or piece of the stack certainly has many
benefits. Masters of JavaScript have tons of knowledge about the quirks of
the language and clever ways to get complex UIs to do their and the user’s
bidding. Likewise with DBAs and data architects on the other side;
structuring huge amounts of data and connecting the data by its
relationships is quite an impressive feat.&lt;/p&gt;
&lt;p&gt;But if the JavaScript master had to analyze and structure and join and
relate tables, she feels out of her element and may seize up citing
ignorance in all things non-JavaScript. The DBA might say, “this isn’t
SQL.” And leave.&lt;/p&gt;
&lt;p&gt;Some people take the love and science of the craft very seriously and
aspire to reach sensei-level software mastery, and think this usually
requires a specialization to get anywhere.&lt;/p&gt;
&lt;p&gt;But looking at examples like David Hienemer Hansson and
hundreds of other startup founders and programming legends, we can see
that gaining that level of knowledge of the full stack is attainable and
accessible and rewarding.&lt;/p&gt;
&lt;p&gt;People can be modules or monoliths. Many choose specialization and corner themselves as “JavaScript Developers” or “Rails Developers.” My advice is to stay away from this and keep your options open with something like “software developer,” highlighting your experience in your preferred fields without removing yourself from opportunities to grow and gain new technical skills.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dilbertblog.typepad.com/the_dilbert_blog/2007/07/career-advice.html&quot;&gt;Some of the best career advice I’ve read came from Scott Adams which says that in order to become extraordinary, you have two paths:&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Become the best at one specific thing.&lt;/li&gt;
&lt;li&gt;Become very good at two or more things.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The first is almost impossible, so I’ll be sticking to the second.&lt;/p&gt;
&lt;p&gt;People often tout the “T-shaped” metaphor for one’s skill levels,
meaning that they have expertise in a vertical and the horizontal is the
broad but lesser knowledge of other disciplines. I agree with this, and
don’t see why it can’t be more common for someone to have an engineering
vertical with for example, a strong business/operations/etc. horizontal.
It’s definitely a thing, tons of successful founders of companies do
exactly that. So why are the developers in the front end community
isolating themselves into their own little specializations and modules
that they spend lots of time learning and configuring?&lt;/p&gt;
&lt;h2 id=&quot;the-full-stack-framework&quot;&gt;The Full Stack Framework&lt;/h2&gt;
&lt;p&gt;This is why I still love &lt;a href=&quot;https://rubyonrails.org&quot;&gt;Ruby on Rails&lt;/a&gt;, which turned 10 this year.&lt;/p&gt;
&lt;p&gt;Rails created a layer of abstraction that eliminated much of
the monotony, repetition, and difficult integrations that web development
requires. Building, integrating, and distributing packages of
functionality (gems) became a breeze. It made developing rich applications
on the web much more accessible to people with or without programming
skills, and drastically increased the speed of doing so.&lt;/p&gt;
&lt;p&gt;I hear a lot of people that don’t like Rails give their primary reason for disliking it as “It’s just too much magic.” What the hell is that supposed to mean!? Who doesn’t love magic? Why would you want to waste time configuring things and wiring up stuff under the hood when you can scaffold and ship a product much sooner? Rails was built to remove the repetition of common architecture patterns, and did it very well. It baffles me that people want to redo this because they’re afraid of “magic.”&lt;/p&gt;
&lt;p&gt;You still have to know a bit of HTML, CSS, and JavaScript to get your way
around Rails, but you can take shortcuts with those too, like templating
with ERB, using CSS frameworks like Bootstrap or &lt;a href=&quot;https://refills.bourbon.io&quot;&gt;Thoughtbot’s Refills&lt;/a&gt;, and
of course jQuery, which has become startlingly rejected recently by a lot
of the JavaScript community.&lt;/p&gt;
&lt;p&gt;Some proponents of the full stack JavaScript world are attracted to the
“one language to rule them all” idea, but most implementations of JS
frameworks lack any structure or standardization or convention and take so
much time to configure that shipping a product is arduous. (If you like
the idea of developing entirely in one language, I recommend looking into
Clojure and Luminus which is fast and expressive and uses some
awesome truly full-stack patterns).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://emberjs.com/&quot;&gt;Ember&lt;/a&gt; is an outlier here, and deserves credit for taking a lot of the good ideas Rails popularized and put it in a JS framework with an amazing CLI tool. But unfortunately they don’t have marketing expert giants like Facebook (for React) or Google (for Angular) pushing the Ember framework, so naturally it gets pushed aside.&lt;/p&gt;
&lt;p&gt;Stuff like Ember and &lt;a href=&quot;https://yeoman.io&quot;&gt;Yeoman&lt;/a&gt; ease the pain a little bit sometimes, but the
fragmentation and the dramatic fiasco that has become of the
JavaScript framework/library/etc world is becoming a defining characteristic of the community. These frameworks inaccessibility often require
that one be an expert just in JavaScript in order to properly implement. Why?&lt;/p&gt;
&lt;p&gt;Full stack development is really just combining the concepts of
“standing on the shoulders of giants” and &lt;a href=&quot;https://tim.blog/2014/08/25/the-art-of-strategic-laziness/&quot;&gt;“strategic laziness.”&lt;/a&gt; We take what we’ve learned from the past, and use it to strategically avoid decisions that have already been made and proven by people smarter than us.&lt;/p&gt;
&lt;h2 id=&quot;effort-for-its-own-sake&quot;&gt;Effort For its Own Sake&lt;/h2&gt;
&lt;p&gt;Many JavaScript frameworks are implementing patterns like MV-star or MVVM
. They take the solid tried and true MVC pattern that most developers are
familiar with and start scrambling up the acronyms and implementing them
poorly and without conventions (I know MVVM was created before the JS
frameworks, but the creator of the pattern has himself criticized it as
a bad idea for these UI implementations).&lt;/p&gt;
&lt;p&gt;Why are we spending time re-inventing the wheel under the guise of
innovation and re-solving solved problems for its own sake?&lt;/p&gt;
&lt;p&gt;SQL is another example. The problem of organizing data rationally and querying it
was solved decades ago, and any worthy modern framework can interact with
this data and create rich APIs if need be.&lt;/p&gt;
&lt;p&gt;Yet the hot shit these days is NoSQL, which shuns decades of work for &lt;a href=&quot;http://www.sarahmei.com/blog/2013/11/11/why-you-should-never-use-mongodb/&quot;&gt;a
markedly worse solution&lt;/a&gt;. This trend is very limiting, and any SQL DB can produce JSON anyway, so what is the point?&lt;/p&gt;
&lt;h2 id=&quot;servers-are-our-friends&quot;&gt;Servers are our friends&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://ponyfoo.com/articles/stop-breaking-the-web&quot;&gt;Single Page Apps are almost never necessary.&lt;/a&gt;
Your users don’t care about two-way data
binding or one-way data flow. I promise. Neither does your pointy-haired boss.
They care that the data they are getting or posting is getting got or posted.&lt;/p&gt;
&lt;p&gt;“Isomorphic” (which is quite a pretentious word for running on the client and server) JavaScript is an idea that removes the logical separation of client and server so that all the code is tightly coupled and stored together in a repo. This is an interesting solution to the problem that we are now having with SPAs bloating up and slowing down the browser by running the code through the server first and templating. This is, on the surface, a trend toward the monolithic architecture I’m touting in this article.&lt;/p&gt;
&lt;p&gt;But, really it’s roundabout, difficult to implement, and adding complexity when we should be removing it. Like, how about just not using too much JS on the client and minimizing requests? People say it helps with SEO, but Google now crawls pages that are generated with JS, at least supposedly. If you want better SEO, don’t render all your content with JavaScript.&lt;/p&gt;
&lt;p&gt;Data and content should be submitted and displayed by the client, and manipulated and stored on the server. This has worked well, and will continue to work well for the foreseeable future. Just sprinkle in the JS that is needed to make you’re app interactive and pretty and things will move along nicely.&lt;/p&gt;
&lt;h2 id=&quot;over-modularization&quot;&gt;Over-modularization&lt;/h2&gt;
&lt;p&gt;The Unix philosophy of “Do one thing and do it well” has been repeated to the point of overuse in the community, especially surrounding the React ecosystem. So React does the view layer well. Redux does the data flow well. Webpack does package management well, and Gulp or NPM scripts do build process well. And so on and so forth.&lt;/p&gt;
&lt;p&gt;Well, Rails has many components that do their respective pieces well. Active Record does ORM and data handling &lt;em&gt;very&lt;/em&gt; well. ActionMailer does email well. The asset pipeline does asset management well. And so on and so forth.&lt;/p&gt;
&lt;p&gt;But guess what? Ruby on Rails does one thing, and one thing well, and that’s &lt;em&gt;full-stack web development&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;It’s also important to remember that Unix is a family of operating systems. Operating systems do many things, and do them well. One off the top of my head might be system operation. But each of the components do their own thing well to make the monolith of Unix the magical beast that it is.&lt;/p&gt;
&lt;p&gt;Microservices, containers, and “anti-monolithic” approaches to
architecture make sense occasionally, like when you work for Netflix or
Spotify and have teams churning out features at enormous scale that needs
multi-threaded asynchronous load balancing and all the jazz.&lt;/p&gt;
&lt;p&gt;But unless you’re a specialist in whichever micro piece of the stack and
are sticking to it(or if you’re an architect and setting this stuff up is
your specialty), this type of architecture is daunting and will
unquestionably turn into an unmaintainable spaghetti mess.&lt;/p&gt;
&lt;p&gt;The fact is we are over-modularizing things. Every time I start a new JS
project, I feel like I just moved into a new house with nothing but
a screwdriver and a few thousand dollars worth of Ikea furniture -I’m
excited so I tear open the boxes and get started but building the couch
seems more fun than the bookcase and I just stripped all the screws of the
wardrobe which was too heavy to lift by myself anyway and I really should
start on my desk so I can build a computer to put on it and now I lost
that screwdriver. Before I know it, I have a room full of shredded
cardboard under a pile of partly-assembled furniture and the rest of the
house is still empty.&lt;/p&gt;
&lt;p&gt;What if I had the option of walking into my house totally furnished to my
exact specifications and expectations at no extra cost?&lt;/p&gt;
&lt;p&gt;That’s what I think of as what some folks like to call “monoliths.” I’m
fine with that word. If convention means monolith than I prefer monoliths
over modules, and I think it’s odd that so many developers want to be so
contrarian about it. I get the whole rebel spirit of the industry and
engineering culture, but historically it hasn’t been such a hodgepodge - it has continually moved towards conventions and layers of abstraction, so
we can be more effective and efficient and get on with innovating (or in
most of our cases, selling something).&lt;/p&gt;
&lt;p&gt;I don’t want to have containers containing NoSQL interacting with
modularized libraries inside their own containers. It’s gonna be slow to
develop, and slow to load. I want a monolith that I can spend more time on
making it do a better job at what it is and ship the damn thing.&lt;/p&gt;
&lt;p&gt;Doing a project in React has such a huge learning curve and the sheer
amount of modules and libraries one must connect and configure makes my
head spin. There are seemingly infinite combinations of libraries and
newest things you must know to &lt;a href=&quot;http://mir.aculo.us/2015/08/25/how-to-actually-ship-software-that-actually-works/&quot;&gt;actually ship something.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://medium.com/@ericclemmons/javascript-fatigue-48d4011b6fc4&quot;&gt;Some people love this constant stream of new stuff and learning, but even
they are feeling the exhaustion.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;My buddy shaine put it well -&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Is there a way to just skip over react/webpack/es6 to the next big thing? I love those things, but theoretically I love the next thing more.&lt;/p&gt;&amp;mdash; Shaine Hatch (@ShaineHatch) &lt;a href=&quot;https://twitter.com/ShaineHatch/status/643468259375714304&quot;&gt;September 14, 2015&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;p&gt;It’s okay to love new things and be hungry for more learning, but I do
believe that the lack of structure, conventions, and opinionated-ness is crippling
the potential of what we can do, especially in the JS community. Not to mention
the insane additions of features in
ES6/ES2018/ES-whatever-we’re-calling-it-now.&lt;/p&gt;
&lt;h2 id=&quot;lets-go-back-to-convention-over-configuration&quot;&gt;Lets go back to convention over configuration.&lt;/h2&gt;
&lt;p&gt;The chaos of the ultra-modularized JavaScript (and relatives) community could be solved by
coming together to develop some order and re-use, so we can use
conventions that are shared by most instead of connecting and configuring
one library after another to re-solve solved problems. Developers are not
happy with this churn fatigue, and users are getting shittier experiences
from it.&lt;/p&gt;
&lt;p&gt;Maybe the full-stack naysayers are saying nay because they have spent so
much time specializing on their thing that they find it impossible to be
as good at doing all the things. If we standardized some conventions, more
of us would be able to specialize on the entire stack, but only because we
are really specializing on the layer of abstraction that does all the
full-stack stuff.&lt;/p&gt;
&lt;p&gt;We in the &lt;a href=&quot;http://www.breck-mckye.com/blog/2014/12/the-state-of-javascript-in-2015/&quot;&gt;current state of the JS world&lt;/a&gt; are lacking the glue that holds the modules that make a magnificent, magical monolith. I’m talking about the ridiculous steps of getting all the moving pieces to work together. Let’s come up with ways to fix it.&lt;/p&gt;
&lt;p&gt;Undoubtedly a large percentage of you reading this will say, “If you don’t like
it fork it, fix it, or make a better one.” But not only do I have no desire
whatsoever to do that, I also believe this mentality is possibly the biggest
contributor to the &lt;a href=&quot;https://xkcd.com/927/&quot;&gt;clusterfuckification of the community&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I’m ranting, but I’m also here to offer solutions. People need to stop making
JS frameworks, and people also need to stop writing self contained libraries
that don’t conform to any standard but their own. Follow the examples of Rails
and Django, and SpringMVC and even jQuery. Let’s just come together to pick a framework with a high level of abstraction, so we can make the magic happen by piggybacking on the magic the frameworks provide. &lt;a href=&quot;https://circleci.com/blog/its-the-future/&quot;&gt;It’s the future.&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Teach Your Skills for Fun and Profit</title><link>https://elliotec.com/teach-your-skills-for-fun-and-profit/</link><guid isPermaLink="true">https://elliotec.com/teach-your-skills-for-fun-and-profit/</guid><pubDate>Tue, 10 Nov 2015 20:49:00 GMT</pubDate><content:encoded>&lt;p&gt;##An age old concept&lt;/p&gt;
&lt;p&gt;What do Alton Brown, Tim Ferris, Bob Vila, and Ryan Bates all have in common? You guessed it, they all made a small (or large) fortune off teaching the skills of their trade. They weren’t teachers initially, they were just pretty good at what they did, and thought teaching others what they knew could be beneficial to all parties. And it was.&lt;/p&gt;
&lt;p&gt;Teaching your skills at any level can sharpen them dramatically and make you a decent side income. Longer term you may find it makes you more than a decent side income, and teaching becomes a skill in itself.&lt;/p&gt;
&lt;p&gt;It has never been a secret that teaching is a great way to learn. The ancient Roman philosopher Seneca stated that, “While we teach, we learn”, two millennia ago. European schools started to have some version of teaching assistants or student teachers around the end of the 18th century.&lt;/p&gt;
&lt;p&gt;There have been more &lt;a href=&quot;https://en.wikipedia.org/wiki/Learning_by_teaching&quot;&gt;recent pedagogic techniques&lt;/a&gt; focused specifically on having students teach to learn based on research that teaching is, in fact, the &lt;em&gt;best&lt;/em&gt; way to learn.&lt;/p&gt;
&lt;img src=&quot;/images/learning_pyramid.png&quot; alt=&quot;The Learning Pyramid: average retention rates from 10% for reading up to 90% for teaching others&quot; width=&quot;400&quot; height=&quot;297&quot; loading=&quot;eager&quot; decoding=&quot;async&quot;/&gt;
&lt;p&gt;##Gaining expertise&lt;/p&gt;
&lt;p&gt;In his book &lt;a href=&quot;https://fourhourworkweek.com&quot;&gt;“The 4-Hour Workweek,”&lt;/a&gt; Tim Ferris famously (and controversially) outlines how to be come an expert in anything in four weeks and six steps. Read the book if you want to know each step, but let me give you a hint: at least half of them involve teaching.&lt;/p&gt;
&lt;p&gt;Think about the times you’ve had to give presentations. It’s likely that you started out methodically when you found out you were going to do it, only to find yourself scrambling the night before and doing it in a few hours college-thesis-style. But you still learned a ton! Certainly more than the people that you were presenting for.&lt;/p&gt;
&lt;p&gt;Turns out, &lt;a href=&quot;http://link.springer.com/article/10.3758%2Fs13421-014-0416-z&quot;&gt;studies show&lt;/a&gt; that even &lt;em&gt;being told&lt;/em&gt; you will have to teach a concept later improves learning and recall significantly. Maybe those of us with high willpower can trick ourselves into this, but I recommend actually putting yourself in a teaching situation to get the full effect.&lt;/p&gt;
&lt;p&gt;##Tricking ourselves&lt;/p&gt;
&lt;p&gt;We trick ourselves all the time into thinking we are learning. It’s quite a conundrum - how can we have a full grasp of an idea when we don’t know what we don’t know?&lt;/p&gt;
&lt;p&gt;As &lt;a href=&quot;https://artofproblemsolving.com/articles/learning-through-teaching&quot;&gt;Richard Rusczyk says&lt;/a&gt;, “Teaching removes this possibility of self-deceit.” This happens both by us preemptively gathering more information and knowledge in anticipation of our student’s lack of understanding or questions, and also by being put on the spot by those which were not anticipated at the time of teaching.&lt;/p&gt;
&lt;p&gt;Teaching also happens to be an excellent cure for an endemic of the tech world: &lt;a href=&quot;https://en.wikipedia.org/wiki/Impostor_syndrome&quot;&gt;Impostor Syndrome&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;##Start teaching when you start learning&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://elliotec.com/how-i-got-a-job-in-web-development/&quot;&gt;In an earlier post&lt;/a&gt;, I laid out the steps I took in getting a job in my current field of web/software development. It is notable that quite early in the process, I was getting paid to teach people what I had been learning, almost in tandem. I recall my instructor at the course I was enrolled in mention something in passing about learning by teaching and I really took it to heart.&lt;/p&gt;
&lt;p&gt;I started a gig as a personal tutor for a Computer Science grad student at UW in Ruby on Rails before finishing the course, and then was an assistant instructor for the courses following mine. I believe these two jobs were an early immunization for the impostor syndrome I may have had if I didn’t do them. It might have been a little too far on the ego boost, but thats another problem.&lt;/p&gt;
&lt;p&gt;Point is, I started teaching for purely selfish reasons - &lt;a href=&quot;https://www.youtube.com/watch?v=2Nx-sH0kn6E&quot;&gt;make money, and get learnt&lt;/a&gt;. (sorry)&lt;/p&gt;
&lt;p&gt;That’s not to say I haven’t had lots of rewarding experiences teaching what I do. I was surprised at the amount of attention my post on how I got my job was getting, and how many folks emailed me that it was an inspiration boost, or they got into a course they’ve been excited about, or they got their dream job, etc. Knowing you’ve helped someone achieve something is a sweet feeling.&lt;/p&gt;
&lt;p&gt;And I guarantee I learned more than my audience just by writing that.&lt;/p&gt;
&lt;p&gt;##“I know that I know nothing”&lt;/p&gt;
&lt;p&gt;Since then, I’ve started working as a mentor for &lt;a href=&quot;https://www.thinkful.com&quot;&gt;Thinkful&lt;/a&gt; on the weekends. This, plus being the development lead of a team at my full time spot gives me plentiful teaching, and therefore learning, opportunities.&lt;/p&gt;
&lt;p&gt;I am consistently stumped by questions my students and teammates ask me. Sometimes it feels good when they have an easy question that I’m well prepared for, but that is rarely the case. More often, I’ll have to look up pieces of answers and help them and myself connect the dots.&lt;/p&gt;
&lt;p&gt;Surprise! Thats what I do in my real life job anyway!&lt;/p&gt;
&lt;p&gt;So, if you’re a blossoming developer or recent grad that is stuck in the awful, seemingly infinite loop of, “I need experience to get a job to get experience so I can get a job,” like me and so many have been in the past, try your hand at teaching. Some good places to start would be TA-ing for some classes, private tutoring, or even just blogging.&lt;/p&gt;
&lt;p&gt;Or, if you’ve got tons of experience and are feeling a bit stale on your skills or just plain bored, try teaching! Some good places to start could be assisting at a university, private teaching facility like bootcamps, blogging, or best of all, be a true mentor for someone.&lt;/p&gt;
&lt;p&gt;A true mentorship experience is hard to find without contriving it, but I have had some unbelievable mentors in my life that have been far more influential than they know, and have shaped me and my character immensely. I strive to be that person for someone else someday, but I may not even know it if it happens.&lt;/p&gt;
&lt;p&gt;Being a teacher implies mastery of the subject even though to be a decent teacher you must acknowledge that the more you know, the more you realize you know very little.&lt;/p&gt;
&lt;p&gt;It’s usually humbling. It’s often lucrative. And it’s always going to be a better learning experience for you than your student.&lt;/p&gt;
&lt;p&gt;###Other references and sources&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Learning_by_teaching&quot;&gt;The LdL Approach&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://lifehacker.com/teach-others-what-you-know-to-make-connections-and-lear-1639560273&quot;&gt;Teach what you know&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://ideas.time.com/2011/11/30/the-protege-effect/&quot;&gt;The Protoge Effect&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.sciencedirect.com/science/article/pii/S0160289607000062&quot;&gt;Birth Order and Intelligence&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://ww2.kqed.org/mindshift/2015/09/14/lesson-study-technique-what-teachers-can-learn-from-one-another/&quot;&gt;Lesson Study Technique&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Music, Art, &amp; Web Apps in Clojure</title><link>https://elliotec.com/art-music-web-clojure/</link><guid isPermaLink="true">https://elliotec.com/art-music-web-clojure/</guid><pubDate>Wed, 27 May 2015 06:17:00 GMT</pubDate><content:encoded>&lt;iframe src=&quot;//slides.com/michaelelliott/art-music-webapps-clojure/embed&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;
</content:encoded></item><item><title>How I Got a Job in Web Development</title><link>https://elliotec.com/how-i-got-a-job-in-web-development/</link><guid isPermaLink="true">https://elliotec.com/how-i-got-a-job-in-web-development/</guid><pubDate>Tue, 27 Jan 2015 13:12:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;why-im-writing-this&quot;&gt;Why I’m writing this&lt;/h2&gt;
&lt;p&gt;This post is an attempt to explain how I got a position as a professional web developer with just over a year of experience programming and a degree in psychology. I’m writing in hopes that it will help anyone else along a similar path, or those who don’t know where to start. This is by no means a surefire plan to get anyone a job in a year or ever. But maybe someone aspiring to become a web developer can take a few resources or find something useful here.&lt;/p&gt;
&lt;p&gt;If you want to skip to a summarized list of things I did, &lt;a href=&quot;#thechase&quot;&gt;click here to cut to the chase&lt;/a&gt;. But you might want to come back and see the rest of the story to fill in the details.&lt;/p&gt;
&lt;h2 id=&quot;my-first-exposure&quot;&gt;My first exposure&lt;/h2&gt;
&lt;p&gt;As far as I knew growing up, the Internet was made out of magic. I had taken apart my family computers out of curiosity a few times but had never heard of HTML, or pondered the concept of what software development really was. Most of the technical experience in my life was my enjoyment of building and breaking things, playing with Knex and Erector sets, and growing up with the Internet. Just after high school I was lucky enough to land a job as a contractor for my neighbor soldering circuit boards and electronics for various products he made.&lt;/p&gt;
&lt;p&gt;That was a pretty cool job, but it certainly didn’t make me want to study electrical engineering. I went into psychology thinking it would supplement my intent of going to medical school and becoming a psychiatrist. That dream died fast for numerous reasons, and I ended up rushing to finish my degree ASAP. I then started work at Starbucks in addition to helping out the neighbor with soldering and testing his products after leaving my student job upon graduation.&lt;/p&gt;
&lt;p&gt;That same month I learned about &lt;a href=&quot;https://www.linuxfoundation.org/&quot;&gt;Linux&lt;/a&gt; and decided to install &lt;a href=&quot;http://www.ubuntu.com/desktop&quot;&gt;Ubuntu&lt;/a&gt; on an old Dell I inherited from my parents. In order to get things installed and working properly I had to open the command line and actually use Unix commands, some of them often enough to start understanding what they did and remembering them. I was just getting into Minecraft at the time and wanted my girlfriend to play with me, and I figured with a little googling it would be easy enough to setup a local server on that Ubuntu machine. It was, and I consider that my first real and aware exposure to programming.&lt;/p&gt;
&lt;h2 id=&quot;finding-the-time&quot;&gt;Finding the time&lt;/h2&gt;
&lt;p&gt;Over the next few months I dabbled in various tutorials on HTML and CSS recommended by Reddit but struggled finding time and motivation to just sit down and get through them. I attempted to complete the &lt;a href=&quot;https://www.codecademy.com&quot;&gt;Codecademy&lt;/a&gt; courses multiple times but found them boring and purposeless. The idea sort of went to the back burner as I worked full-time, moved into a new place, and wanted to relax and enjoy my time off. I was doing just that at the climbing gym on June 1st when I clumsily stumbled off the mat at the base of the wall and dramatically broke the cartilage in my ankle. Somehow I didn’t need surgery but the doctor said it had to be non-weight bearing for 12 weeks.&lt;/p&gt;
&lt;p&gt;So I called my boss and broke the news, she reminded me of one of the benefits of working at Starbucks: Short-term disability insurance. It got signed off no problem. The first couple weeks were mostly spent sleeping away the pain and playing through various video games, pretty much just lazing around. But one day when the Lortab wore off I was feeling very unproductive and lazy, so I decided to set a goal of getting through those HTML and CSS Codecademy courses the next week. At the same time we moved into my girlfriend’s parents’ house while they were abroad so that eliminated rent and some other expenses for the few months I was out. My girlfriend also deserves a lot of credit for working and helping me out during this time. I became acutely aware of how fortunate I was to be in a position where I was essentially getting paid to chill at home and have 3 months of free time to spend however I wanted.&lt;/p&gt;
&lt;p&gt;This awareness led me to feel like I owed it to karma or whatever powers that were to spend a good chunk of my time out on productive endeavors and keep setting goals like the Codecademy one. I blew through those courses, still feeling annoyed with their seeming lack of purpose and context, but appreciated the introduction to something I knew I wanted to spend more time on.&lt;/p&gt;
&lt;h2 id=&quot;learning-front-end-fundamentals&quot;&gt;Learning front end fundamentals&lt;/h2&gt;
&lt;p&gt;I soon asked the almighty Google for some more of the top HTML &amp;amp; CSS resources. It wasn’t long before I saw the book, aptly titled &lt;a href=&quot;http://www.htmlandcssbook.com/&quot;&gt;HTML &amp;amp; CSS&lt;/a&gt;, by Jon Duckett. I chose this book almost exclusively based on the way it looks. The design wowed me, and the content was just what I was looking for. Rather than the piecemeal abstractions and micro lessons on Codecademy, I found Duckett’s book to be a refreshing whole-picture approach with real world examples. I went through it in a week and built a custom, useful website from scratch for the first time the following week. I credit this book with teaching me a lot of the foundational knowledge I needed to learn further concepts and build upon. (Duckett has since published another book that I highly recommend, and wish I had at this time: &lt;a href=&quot;http://www.javascriptbook.com/&quot;&gt;JavaScript &amp;amp; jQuery&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;My next step was to search through my network for advice. I thought of everyone I knew, went through my Facebook friends, and found someone I could contact that was involved in the industry. So I messaged him and told him about my interest and quickly got a response. He happened to be in a senior position at a very well known company but took the time to give me a little project to work on with a loose deadline. Still being in the first third of my confinement to the couch, I was able to spend two weeks working exclusively on this. I learned a lot about modern best practices and got some great career advice.&lt;/p&gt;
&lt;h2 id=&quot;rails-and-a-development-environment&quot;&gt;&lt;a href=&quot;https://rubyonrails.org&quot;&gt;Rails&lt;/a&gt; and a development environment&lt;/h2&gt;
&lt;p&gt;At this point I felt comfortable enough to tell my friends and family about my pursuit, and let them know that I was looking for work and projects. A good friend gave me the login to a tutorial series called &lt;a href=&quot;https://onemonth.com&quot;&gt;One Month Rails&lt;/a&gt; he bought but never found time for. I certainly had time for it, so I did it.&lt;/p&gt;
&lt;p&gt;This tutorial introduced me to a vast world that I’d never seen before. It guided me through setting up a development environment that consisted primarily of &lt;a href=&quot;https://www.sublimetext.com&quot;&gt;Sublime Text&lt;/a&gt; and the command line, and helped me get a bunch of other tools set up. I learned about version control and &lt;a href=&quot;https://git-scm.com&quot;&gt;git&lt;/a&gt; (and by extension, &lt;a href=&quot;https://github.com&quot;&gt;Github&lt;/a&gt;) through repetition in the course, and got a grasp on most aspects of the tech stack in Rails. I finished it in about 2 weeks and had a fully functioning app replicating Pintrest, hosted on &lt;a href=&quot;https://www.heroku.com&quot;&gt;Heroku&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I used jQuery a little bit during the tutorial, which was a nice intro to JavaScript. I realized how useful and necessary it is and wanted to use some other plugins in my future projects.&lt;/p&gt;
&lt;h2 id=&quot;starting-a-freelancing-business&quot;&gt;Starting a freelancing business&lt;/h2&gt;
&lt;p&gt;I was super excited about programming and my new prospects for income. I decided I wanted to start a freelance business doing this, and my first step was getting some more projects and clients. The first few were not as hard to get as I had been led to believe. My family and friends already knew I was doing this, so I asked some of them if they needed a website.&lt;/p&gt;
&lt;p&gt;Then, the neighbor who I worked for offered to pay me to make the website for company. I jumped at the idea and finished it in a few weeks, referring back to the books and tutorials, coming out having learned quite a bit.&lt;/p&gt;
&lt;p&gt;After that, I did one for free, one as a trade, and then started charging (not very much). My first three clients were close friends or family, and after that I indiscriminately offered my services to anyone and everyone. One of my first non-family/friend clients was an HVAC contractor that was fixing the furnace in the house I was renting at the time. He saw me working on a different project, asked what I was doing, and told me he needed a website. I gave him a cheap quote, and promptly had another check in my pocket.&lt;/p&gt;
&lt;p&gt;It was time to legitimize my business; I had started making enough money to open up a bank account and register a sole proprietorship. I finally got around to making myself a (pretty rudimentary) personal website and got my girlfriend’s help in designing a logo in Illustrator. We designed business cards at the same time and got a cheap bulk order from FedEx. I still use them and they look like this:&lt;/p&gt;
&lt;img class=&quot;cards&quot; src=&quot;/images/cardfront.png&quot; alt=&quot;The front of my old business card: { elliotec } web design and development, Mike Elliott, elliotec.com&quot; width=&quot;500&quot; height=&quot;291&quot; loading=&quot;eager&quot; decoding=&quot;async&quot;&gt;
&lt;p&gt;Little did I know that these cards would be instrumental in getting me my current job.&lt;/p&gt;
&lt;h2 id=&quot;expediting-my-learning&quot;&gt;Expediting my learning&lt;/h2&gt;
&lt;p&gt;I continued to get a client here and there after my ankle had fully healed and I started work again part time at Starbucks, and a little for my neighbor. It wasn’t enough to pay the bills though, and at this point I was dedicated to becoming a professional web developer. I looked around for some dev roles in my area and came up short. Most required a level of proficiency that I wasn’t totally confident I had.&lt;/p&gt;
&lt;p&gt;I mentioned to the same friend who introduced me to the Rails tutorial that I wanted to somehow expedite my learning to get to a professional skill level. He told me about these code schools that had been popping up around the country taking after the tech company incubator model and their apparent success. He had been working at a venture impact fund, and was tasked to get information about these schools for possible investments. He emailed me a spreadsheet with some basic info about each code school he looked into (which was immensely helpful) and I did my own research on which would be the best for me.&lt;/p&gt;
&lt;p&gt;That October, after much deliberation I decided to apply to &lt;a href=&quot;https://www.codefellows.org&quot;&gt;Code Fellows&lt;/a&gt; in Seattle. I chose this particular code school mainly because they guaranteed a job in software development within 9 months or I paid nothing. Another reason was its relatively low price compared to some of the others like Hack Reactor, which at the time I was applying was more expensive than grad school plus the cost and hassle of moving to San Fransisco. Also, I had never been to Seattle and was in great need of an adventure to a place I had heard only good things about.&lt;/p&gt;
&lt;p&gt;The application and interview process was pretty intense. After an initial application assessing my skills and aptitude I was moved on to another stage that required a submission of a one-minute video of me explaining “something technical.” I chose jQuery and probably did it 10 times before feeling I had done an adequate job. I soon got another email requesting a time for an interview, and I got on Skype with the CEO at the alloted time.&lt;/p&gt;
&lt;p&gt;The interview was absolutely terrible. There were connectivity issues which amplified the fact that I had absolutely no clue what I was talking about. He was asking me questions about data structures and algorithms and how I’d model real life objects and items in code. I found myself literally speechless multiple times during the call. I had a few acceptable answers but mostly it was pretty embarrassing and I was sure I wouldn’t move further. But he must’ve had some faith in me, and said he’d send me a code challenge to complete as soon as possible.&lt;/p&gt;
&lt;p&gt;It was a Friday, and I started working on it immediately and through the weekend. It was very challenging. There were three individual challenges - they went something like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Make a simple page to manage a todo list where users can input todos and check them off upon completion.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Model a public library with object oriented Ruby including Library, Shelf, and Book objects that has “enshelf” and “unshelf” methods and essentially keeps track of inventory.(The actual description was way more technical for this one.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Generate and deploy a publicly available Rails app on Heroku that can create, edit, update, and destroy users. First name is required, and email must be valid. Add more features if it was easy.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The first challenge was not too difficult for me, because I’d been doing front end the most up to that point. I recall getting slightly hung up on a piece of the problem, but I think I solved it in the first night after the interview.&lt;/p&gt;
&lt;p&gt;I then skipped to the third challenge knowing number 2 would take me much longer. There were a few tricky parts, but I made it work with time to spare for a quick Bootstrap UI and some funny pictures. You can find the code for that app &lt;a href=&quot;https://github.com/elliotec/codefellows_crud&quot;&gt;here on my Github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And finally, the public library. This was by far the most difficult part of the challenge and up to that point the most complicated programming I’d been tasked to do, and it’d be a long time before I did anything that difficult again. This is the point where I realized that I’d been learning Rails without hardly learning any Ruby at all - hence the namesake “on Rails.” I was determined to submit the challenges by Monday, and was sincerely worried that wasn’t going to happen when I read the description of the challenge. So I immediately started looking around for tutorials that would help me with plain Ruby. I did &lt;a href=&quot;https://www.pluralsight.com/search?q=ruby&quot;&gt;CodeSchool’s Try Ruby&lt;/a&gt; which was introductory and ultimately not very helpful when it came to what I was trying to accomplish.&lt;/p&gt;
&lt;p&gt;I came across &lt;a href=&quot;http://tutorials.jumpstartlab.com/projects/ruby_in_100_minutes.html&quot;&gt;Ruby in 100 Minutes&lt;/a&gt; which is quite different now than when I used it as a resource. At the time, it modeled a personal chef that made things for you, and the resulting program &lt;a href=&quot;https://github.com/elliotec/100_min_ruby/blob/master/personal_chef.rb&quot;&gt;looked like this&lt;/a&gt;. It still is probably worth reading through, but it doesn’t seem quite as helpful for writing a real Ruby program as it used to be.&lt;/p&gt;
&lt;p&gt;After going through that tutorial, I perused Github looking for real world examples I could use to model my program after. I found about 5 or 6 that I looked at several times and sort of made the brain connections I needed to translate into the public library. It took me from Saturday night until Sunday night to do this whole thing, and with minimal to zero sleep (I don’t think this was necessary, I probably would have been fine if I took another day, but I was determined). &lt;a href=&quot;https://github.com/elliotec/cfruby_public_library/blob/master/cfruby_public_library.rb&quot;&gt;This is how it turned out&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;code-fellows&quot;&gt;Code Fellows&lt;/h2&gt;
&lt;p&gt;A bit to my surprise, I got in, and bought a one way ticket to Seattle arriving the day before the start of my cohort on January 6th. Finding a place to stay wasn’t terribly difficult (but it was pretty expensive compared to what I was used to in Utah) and I signed a 3 month lease in a tiny 10 x 10 apartment about a 20 minute walk from their facility.&lt;/p&gt;
&lt;p&gt;The first day started out with a little bit of housekeeping/logistics, but then we were immediately thrown into the fire. So many things to configure and download, all in a whirlwind couple hours. Before the end of the day, we started our first assignment on behavior driven development in Rails. It was immediately and continuously super intense.&lt;/p&gt;
&lt;p&gt;I learned &lt;em&gt;a lot&lt;/em&gt; during my time at Code Fellows. I was spending no less than 100 hours a week totally immersed in code and the community. I would barely have enough time to take off my shoes at the end of each day before immediately passing out from expending all the energy I had.&lt;/p&gt;
&lt;p&gt;The curriculum itself was very rigorous (most of my projects and assignments can be found on my Github if you’re interested), but I feel some of the material we were taught was not as impactful to me as what I learned from interacting with my peers and instructors and going to meetups almost every night, brushing elbows with some of the biggest names in the tech community and absorbing everything I could from everyone I could. I also had a great mentor from a local startup that really helped me tie a few loose ends in the directions I was heading.&lt;/p&gt;
&lt;p&gt;Another really useful aspect was the increasing of our web presence. I never had a &lt;a href=&quot;https://linkedin.com/in/elliotec&quot;&gt;Linkedin&lt;/a&gt; account up until then, which I had come to find out is an absolutely essential tool in job searching. There was staff there tasked with helping us maximize the efficacy of our web presence and resumes, and doing mock interviews both technical and general.&lt;/p&gt;
&lt;p&gt;During the course I was contacted with a few contract opportunities that I took, even though I really didn’t have the time. One was as a personal tutor for someone with a MS in computer science learning Rails in a certificate program at UW. I had minimal credentials, and I got paid the most money I’d ever charged up to that point to help a comp sci grad student. This put things in an interesting perspective - that the practical knowledge I’d been working on gaining might just be more useful than the expensive and dense theory taught in academia.&lt;/p&gt;
&lt;p&gt;Toward the end of the course, I was asked by an instructor if I’d be interested in being a teaching assistant for a new month long class they were doing on the fundamentals of computer science and web development. They were going to pay me and I still had a month left on my lease, so I jumped at the opportunity. It was taught in JavaScript. I learned so much by being put in a position where students looked up to me and I was tasked with being their first resource for help and knowledge.&lt;/p&gt;
&lt;p&gt;I had a few interviews in Seattle, but even though I had made tons of friends the transient nature of my situation was a major barrier in landing a spot right away. A few students got jobs almost immediately after graduation, and others slowly trickled along roughly biweekly. We lost 3 classmates half way through the course, but most of us have jobs now or are making a decent living consulting.&lt;/p&gt;
&lt;p&gt;##Startup Weekend&lt;/p&gt;
&lt;p&gt;Something I really wanted to do before I left Seattle was participate in a &lt;a href=&quot;https://startupweekend.org/&quot;&gt;Startup Weekend&lt;/a&gt; event. There was only one more before my return to Salt Lake in April and it was unfortunately sold out. I got in contact with an instructor at Code Fellows who I knew was partnering with the event and he pulled a couple strings and got me a ticket as a designer. So I went and pitched my first startup idea which I made up on the spot and failed magnificently at.&lt;/p&gt;
&lt;p&gt;I was baffled by how few developers were there when it was time to choose teams. Even though I had a designer ticket, it was clear my coding skills were needed (not to mention my design skills were nowhere near most of the others there). Due to the lack of developers, there were several teams that were asking me to join them, offering one incentive or another, and at least one major altercation between two team leaders over me. It was awkward.&lt;/p&gt;
&lt;p&gt;So I chose a team (who has since gone on to be a &lt;a href=&quot;https://getfastbar.com&quot;&gt;real company&lt;/a&gt;), and had an absolutely great time. I met some really smart, interesting people. I wrote the back end of the app in Rails that connected to an iOS app. I learned so much from the team and working closely with the iOS developer. We stay in contact and I credit him with leading me to much of the interest and knowledge I have now.&lt;/p&gt;
&lt;p&gt;Startup Weekend really put my skills to the limit, pushed me in ways I’d never been pushed before, and introduced me to lasting relationships that remain beneficial. I also had a really interesting and legitimate project for my portfolio that would attract future employers.&lt;/p&gt;
&lt;p&gt;##Returning home&lt;/p&gt;
&lt;p&gt;I got back to Salt Lake the first week of April and immediately started sending applications to companies in SLC and Seattle. The first couple weeks were slow with responses, and I was busy updating my own portfolio site anyway. Things went much quicker once my site was ready and some projects were up. Between both cities, I sent out about 100 resumes and applications. The majority of those did not get any response. I had much better luck when I started to beef up my Linkedin again, posted on the job hunting subreddits, and used social media to expose myself and my interest in finding a job.&lt;/p&gt;
&lt;p&gt;I went through roughly 20 phone interviews. The majority of the phone interviews led to the next step, usually either a code challenge of some sort, or an in-person interview.&lt;/p&gt;
&lt;p&gt;At first, the code challeneges were pretty tough for me. Usually the at-home ones had something to do with their company. Literally every single at home challenge for a company required consuming data from an API. I was uncomfortable at first with it. It sounds pretty weird to say now, but I really hadn’t been exposed to consuming data from an API until code challenges for jobs. It’s strange that I didn’t learn it before, since it is such an essential skill.&lt;/p&gt;
&lt;p&gt;Most of the in person interviews had a white board challenge involved, which is honestly in my opinion not a good or accurate measure of a person’s coding skill. I actually was prepared for this by Code Fellows, and did quite well on most of them.&lt;/p&gt;
&lt;p&gt;I got a false alarm offer from a local startup I interviewed with for a Rails job in early May. It was a big disappointment when they went dark on me but I recovered and threw myself out there again by putting my site on Reddit job subs and reaching out to people at attractive companies on Linkedin.&lt;/p&gt;
&lt;p&gt;##The first job&lt;/p&gt;
&lt;p&gt;The first week of June brought me 2 official offers within days of each other. One was for a software development contractor company that contracts people to other companies for long periods of time. I was offered a senior position in ruby, Rails, and front end development. The other offer was for a front end role on a .Net stack. The Rails one was for more money. I chose the other one because I met both teams and liked them more. I don’t regret that decision at all, and I’ve kept a good relationship with the other company.&lt;/p&gt;
&lt;p&gt;Interestingly, both companies that gave me an offer reached out to me rather than the other way around. One was a recruiter who found me on Linkedin and the other was the dev manager who saw my post on Reddit. Both asked me lots of technical questions, and even code questions, but neither gave me a white board nor take home code challenge.&lt;/p&gt;
&lt;p&gt;I enjoyed my first job as a developer. I was introduced to a lot of technologies I wouldn’t have been otherwise. They worked in a Windows environment, so I had to learn Visual Studio, C#, .Net, Razor, etc. and how to plug Coffeescript and Sass into the stack. It was a great learning experience and I made good friends there, but soon I had a lot of recruiters contacting me and I wasn’t a huge fan of the industry the company was in. It made me curious about opportunities that might have better suited me. I read &lt;a href=&quot;https://www.theatlantic.com/business/archive/2014/11/quit-your-job/382402/&quot;&gt;this article on the benefits of early career job-hopping&lt;/a&gt; which eased the feeling of guilt I had while considering new opportunities.&lt;/p&gt;
&lt;p&gt;So 4 months after my first job in web development, I accepted another offer at a &lt;a href=&quot;https://www.overstock.com&quot;&gt;well known company&lt;/a&gt; in the area. Now, 4 months since starting the new job, I am quite content with where I’m at.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;anchor&quot; id=&quot;thechase&quot;&gt;&lt;/a&gt;
##Cut to the chase!&lt;/p&gt;
&lt;p&gt;Okay, maybe that was too long, so here’s a summarized tl;dr list of the steps I took to get a job as a web developer a year from deciding to do so.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Exposed myself to seemingly complicated tech tasks for the purpose of exploration. This included hacking my Wii, setting up a Minecraft server, and getting familiar with various flavors of Linux. Generally being curious about technology and the internet and how it all works.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Gained a real interest in the idea of web development and programming in general. Money was of course a motivator, but certainly not enough to create the passion I eventually found in the actual craft.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Got introduced to front end fundamentals by trying things like &lt;a href=&quot;https://www.codecademy.com&quot;&gt;Codecademy&lt;/a&gt;. Personally I didn’t like the little teasers and if I could start over would skip straight to reading &lt;a href=&quot;http://htmlandcssbook.com&quot;&gt;HTML &amp;amp; CSS&lt;/a&gt; and &lt;a href=&quot;http://javascriptbook.com&quot;&gt;JavaScript &amp;amp; jQuery&lt;/a&gt; by John Duckett. These are from what I’ve seen the most accessible and practical books written on front end web development.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Update January 2018&lt;/em&gt;&lt;/strong&gt;: I’ve recently discovered another really robust resource for interview questions and tutorials called &lt;a href=&quot;https://career.guru99.com&quot;&gt;CareerGuru99&lt;/a&gt;. You might find something there valuable to your journey!&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;
&lt;p&gt;Made some websites. My first was one for a real company which ended up not needing or using it. I did it for free to learn. This is unquestionably (hopefully obviously) the most important step I took. I then started reaching out to my network for people who needed websites and made some for friends and family.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Learned about server side scripting and full stack frameworks. I went through &lt;a href=&quot;https://onemonth.com&quot;&gt;One Month Rails&lt;/a&gt; mostly due to a generous friend giving me his login. It was excellent and totally worth whatever they are charging. I then built another full stack web app.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Started a freelancing business. This really helped me legitimize myself, if only &lt;em&gt;for&lt;/em&gt; myself, and made me feel official and that I was all-in on my decision to make this my career. I made business cards, a portfolio site, a bank account, and registered my business name. Then I actually found clients and got paid to do what I had decided I wanted to get paid to do.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Created a web presence. Made sure I had accounts on Twitter, Linkedin, Github, Hacker News, Designer News, and a portfolio site, and tried to sharpen them all up. This was vastly beneficial, one of the most important things I did next to actually making websites and roughly equal to networking.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Attended a code school. I chose &lt;a href=&quot;https://www.codefellows.org&quot;&gt;Code Fellows&lt;/a&gt; in Seattle because of it’s job guarantee and location. Learned a ton, made lots of friends, would do it over again in a heartbeat. Absolutely worth the investment. I took advantage of a lot of great career opportunities offered to me because of this, including assisting in teaching a class and being a personal tutor to a CS grad student.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Networked. I asked everyone I knew what they knew about the industry and craft, and went to every &lt;a href=&quot;https://www.meetup.com&quot;&gt;meetup&lt;/a&gt; that I could. The conversations I had (and still have) at these events are invaluable. You learn shockingly more from talking with people in the community than you would sitting in any combination of classes. It also helped me with social skills, which even as a programmer is surprisingly important.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Applied, interviewed, practiced, repeat. I sent out tons of applications and put myself out there in every way I could think of. Ultimately Linkedin, Reddit, and meetups were the channels that actually got me job offers. I practiced whiteboarding algorithms and solving problems, had a lot of interviews (each better than the previous, for the most part) and continuously kept up to date on current trends and technologies.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A year is a relatively short time to have gotten where I did, and I am certain I wouldn’t have gotten there without the series of fortunate events (yes, I consider the destruction of my ankle as a fortunate event in hindsight) that allowed me to focus obsessively and full time on this pursuit. But passion is a lot stronger then luck and if one has the drive, they shouldn’t need any fortune to make things happen on their own timeline.&lt;/p&gt;
&lt;p&gt;Join the discussion &lt;a href=&quot;https://news.ycombinator.com/item?id=8954348&quot;&gt;here on Hacker News&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This post was translated into&lt;/em&gt; &lt;a href=&quot;https://essayhilfe.de/translation/#How-I-Got-a-Job-in-Web-Development:DE&quot;&gt;German&lt;/a&gt; &lt;em&gt;by&lt;/em&gt; &lt;a href=&quot;https://essayhilfe.de&quot;&gt;Essay Hilfe&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This post was also translated into&lt;/em&gt; &lt;a href=&quot;http://getcolorings.com/ru-mike-elliott-job-in-web-development&quot;&gt;Russian&lt;/a&gt; &lt;em&gt;by&lt;/em&gt; &lt;a href=&quot;http://getcolorings.com&quot;&gt;Colorings Blog&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Using Sass in Visual Studio</title><link>https://elliotec.com/using-sass-in-visual-studio/</link><guid isPermaLink="true">https://elliotec.com/using-sass-in-visual-studio/</guid><pubDate>Wed, 12 Nov 2014 16:10:00 GMT</pubDate><content:encoded>&lt;p&gt;Some may find themselves developing the front end of web applications in .NET and Visual Studio. If that’s you, I’m sorry (at least until the new cross platform open source versions come out).&lt;/p&gt;
&lt;p&gt;If you use Sass, as hopefully you do if you’re reading this, you will find yourself frustrated by the fact that Web Essentials for VS advertised as being capable of Sass compilation, but actually isn’t. The following outline is the only way I’ve been able to get Sass working in Visual Studio. This has been tested in VS 2012 and 2013.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download Mindscape Web Workbench and make sure to enable it in VS at &lt;code&gt;Tools &amp;gt; Extenstions and Updates&lt;/code&gt;. You might have to restart VS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hopefully you have a “main.scss” type file in your stylesheets directory that contains all your imports and will eventually compile into a singular minified file called in your markup (this can be added by right-clicking the stylesheets folder, and going to &lt;code&gt;Add &amp;gt; New Item &amp;gt; SCSS Stylesheet (Sass)&lt;/code&gt;, then name appropriately):&lt;/p&gt;
 &lt;img src=&quot;/images/mainsass.png&quot; alt=&quot;Visual Studio solution explorer with main.scss selected inside a stylesheets folder&quot; width=&quot;300&quot; height=&quot;240&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; /&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Go to &lt;code&gt;Tools &amp;gt; Options&lt;/code&gt; and select Web Workbench from the list. Adjust the settings so that:&lt;/p&gt;
&lt;p&gt;Compilation &amp;gt; Trigger compile on build = True&lt;/p&gt;
&lt;p&gt;Compilation &amp;gt; Disable Sass compilation = False&lt;/p&gt;
&lt;p&gt;Sass &amp;gt; Produce .css file = True&lt;/p&gt;
 &lt;img src=&quot;/images/workbench.png&quot; alt=&quot;Web Workbench compilation options: trigger compile on build set to true, Sass compilation enabled&quot; width=&quot;500&quot; height=&quot;350&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;/&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the toolbar, got to &lt;code&gt;Mindscape &amp;gt; Web Workbench Settings&lt;/code&gt; and make sure the only checkbox selected under Compile is your “main.scss” file mentioned earlier. Uncheck all the rest unless you want a million extra css files and an hour-long build:&lt;/p&gt;
 &lt;img src=&quot;/images/settings.png&quot; alt=&quot;Web Workbench compile checklist with only main.scss checked among the project stylesheets&quot; width=&quot;350&quot; height=&quot;109&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;/&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now your main.scss file will compile on build (and save, depending on your settings) and generate a main.css file in the same directory that is minifiable and browser-readable.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And thats it. Now you can write your Sass and keep your modular style structure nice and happy in Visual Studio and .NET projects. Hopefully this post will be deprecated at the release of the new versions.&lt;/p&gt;
</content:encoded></item><item><title>Writing in the Deseret Alphabet with Web Fonts</title><link>https://elliotec.com/writing-in-the-deseret-alphabet/</link><guid isPermaLink="true">https://elliotec.com/writing-in-the-deseret-alphabet/</guid><pubDate>Sun, 29 Jun 2014 15:08:00 GMT</pubDate><content:encoded>&lt;style&gt;
    @font-face {
        font-family: &apos;HuneyBee&apos;;
        src: url(&apos;/fonts/Huneybee.eot&apos;); /* IE9 Compat Modes */
        src: url(&apos;/fonts/Huneybee.eot?#iefix&apos;) format(&apos;embedded-opentype&apos;), /* IE6-IE8 */
        url(&apos;/fonts/Huneybee.woff&apos;) format(&apos;woff&apos;), /* Modern Browsers */
        url(&apos;/fonts/Huneybee.ttf&apos;)  format(&apos;truetype&apos;), /* Safari, Android, iOS */
        url(&apos;/fonts/Huneybee.svg&apos;) format(&apos;svg&apos;); /* Legacy iOS */

        font-style:   normal;
        font-weight:  400;
    }

    @font-face {
        font-family: &apos;AdamicBee&apos;;
        src: url(&apos;/fonts/AdamicBee.eot&apos;); /* IE9 Compat Modes */
        src: url(&apos;/fonts/AdamicBee.eot?#iefix&apos;) format(&apos;embedded-opentype&apos;), /* IE6-IE8 */
        url(&apos;/fonts/AdamicBee.woff&apos;) format(&apos;woff&apos;), /* Modern Browsers */
        url(&apos;/fonts/AdamicBee.ttf&apos;)  format(&apos;truetype&apos;), /* Safari, Android, iOS */
        url(&apos;/fonts/AdamicBee.svg&apos;) format(&apos;svg&apos;); /* Legacy iOS */

        font-style:   normal;
        font-weight:  400;
    }

    @font-face {
        font-family: &apos;Deseret-sans&apos;;
        src: url(&apos;/fonts/deseret.eot&apos;); /* IE9 Compat Modes */
        src: url(&apos;/fonts/deseret.eot?#iefix&apos;) format(&apos;embedded-opentype&apos;), /* IE6-IE8 */
        url(&apos;/fonts/deseret.woff&apos;) format(&apos;woff&apos;), /* Modern Browsers */
        url(&apos;/fonts/deseret.ttf&apos;)  format(&apos;truetype&apos;), /* Safari, Android, iOS */
        url(&apos;/fonts/deseret.svg&apos;) format(&apos;svg&apos;); /* Legacy iOS */

        font-style:   normal;
        font-weight:  400;
    }

    .huney {
        font-family: &quot;HuneyBee&quot;;
    }
    .deseret-sans {
        font-family: &quot;deseret&quot;;
    }
    .adamic {
        font-family: &quot;AdamicBee&quot;;
    }
&lt;/style&gt;
&lt;p&gt;&lt;em&gt;If you’re here for the code and want to skip most of the history and linguistics, &lt;a href=&quot;#code&quot;&gt;click here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-state-of-deseret&quot;&gt;The State of Deseret&lt;/h2&gt;
&lt;p&gt;This past weekend I went camping in the &lt;a href=&quot;https://en.wikipedia.org/wiki/San_Rafael_Swell&quot;&gt;San Rafael Swell&lt;/a&gt; and became interested in my native state of Utah’s history and unique culture.&lt;/p&gt;
&lt;p&gt;Evidence of humans is found in Utah for as far back as 12,000 years ago. Various Native American tribes and cultures (Freemont, Puebloan, etc.) occupied the land until the first of the Mormon pioneers arrived with their leader &lt;a href=&quot;https://en.wikipedia.org/wiki/Brigham_Young&quot;&gt;Brigham Young&lt;/a&gt; in 1847.&lt;/p&gt;
&lt;p&gt;They settled in by vastly changing the desert environment into a habitable landscape with amazing feats of industry including irrigation and agriculture, timber and mining, and constructing communities from the resources around them. They created a society from scratch.&lt;/p&gt;
&lt;p&gt;The settlers were very isolated and in a political and territorial limbo that went from technically belonging to Mexico, to a near immediate statehood proposal (&lt;a href=&quot;https://en.wikipedia.org/wiki/State_of_Deseret&quot;&gt;The State of Deseret&lt;/a&gt;), and then remaining a U.S. territory - all the while settling most of the western United States including cities like Las Vegas, San Bernardino, most of Idaho and Nevada, a good chunk of Arizona and many other western states.&lt;/p&gt;
&lt;p&gt;Brigham Young and the Mormons were the de facto government throughout this time (some say they still are) and as such were providing public necessities like schooling, and founded the precursor to the University of Utah, the University of Deseret.&lt;/p&gt;
&lt;h2 id=&quot;the-deseret-alphabet&quot;&gt;The Deseret Alphabet&lt;/h2&gt;
&lt;p&gt;This was a time when there were several efforts to reform the traditional Latin English alphabet into something phonetic, more easily taught to immigrants and children, and optimized for handwriting. Brigham Young and the board of regents of the University of Deseret saw their position as an opportunity to get in on this action.&lt;/p&gt;
&lt;p&gt;In addition to the aforementioned reasons for alphabet reform, the Mormon leadership believed a new writing system would benefit them in other ways such as more unification, solidifying their unique identity, and some speculate that there was a bit of a secret-keeping draw to it as well, though that claim has been refuted by several scholars.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Deseret_alphabet&quot;&gt;The Deseret Alphabet&lt;/a&gt; was developed over the course of several years and iterations beginning before the pioneers made their way across the plains, and finally had its first printing in 1859 by the &lt;a href=&quot;https://en.wikipedia.org/wiki/Deseret_News&quot;&gt;Deseret News&lt;/a&gt;. Periodic sample prints of the alphabet came in the newspaper until the first books were published in the late 1860’s which sold very poorly. The alphabet died with Brigham Young in 1877.&lt;/p&gt;
&lt;p&gt;It is amazing how much research there is on the Deseret Alphabet, with how few people seem to know about it. There has even been &lt;a href=&quot;http://www.deseretalphabet.info/classics/&quot;&gt;an effort to print many classic literary masterpieces&lt;/a&gt; in the alphabet. It was introduced in Unicode in 2001, allowing for hobbyists, linguists, and historians to use the alphabet more easily.&lt;/p&gt;
&lt;h2 id=&quot;learning-the-alphabet&quot;&gt;Learning the alphabet&lt;/h2&gt;
&lt;p&gt;Here’s a pronunciation table:&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Glyph&lt;/th&gt;
&lt;th&gt;IPA&lt;/th&gt;
&lt;th&gt;Sound&lt;/th&gt;
&lt;th&gt;Glyph&lt;/th&gt;
&lt;th&gt;IPA&lt;/th&gt;
&lt;th&gt;Sound&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt; 𐐀&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/iː/&lt;/td&gt;
&lt;td&gt;“e” in me&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐊&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/ʌ/&lt;/td&gt;
&lt;td&gt;“u” in luck&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐁&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/eɪ/&lt;/td&gt;
&lt;td&gt;“ay” in day&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐋&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/ʊ/&lt;/td&gt;
&lt;td&gt;“u” in pull&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐂&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/ɑː/&lt;/td&gt;
&lt;td&gt;“a” in cart&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐌&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/aɪ/&lt;/td&gt;
&lt;td&gt;“y” in my&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐃&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/ɔː/&lt;/td&gt;
&lt;td&gt;“au” in caught&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐍 &lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/aʊ/&lt;/td&gt;
&lt;td&gt;“ow” in cow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐄&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/oʊ/&lt;/td&gt;
&lt;td&gt;“o” in go&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐎&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/w/&lt;/td&gt;
&lt;td&gt;“w” in wow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐅 &lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/uː/&lt;/td&gt;
&lt;td&gt;“oo” in do&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐏 &lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/j/&lt;/td&gt;
&lt;td&gt;“y” in yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐆&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/ɪ/&lt;/td&gt;
&lt;td&gt;“i” in sit&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐐&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/h/&lt;/td&gt;
&lt;td&gt;“h” in hi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐇 &lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/ɛ/&lt;/td&gt;
&lt;td&gt;“e” in bet&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐑&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/p/&lt;/td&gt;
&lt;td&gt;“p” in pet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐈 &lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/æ/&lt;/td&gt;
&lt;td&gt;“a” in cat&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐒&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/b/&lt;/td&gt;
&lt;td&gt;“b” in boy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐉 &lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/ɒ/&lt;/td&gt;
&lt;td&gt;“o” in lot&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐓&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/t/&lt;/td&gt;
&lt;td&gt;“t” in tank&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class=&quot;table-scroll&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Glyph&lt;/th&gt;
&lt;th&gt;IPA&lt;/th&gt;
&lt;th&gt;Sound&lt;/th&gt;
&lt;th&gt;Glyph&lt;/th&gt;
&lt;th&gt;IPA&lt;/th&gt;
&lt;th&gt;Sound&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐔&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/d/&lt;/td&gt;
&lt;td&gt;“d” in dog&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐞  &lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/z/&lt;/td&gt;
&lt;td&gt;“z” in zoo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐕&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/tʃ/&lt;/td&gt;
&lt;td&gt;“ch” in church&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐟&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/ʃ/&lt;/td&gt;
&lt;td&gt;“sh” in ship&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐖 &lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/dʒ/&lt;/td&gt;
&lt;td&gt;“j” in jump&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐠&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/ʒ/&lt;/td&gt;
&lt;td&gt;“s” in measure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐗 &lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/k/&lt;/td&gt;
&lt;td&gt;“k” in kite&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐡&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/r/&lt;/td&gt;
&lt;td&gt;“r” in red&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐘&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/ɡ/&lt;/td&gt;
&lt;td&gt;“g” in girl&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐢&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/l/&lt;/td&gt;
&lt;td&gt;“l” in love&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐙&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/f/&lt;/td&gt;
&lt;td&gt;“f” in food&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐣 &lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/m/&lt;/td&gt;
&lt;td&gt;“m” in mom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐚&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/v/&lt;/td&gt;
&lt;td&gt;“v” in voice&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐤 &lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/n/&lt;/td&gt;
&lt;td&gt;“n” in night&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐛&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/θ/&lt;/td&gt;
&lt;td&gt;“th” in think&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐥 &lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/ŋ/&lt;/td&gt;
&lt;td&gt;“ng” in sing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐜 &lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/ð/&lt;/td&gt;
&lt;td&gt;“th” in that&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐦&lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/ɔɪ/&lt;/td&gt;
&lt;td&gt;“oy” in boy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐝 &lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/s/&lt;/td&gt;
&lt;td&gt;“s” in sun&lt;/td&gt;
&lt;td&gt;&lt;i class=&quot;adamic&quot;&gt;𐐧 &lt;/i&gt;&lt;/td&gt;
&lt;td&gt;/juː/&lt;/td&gt;
&lt;td&gt;“yew” in yew&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;So, ostensibly thats kind of a lot. 40 new unique characters and sounds to replace a very well known system seems a bit daunting, which may be part of the reason it had a hard time getting adopted by the intended users and audience.&lt;/p&gt;
&lt;p&gt;In my opinion, other than the glyphs looking nothing at all like their Latin counterparts, the alphabet is rather easy to learn since you are just reassigning a symbol to a sound in English. There is no grammar or syntax change, it’s really just like mind-mapping 40 pictures to 40 words for which a few hours of flash card study would be quite sufficient. (Though, this isn’t the first time I’ve learned a dead script for no reason. I once became fluent in the ancient &lt;a href=&quot;https://en.wikipedia.org/wiki/Baybayin&quot;&gt;Baybayin Tagalog script&lt;/a&gt; in a strange bout of manic overachievement.)&lt;/p&gt;
&lt;h2 id=&quot;limitations-of-the-alphabet&quot;&gt;Limitations of the alphabet&lt;/h2&gt;
&lt;p&gt;The alphabet in its official form was created to emulate the pronunciation of the settlers, who came primarily from New England. This means when you read out loud a publication in the Deseret Alphabet, it’s going to sound like you’re talking with the accent of a North Easterner in the 1860’s.&lt;/p&gt;
&lt;p&gt;A good example of change is &lt;i class=&quot;adamic&quot;&gt;“𐐃”&lt;/i&gt;, which in present-day Utah essentially doesn’t exist. Think of a Long Island native saying something like “I thought you caught it when you fought it,” or something along those lines. You know what I mean about the vowels in those words being non-existent and replaced simply with “ah” in the western United States.&lt;/p&gt;
&lt;p&gt;Another limitation is the lack of a schwa (/ə/) vowel. It sounds like the “e” in “the.” Historically the schwa has been written as &lt;i class=&quot;adamic&quot;&gt;𐐊&lt;/i&gt;, which I find odd since the symbol &lt;i class=&quot;adamic&quot;&gt;𐐋&lt;/i&gt; is much closer in my opinion. My blog, my rules, so I’ll use &lt;i class=&quot;adamic&quot;&gt;𐐋&lt;/i&gt; as the schwa from now on. Also, Deseret is cased, but the capital letters are just bigger versions of the lower case ones. So I’m going to skip using the lower case for readability and ease of use.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;anchor&quot; id=&quot;code&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;now-for-the-fun-part&quot;&gt;Now for the fun part&lt;/h2&gt;
&lt;p&gt;I went about scouring the web for better Deseret fonts. I had a lot of trouble finding a good sans-serif font. The primary resource for these and the serif fonts I found were by &lt;a href=&quot;http://www.chem.ucla.edu/~jericks/index.html&quot;&gt;Joshua Erickson&lt;/a&gt;, but alas, the entire sans-serif collection has been disabled. Bummer. At least I could use some of his serif fonts that were less harsh on the eyes than the default, and there were a few sans-serif fonts his site led me to. Here are a few font samples:&lt;/p&gt;
&lt;p class=&quot;adamic&quot;&gt;1. 𐐈𐐔𐐈𐐣𐐆𐐗𐐒𐐀： 𐐀𐐁𐐂𐐃𐐄𐐅𐐆𐐇𐐈𐐉𐐊𐐋𐐌𐐍𐐎𐐏𐐐𐐑𐐒𐐓𐐔𐐕𐐖𐐗𐐘𐐙𐐚𐐛𐐜𐐝𐐞𐐠𐐡𐐢𐐣𐐤𐐥𐐦𐐧𐐟 &lt;/p&gt;
&lt;p class=&quot;huney&quot;&gt;2. H_NIBI：ABCDEFGHIJKLMNOPQRSTUVWXYZŽÀÁÂÃÊÎÐÑÔÕÛÞ &lt;/p&gt;
&lt;p class=&quot;deseret-sans&quot;&gt;3. DEZÒRET: ABCDEFGHIJKLMNOPQRSTUVWXYZÅÆÈÊÌÍÒØÛŒˉ &lt;/p&gt;
&lt;p&gt;Unfortunately 2 and 3 (the two sans-serif) are mapped to two separate and seemingly arbitrary encodings rather than the proper Deseret Unicode characters like the serif font at the top of that list. So even though 2 (HuneyBee) is my favorite of the three, its nowhere near as easy to implement as 1 (AdamicBee).&lt;/p&gt;
&lt;p&gt;Here is the HTML source of those example fonts:&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;adamic&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;1. 𐐈𐐔𐐈𐐣𐐆𐐗𐐒𐐀： 𐐀𐐁𐐂𐐃𐐄𐐅𐐆𐐇𐐈𐐉𐐊𐐋𐐌𐐍𐐎𐐏𐐐𐐑𐐒𐐓𐐔𐐕𐐖𐐗𐐘𐐙𐐚𐐛𐐜𐐝𐐞𐐠𐐡𐐢𐐣𐐤𐐥𐐦𐐧𐐟&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;huney&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;2. H_NIBI：ABCDEFGHIJKLMNOPQRSTUVWXYZŽÀÁÂÃÊÎÐÑÔÕÛÞ&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;deseret-sans&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;3. DEZÒRET: ABCDEFGHIJKLMNOPQRSTUVWXYZÅÆÈÊÌÍÒØÛŒˉ&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can see, 1 is in the proper Deseret Unicode, and 2 and 3… aren’t. Maybe they are relics of the pre-Unicode days of Deseret, but either way I’ll be leaving them out when trying to write in it.&lt;/p&gt;
&lt;p&gt;Almost all of the fonts I tried were one .ttf file and I needed to convert them to web fonts. This was ridiculously easy with &lt;a href=&quot;http://fontprep.com/&quot;&gt;FontPrep&lt;/a&gt;. All I had to do was drag the .ttf file onto the app, and it generated a whole package of web font formats with the corresponding CSS. I highly recommend that app if you ever need to generate custom web fonts.&lt;/p&gt;
&lt;p&gt;While I’m at it, I may as well explain how I got these custom fonts to work in the asset pipeline using Sass.&lt;/p&gt;
&lt;p&gt;First, I created a /fonts directory where the rest of my asset directories are:&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;(Middleman)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;-source&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  -fonts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  -images&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  -javascripts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  -stylesheets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ...etc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;(Rails)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;-app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  -assets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -fonts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -images&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -javascripts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -stylesheets&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next, FontPrep generates four files when it receives a .ttf- .eot, .svg, .woff, and another .ttf. I put these files in the /fonts directory for all three fonts I’m using:&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;-source&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  -fonts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -AdamicBee.eot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -AdamicBee.svg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -AdamicBee.woff&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -AdamicBee.ttf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -Huneybee.eot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -Huneybee.svg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -Huneybee.woff&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -Huneybee.ttf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -deseret.eot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -deseret.svg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -deseret.woff&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    -deseret.ttf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Since I’m using &lt;a href=&quot;https://www.bourbon.io&quot;&gt;Bourbon&lt;/a&gt;, I can use the magnificent &lt;a href=&quot;https://www.bourbon.io/docs/latest&quot;&gt;font-face mixin&lt;/a&gt; (I’m also using &lt;a href=&quot;https://bitters.bourbon.io&quot;&gt;Bitters&lt;/a&gt;, so I placed these 3 lines at the bottom of the _typography.scss partial):&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;scss&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#758575DD&quot;&gt;// /bitters/_typography.scss&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;include&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; font-face&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;Huneybee&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/Huneybee&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;include&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; font-face&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;AdamicBee&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/AdamicBee&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;include&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt; font-face&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;deseret&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/deseret&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This compiles the following CSS:&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;font-face&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  font-family&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;HuneyBee&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  src&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; url&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/Huneybee.eot&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#758575DD&quot;&gt; /* IE9 Compat Modes */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  src&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; url&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/Huneybee.eot?#iefix&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; format&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;embedded-opentype&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;),&lt;/span&gt;&lt;span style=&quot;color:#758575DD&quot;&gt; /* IE6-IE8 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;       url&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/Huneybee.woff&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; format&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;woff&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;),&lt;/span&gt;&lt;span style=&quot;color:#758575DD&quot;&gt; /* Modern Browsers */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;       url&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/Huneybee.ttf&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  format&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;truetype&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;),&lt;/span&gt;&lt;span style=&quot;color:#758575DD&quot;&gt; /* Safari, Android, iOS */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;       url&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/Huneybee.svg#aa041304602ddc161943388b95e8c94f&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; format&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;svg&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#758575DD&quot;&gt; /* Legacy iOS */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  font-style&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt;   normal&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  font-weight&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;  400&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;font-face&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  font-family&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;AdamicBee&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  src&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; url&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/AdamicBee.eot&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#758575DD&quot;&gt; /* IE9 Compat Modes */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  src&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; url&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/AdamicBee.eot?#iefix&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; format&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;embedded-opentype&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;),&lt;/span&gt;&lt;span style=&quot;color:#758575DD&quot;&gt; /* IE6-IE8 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;       url&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/AdamicBee.woff&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; format&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;woff&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;),&lt;/span&gt;&lt;span style=&quot;color:#758575DD&quot;&gt; /* Modern Browsers */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;       url&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/AdamicBee.ttf&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  format&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;truetype&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;),&lt;/span&gt;&lt;span style=&quot;color:#758575DD&quot;&gt; /* Safari, Android, iOS */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;       url&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/AdamicBee.svg#159e7fbb74bf1cefffafc0996ebf38fb&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; format&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;svg&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#758575DD&quot;&gt; /* Legacy iOS */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  font-style&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt;   normal&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  font-weight&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;  400&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;font-face&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  font-family&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;Deseret-sans&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  src&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; url&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/deseret.eot&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#758575DD&quot;&gt; /* IE9 Compat Modes */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  src&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; url&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/deseret.eot?#iefix&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; format&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;embedded-opentype&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;),&lt;/span&gt;&lt;span style=&quot;color:#758575DD&quot;&gt; /* IE6-IE8 */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;       url&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/deseret.woff&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; format&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;woff&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;),&lt;/span&gt;&lt;span style=&quot;color:#758575DD&quot;&gt; /* Modern Browsers */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;       url&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/deseret.ttf&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  format&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;truetype&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;),&lt;/span&gt;&lt;span style=&quot;color:#758575DD&quot;&gt; /* Safari, Android, iOS */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;       url&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;/fonts/deseret.svg#c44a3474510e076f453a95eeee3a1178&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#B8A965&quot;&gt; format&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;svg&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#758575DD&quot;&gt; /* Legacy iOS */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  font-style&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C99076&quot;&gt;   normal&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;  font-weight&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#4C9A91&quot;&gt;  400&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Thats about as bullet-proof cross-browser compatible as you can get. A good example for why I think Sass is indispensable in modern web development. 3 simple scss lines compile to 34 lines of css with the best of the best practices.&lt;/p&gt;
&lt;p&gt;Finally, I just gave each separate font its own class in the scss that I could apply to any HTML element:&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;scss&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#758575DD&quot;&gt;// /posts.scss&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;huney&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    font-family&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;HuneyBee&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;deseret-sans&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    font-family&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;deseret&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt;adamic&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;    font-family&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;AdamicBee&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It should also be noted that I’m using Markdown for these posts, which means in this special case I just used the HTML you saw above in the Markdown file to apply those classes to the unique font examples.&lt;/p&gt;
&lt;h2 id=&quot;and-finally-a-real-writing-sample&quot;&gt;And finally, a real writing sample&lt;/h2&gt;
&lt;blockquote class=&quot;adamic&quot;&gt;𐐁 𐐐𐐧𐐣𐐊𐐤 𐐒𐐀𐐏𐐀𐐥 𐐟𐐋𐐔 𐐒𐐀 𐐁𐐒𐐋𐐢 𐐓𐐅 𐐕𐐁𐐤𐐖 𐐊 𐐔𐐌𐐑𐐋𐐡, 𐐑𐐢𐐈𐐤 𐐊𐐤 𐐆𐐤𐐚𐐁𐐠𐐊𐐤, 𐐒𐐋𐐕𐐋𐐡 𐐊 𐐐𐐉𐐘, 𐐗𐐂𐐤 𐐊 𐐟𐐆𐐑, 𐐔𐐆𐐞𐐌𐐤 𐐊 𐐒𐐆𐐢𐐔𐐀𐐥, 𐐡𐐌𐐓 𐐊 𐐝𐐂𐐤𐐆𐐓, 𐐒𐐈𐐢𐐈𐐤𐐝 𐐊𐐗𐐍𐐤𐐓𐐝, 𐐒𐐆𐐢𐐔 𐐊 𐐎𐐉𐐢, 𐐝𐐇𐐓 𐐊 𐐒𐐄𐐤, 𐐗𐐊𐐣𐐙𐐋𐐡𐐓 𐐜𐐋 𐐔𐐌𐐀𐐥, 𐐓𐐁𐐗 𐐃𐐡𐐔𐐋𐐡𐐝, 𐐘𐐆𐐚 𐐃𐐡𐐔𐐋𐐡𐐝, 𐐗𐐄𐐂𐐑𐐋𐐡𐐁𐐓, 𐐈𐐗𐐓 𐐊𐐢𐐄𐐤, 𐐝𐐂𐐢𐐚 𐐀𐐗𐐎𐐁𐐠𐐊𐐤𐐝, 𐐈𐐤𐐊𐐢𐐌𐐞 𐐊 𐐤𐐅 𐐑𐐡𐐂𐐒𐐢𐐆𐐣, 𐐑𐐆𐐕 𐐣𐐊𐐤𐐧𐐡, 𐐑𐐡𐐄𐐘𐐡𐐈𐐣 𐐊 𐐗𐐊𐐣𐐑𐐧𐐓𐐋𐐡, 𐐗𐐋𐐗 𐐊 𐐓𐐁𐐝𐐓𐐀 𐐣𐐀𐐢, 𐐙𐐌𐐓 𐐀𐐙𐐆𐐟𐐆𐐤𐐓𐐢𐐀, 𐐔𐐌 𐐘𐐈𐐢𐐈𐐤𐐓𐐢𐐀. 𐐝𐐑𐐇𐐟𐐋𐐢𐐌𐐞𐐁𐐟𐐊𐐤 𐐆𐐞 𐐙𐐄𐐡 𐐆𐐤𐐝𐐇𐐗𐐓𐐝.&lt;br&gt;&lt;br&gt;－ 𐐡𐐉𐐒𐐋𐐡𐐓 𐐐𐐌𐐤𐐢𐐌𐐤&lt;/blockquote&gt;
&lt;p&gt;That says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects.&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Robert Heinlein&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You might not notice, but the Deseret version of this quote uses 48 fewer characters than our alphabet. There’s a real argument for efficiency there. You’re never doubling characters or organizing odd vowels into diphthongs, saving lots of space.&lt;/p&gt;
&lt;blockquote class=&quot;adamic&quot;&gt;𐐎𐐀 𐐂𐐡 𐐖𐐋𐐝𐐓 𐐊𐐤 𐐈𐐔𐐚𐐈𐐤𐐝𐐓 𐐒𐐡𐐀𐐔 𐐊𐐚 𐐣𐐊𐐥𐐗𐐀𐐞 𐐂𐐤 𐐊 𐐣𐐌𐐤𐐋𐐡 𐐑𐐢𐐈𐐤𐐆𐐓 𐐊𐐚 𐐊 𐐚𐐇𐐡𐐀 𐐈𐐚𐐋𐐡𐐆𐐖 𐐝𐐓𐐂𐐡.   𐐒𐐊𐐓 𐐎𐐀 𐐗𐐈𐐤 𐐊𐐤𐐔𐐊𐐡𐐝𐐓𐐈𐐤𐐔 𐐜 𐐏𐐅𐐤𐐊𐐚𐐊𐐡𐐝. 𐐜𐐈𐐓 𐐣𐐁𐐗𐐝 𐐊𐐝 𐐝𐐊𐐣𐐛𐐀𐐥 𐐚𐐇𐐡𐐀 𐐝𐐑𐐇𐐟𐐋𐐢.&lt;b&lt;br&gt;&lt;br&gt;－𐐝𐐓𐐀𐐚𐐆𐐤 𐐐𐐃𐐗𐐀𐐥&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;We are just an advanced breed of monkeys on a minor planet of a very average star. But we can understand the Universe. That makes us something very special.&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Steven Hawking&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is very tedious to type, however. I mapped my keys to each of the Deseret characters using &lt;a href=&quot;https://folivora.ai/&quot;&gt;Better Touch Tool&lt;/a&gt;, a handy tool for lots of things, but it totally wasn’t worth it as I ended up being faster by just copy/pasting the characters from the chart in order.&lt;/p&gt;
&lt;p&gt;I thought about writing little sticky note characters and putting them on their corresponding keys, but I figured I already spent this much time learning a dead alphabet and my use of it will most likely die with the end of this post.&lt;/p&gt;
&lt;p&gt;Alright, one more thing. This is the logo of one of my favorite bars in Salt Lake City, the &lt;a href=&quot;https://www.bourbonhouseslc.com/&quot;&gt;Bourbon House&lt;/a&gt;. I’m using it without permission so if they ask me to take it down I will.&lt;/p&gt;
&lt;img src=&quot;/images/bourbon.png&quot; alt=&quot;Bourbon House SLC logo: a bearded Victorian gentleman sipping whiskey, framed by ornate lettering&quot; width=&quot;240&quot; height=&quot;393&quot; loading=&quot;eager&quot; decoding=&quot;async&quot;&gt;
&lt;p&gt;It’s a characature of Brigham Young holding a glass of bourbon,something he ironically was known to do (he even built the first whiskey distillery in Utah, go figure). It might be hard to see, but the Deseret there says: &lt;blockquote class=&quot;adamic&quot;&gt;𐐒𐐁𐐁𐐡 𐐀𐐝 𐐑𐐡𐐄𐐄𐐙 𐐓𐐐𐐂𐐓 𐐘𐐄𐐔 𐐢𐐄𐐚𐐁𐐝 𐐋𐐝&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;To a native Deseret reader, that would be utter nonsense. It sounds something like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Be-eer eess proh-ohff t-haut gohd lohveeess oooss&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It’s safe to assume that it’s trying to say “Beer is proof that God loves us.”&lt;/p&gt;
&lt;p&gt;So a more proper translation would be along the lines of:&lt;/p&gt;
&lt;blockquote class=&quot;adamic&quot;&gt;𐐒𐐁𐐡 𐐆𐐞 𐐑𐐡𐐅𐐙 𐐜𐐈𐐓 𐐘𐐉𐐔 𐐢𐐊𐐚𐐞 𐐊𐐝&lt;/blockquote&gt;
&lt;p&gt;I don’t blame them for not getting a dead script kinda wrong, especially because it’s funny and I like them a lot.&lt;/p&gt;
&lt;p&gt;If you want to learn more about the Deseret Alphabet, here are some resources I used:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update: A new, far superior &lt;a href=&quot;http://2deseret.com&quot;&gt;Deseret Translator&lt;/a&gt; has been created by Nathan Hadfield. He referenced this article as a resource that helped him build it. Please check it out!&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://www.deseretalphabet.org//&quot;&gt;The quasi-official Deseret Alphabet site&lt;/a&gt; &lt;em&gt;This site had almost all the resources I used neatly in one place, and seems to be maintained quite frequently.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://deseretalphabet.blogspot.com/&quot;&gt;Deseret Alphabet Blog&lt;/a&gt; &lt;em&gt;The owner of this blog has translated over &lt;a href=&quot;http://www.deseretalphabet.info/XKCD/1385.html&quot;&gt;50% of the XKCD comics&lt;/a&gt; into Deseret, an impressive feat no matter how pointless.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://2deseret.com/&quot;&gt;The Deseret Alphabet Translator&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anyway, thats enough of that. I probably should’ve spent this time learning a new programming language or something, but I learned a ton about my homeland’s history, web fonts, typography, linguistics, and encoding so there was no lack of intellectual stimulation.&lt;/p&gt;
&lt;p&gt;Hope you learned something too.&lt;/p&gt;
&lt;p&gt;-Mike&lt;/p&gt;
</content:encoded></item><item><title>Using Variables in YAML Front Matter</title><link>https://elliotec.com/using-variables-in-yaml-front-matter/</link><guid isPermaLink="true">https://elliotec.com/using-variables-in-yaml-front-matter/</guid><pubDate>Fri, 30 May 2014 15:08:00 GMT</pubDate><content:encoded>&lt;p&gt;##What is Front Matter?&lt;/p&gt;
&lt;p&gt;I didn’t know this until just now, but &lt;a href=&quot;https://en.wikipedia.org/wiki/Book_design#Front_matter&quot;&gt;the name comes from book design&lt;/a&gt;, where the front matter is just all the stuff before the actual body of the book. This includes the table of contents, title pages, copyright info, etc. It’s essentially all the metadata of the book.&lt;/p&gt;
&lt;p&gt;Likewise, the YAML front matter common in static-site generators like Middleman is the metadata of the current page. In my case that usually ends up being post pages where some of the dynamic data is defined:&lt;/p&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;layout&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; post&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; Using Variables in YAML Front Matter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;date&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; 2014-05-30 09:08&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;tags&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; yaml, middleman&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This makes it super easy to have various HTML layouts that you can assign to any page on your site. It also gives us the date and title options which are useful for the index, file structure, and other obvious benefits.&lt;/p&gt;
&lt;p&gt;##Setting Custom Variables&lt;/p&gt;
&lt;p&gt;I have 4 social media icon SVGs on my portfolio/main index page, and I’m currently using each of them twice - one for the contact drop-down menu, and another for the contact section at the bottom.&lt;/p&gt;
&lt;p&gt;As you can imagine, that clunked up the HTML pretty bad and it was immediately a giant pain to try and find or move anything. I wanted to DRY it up, and I knew that I could do that with Middleman.&lt;/p&gt;
&lt;p&gt;It only took 3 steps.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The first thing I did was list each of the icons by name in the front matter:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;github&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;linkedin&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;twitter&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;email&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Then I added the cumbersome svg codes to set the variables for each:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;github&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; &amp;#x3C;svg version=&quot;1.1&quot; id=&quot;Layer_1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; x=&quot;0px&quot; y=&quot;0px&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;                width=&quot;22&quot; height=&quot;20&quot; viewBox=&quot;0 0 99.441 99.44&quot; enable-background=&quot;new 0 0 99.441 99.44&quot; xml:space=&quot;preserve&quot;&gt;&amp;#x3C;path id=&quot;github&quot; fill=&quot;#fff&quot; d=&quot;M64.507,95.749c-2.439,0.474-3.303-1.026-3.303-2.307c0-1.584,0.053-6.763,0.053-13.197&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;                c0-4.486-1.535-7.412-3.259-8.905c10.707-1.189,21.958-5.257,21.958-23.727c0-5.25-1.867-9.541-4.949-12.908&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;                c0.499-1.211,2.145-6.101-0.473-12.726c0,0-4.034-1.292-13.211,4.931c-3.844-1.065-7.96-1.601-12.047-1.619&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;                c-4.088,0.018-8.201,0.554-12.036,1.619c-9.189-6.222-13.228-4.931-13.228-4.931c-2.611,6.625-0.966,11.515-0.465,12.726&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;                c-3.079,3.368-4.957,7.658-4.957,12.908c0,18.428,11.228,22.55,21.91,23.767c-1.374,1.199-2.62,3.32-3.054,6.428&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;                c-2.745,1.23-9.705,3.356-13.993-3.996c0,0-2.543-4.615-7.373-4.956c0,0-4.69-0.061-0.329,2.923c0,0,3.152,1.479,5.339,7.036&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;                c0,0,2.824,8.585,16.202,5.675c0.02,4.019,0.065,7.808,0.065,8.953c0,1.27-0.881,2.758-3.286,2.312&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;                C14.968,89.396,1.188,71.37,1.188,50.125c0-26.56,21.533-48.089,48.089-48.089c26.558,0,48.088,21.529,48.088,48.089&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;              C97.364,71.366,83.604,89.382,64.507,95.749z&quot;/&gt;&amp;#x3C;/svg&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B8A965&quot;&gt;linkedin&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt; &amp;#x3C;svg&gt; ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#80A665&quot;&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;After that it was simply a matter of calling “current_page.data” and passing the custom variable in its place in Erb:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code vitesse-dark&quot; style=&quot;background-color:#121212;color:#dbd7caee; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;erb&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#666666&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:#BD976A&quot;&gt; href&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#C98A7D&quot;&gt;https://github.com/elliotec&lt;/span&gt;&lt;span style=&quot;color:#C98A7D77&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&amp;#x3C;%=&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt; current_page&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#80A665&quot;&gt;github&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt; %&gt;&lt;/span&gt;&lt;span style=&quot;color:#DBD7CAEE&quot;&gt;Github&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#4D9375&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:#666666&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now the code base is much more DRY and modular, and the generated HTML is producing the expected behavior.&lt;/p&gt;
&lt;p&gt;You can do this in Jekyll too, but there are a few differences (basically just step 3) so &lt;a href=&quot;https://jekyllrb.com/docs/frontmatter/&quot;&gt;check out their docs if thats what you’re into&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more info on the Middleman front matter, &lt;a href=&quot;https://middlemanapp.com/basics/frontmatter/&quot;&gt;see the relevant section in the Middleman docs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;– Mike&lt;/p&gt;
</content:encoded></item><item><title>Building This Site in Middleman</title><link>https://elliotec.com/building-this-site/</link><guid isPermaLink="true">https://elliotec.com/building-this-site/</guid><pubDate>Sat, 17 May 2014 17:26:11 GMT</pubDate><content:encoded>&lt;h2 id=&quot;blogging-platforms-vs-static-site-generators&quot;&gt;Blogging platforms vs. static site generators&lt;/h2&gt;
&lt;p&gt;I had been looking around for a good way to get a portfolio site and blogging platform all in one that suited my tastes.&lt;/p&gt;
&lt;p&gt;For a short time I looked into platforms such as &lt;a href=&quot;https://ghost.org&quot;&gt;Ghost&lt;/a&gt;, &lt;a href=&quot;https://medium.com&quot;&gt;Medium&lt;/a&gt;, and &lt;a href=&quot;https://svbtle.com&quot;&gt;Svbtle&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I really liked the design, simplicity, and content-focus of those, but as a developer, I wanted something I could customize and design myself with minimal third-party interference.&lt;/p&gt;
&lt;p&gt;Then I found &lt;a href=&quot;https://jekyllrb.com&quot;&gt;Jekyll&lt;/a&gt;. I quickly realized that what I wanted was a “blog-aware” static site generator rather than a blogging platform alone. This would give me the ability to fully customize every aspect of my site while allowing me a place to write posts.&lt;/p&gt;
&lt;p&gt;I had Jekyll installed and running on a development server in a minute or two. I was able to acquaint myself with the directory structure fairly quickly after going through the docs a bit and looking at some example sites - my favorite of which is &lt;a href=&quot;https://quaran.to&quot;&gt;quaran.to&lt;/a&gt;, the personal blog of Nick Quaranto.&lt;/p&gt;
&lt;p&gt;It uses the Liquid Templating Engine, which is a “Ruby library for rendering safe templates which cannot affect the security of the server they are rendered on.” It looks remarkably like erb in Handlebars. It didn’t take much getting used to, but I was slightly annoyed that a Ruby-driven framework wasn’t just using erb.&lt;/p&gt;
&lt;p&gt;In addition to that slight inconvenience, I had to use the pre-release version of Jekyll in order to have Sass and CoffeeScript support - not a huge deal until I found the hard way that if hosting on Github pages (one of Jekyll’s major selling points), you are limited to the version they use.&lt;/p&gt;
&lt;p&gt;So my options were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Write a Rake task that compiles Sass and CoffeeScript&lt;/li&gt;
&lt;li&gt;Use and configure plugins&lt;/li&gt;
&lt;li&gt;Wait for Jekyll 2.0 to be released and then Github Pages to adopt it&lt;/li&gt;
&lt;li&gt;Use a different generator&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;finding-middleman&quot;&gt;Finding Middleman&lt;/h2&gt;
&lt;p&gt;I had all but given up on Jekyll when 2.0 was released. I was excited, but a bit disillusioned. I found out from &lt;a href=&quot;https://news.ycombinator.com/item?id=7708142&quot;&gt;This Hacker News Post&lt;/a&gt;, and the top comment was the elusive solution to all my static site-generating problems: &lt;a href=&quot;https://middlemanapp.com&quot;&gt;Middleman&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Middleman’s file structure was immediately familiar and it’s Rails-like atmosphere sold me instantly. erb instead of Liquid-Ruby-Handlebars? Check. Sass and CoffeeScript support out of the box? Check. Ability to host on Github Pages, Heroku, or any other production environment imaginable with little configuration? Check, check, and check.&lt;/p&gt;
&lt;p&gt;Now I could finally get to the fun part and design my site. I came accross these two posts that were immensely helpful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/andrewholsted/fajitanachos.com/blob/source/source/posts/2013-08-10-Goodbye-jekyll.html.markdown&quot;&gt;FajitaNachos’s post entitled ‘Goodbye Jekyll’&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://thoughtbot.com/blog/middleman-bourbon-walkthrough&quot;&gt;Thoughtbot’s post entitled ‘Styling a Middleman Blog with Bourbon, Neat, and Bitters’&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What you see here is the result of this process. In a future post, I’ll describe some of the methodology I used in the site’s creation and give some code samples and tips I found useful in it’s development. In the meantime, check out the code on &lt;a href=&quot;https://github.com/elliotec/ellio2&quot;&gt;my Github&lt;/a&gt; if you wish.&lt;/p&gt;
</content:encoded></item></channel></rss>