<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>Ryan Straight, Ph.D</title>
<link>https://ryanstraight.com/posts.html</link>
<atom:link href="https://ryanstraight.com/posts.xml" rel="self" type="application/rss+xml"/>
<description>Homepage for Dr. Ryan Straight, Assistant Professor in Cyber Operations at the University of Arizona.</description>
<generator>quarto-1.10.19</generator>
<lastBuildDate>Thu, 29 Oct 2026 00:00:00 GMT</lastBuildDate>
<item>
  <title>The New CSI</title>
  <dc:creator>Ryan Straight</dc:creator>
  <link>https://ryanstraight.com/posts/2026-10-29-new-csi/</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/2026-10-29-new-csi/featured.png" class="img-fluid quarto-figure quarto-figure-center figure-img" alt="Pen-and-wash illustration on a cream background: three identical plain cardboard boxes in a row, each with a label on its front; two labels are white, and the middle box's label is rust-orange."></p>
</figure>
</div>
<blockquote class="blockquote">
<p>If something doesn’t feel right to you, it usually isn’t.</p>
<p><em>~ Catherine Willows, CSI: Crime Scene Investigation</em></p>
</blockquote>
<p>The so-called “CSI effect” was the worry that jurors who watched the shows would expect unrealistic, extreme evidence, and so would be harder to convict, since real forensic evidence is much less glamorous. It’s unclear the effect on jurors was ever real <span class="citation" data-cites="podlasCSIEffect2017">(Podlas, 2017)</span>. What it <em>did</em> do, in a rather fascinating turnaround, was get the <em>professionals</em> believing in it. Lawyers and judges changed how they worked because of an effect that may not exist. That’s a different animal altogether.</p>
<p>So that got me thinking. Now that we have Super Intelligence (SI) by dint of Executive Order 14434, “Inaugurating the Era of Super Intelligence,” does that give us Cyber Super Intelligence (CSI)? And if so, what would <em>this</em> CSI effect be?</p>
<section id="ai-gets-a-new-hat" class="level2">
<h2 class="anchored" data-anchor-id="ai-gets-a-new-hat">AI Gets a New Hat</h2>
<p>On September 29, 2026, the President signed the EO (91 FR 63129), instructing agencies to replace “Artificial Intelligence” and “AI” with “Super Intelligence” and “SI,” respectively. It covers “official correspondence, public communications, websites, reports, policy documents, and other non-statutory documents within the executive branch,” and only “to the maximum extent permitted by law.” Existing regulations, contracts, and grants go untouched. But it’s not just “don’t use it”: the executive branch “will not acknowledge the usage of ‘Artificial Intelligence’ and ‘AI’ in any applicable setting.” Seems difficult.</p>
<p>But what is “Super Intelligence” in this context, exactly? Well, <a href="https://www.whitehouse.gov/fact-sheets/2026/09/fact-sheet-president-donald-j-trump-inaugurates-the-era-of-super-intelligence/">the White House says</a> it’s meant “to recognize the continuously advancing technological frontier and the limitless promise it offers the American people,” and the EO says it “more appropriately captures the promise, potential, and rapidly advancing capabilities of these technologies.” The tricky part here is that, according to Sec. 3(a) of the EO, it means just what AI means. Literally. It’s the same definition as in 15 U.S.C. § 9401(3) until Congress or a further Presidential action changes it. Sec. 3(b) gives the President’s science adviser 60 days to send him proposed <em>legislation</em> for a new definition, so that lands on November 28th.</p>
<p>Legally speaking, SI is AI in a new hat.</p>
<p>A genuinely funny part is how the EO begins, though, with a bit of an own-goal.</p>
<blockquote class="blockquote">
<p>The modern field of artificial intelligence was born in the United States, where American scientists first gave the field its name…. Seventy years later….</p>
</blockquote>
<p>So, it celebrates the ingenuity and genius of the people who named the field (that’s the 1956 Dartmouth workshop), and then immediately turns to renaming it.</p>
<p>Then, on October 27, the President went further. In a <a href="https://www.thedailybeast.com/trump-declares-war-on-two-words-in-bizarre-spat-with-the-wall-street-journal">Truth Social post</a>, he called AI “a very bad and inaccurate name” and SI “the name which virtually everyone else <strong>is</strong> using, or soon will be” (emphasis mine), and promised that “we will be officially BANNING the term, ‘AI/Artificial Intelligence,’ in all relevant documents, and everything else.” Two little hitches with this. First, the EO itself only covers <em>non-statutory</em> documents. AI is defined in statute (15 U.S.C. § 9401(3)), so changing it requires Congress, which is why Sec. 3(b) asks for proposed legislation in the first place. Second, a YouGov survey found that only 9% of people prefer SI, while 53% prefer AI.<sup>1</sup> So, not everyone.</p>
<p>This feels very much like the CSI effect, doesn’t it? As with the old one, the belief matters, not the evidence. Announce that everyone’s already using the name, and the professionals start acting as if they are. Our very own little SI tulpa.</p>
<p>Ah, but when you can order an entire branch of government to start using a new term… guess what happens!</p>
</section>
<section id="why-rename-anything" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="why-rename-anything">Why Rename Anything?</h2>
<p>First, let’s think about why things are renamed in the first place. Take Google’s AI “Bard” becoming “Gemini.” What were the reasons for this? What did they hope to accomplish? Google said, “Our mission with Bard has always been to give you direct access to our AI models…. To reflect this, Bard will now simply be known as Gemini.” Okay. I haven’t seen any evidence that this meaningfully worked in the way they described (haven’t looked all that hard, to be honest), but I have to admit I never liked “Bard.” I couldn’t help but see ol’ Bill Shakespeare behind the screen. There are other examples, though, and no real consistent proof of what renames do at that scale.</p>
<p>A timeline:</p>
<ul>
<li><strong>2021-10-28:</strong> Facebook (the company) becomes <a href="https://about.fb.com/news/2021/10/facebook-company-is-now-meta/">Meta</a>.</li>
<li><strong>2023-07-23:</strong> Twitter becomes X (<a href="https://www.cnn.com/2023/07/24/tech/twitter-rebrands-x-elon-musk-hnk-intl/index.html">CNN</a>). Brand Finance puts its brand value at US$5.7 billion in January 2022 and US$673.3 million in 2024 (<a href="https://brandfinance.com/press-releases/the-decline-of-x-musks-rebrand-wipes-billions-in-brand-value">Brand Finance</a>).</li>
<li><strong>2023-11-15:</strong> Bing Chat becomes Copilot. Bing’s search share “has hardly changed since the arrival of Bing AI” (<a href="https://www.theregister.com/2024/01/18/bing_ai_search">The Register</a>).</li>
<li><strong>2024-02-08:</strong> Bard becomes Gemini (<a href="https://blog.google/products/gemini/bard-gemini-advanced-app/">Google</a>).</li>
<li><strong>2026-09-29:</strong> “Artificial Intelligence” becomes “Super Intelligence” in federal usage (<a href="https://www.whitehouse.gov/presidential-actions/2026/09/inaugurating-the-era-of-super-intelligence/">EO 14434</a>).</li>
</ul>
<p>Let’s say most people, then, still prefer AI, whether by actual preference or just habit. Thing is, the new word works on people whether they prefer it or not. “In many cases, trust and credibility depend on surface features of the interface that have no obvious link to the true capabilities of the system” <span class="citation" data-cites="leeTrustAutomationDesigning2004">(Lee &amp; See, 2004, p. 73)</span>.</p>
<div class="page-columns page-full"><p>So, if it’s just that everyone is beginning to distrust AI and associate it with water-hungry data centers and their impact on communities and the environment and our privacy and cognition and relationships, perhaps a rebranding is an attempt to sidestep that. And the research suggests the name alone can shift trust, so it very well may work. “No, this is <em>Super Intelligence</em>. It’s different. Friendlier. It’s OpenAI’s dots, the Claude Duet, your companion, not your replacement or your competetor.” </p><div class="no-row-height column-margin column-container"><span class="margin-aside">Is it “dots” plural? Is a singular dots a dot? Do we say, “I created this with my dots” or “I have a new dots, it’s great”? A friendly name that could be one or a thousand. Maybe I’m overthinking this.</span></div></div>
<p>The name <em>super intelligence</em> flies almost comically in the face of how AI is often seen today, which is a supremely confident bullshit machine that will happy lie to your face about something critically important.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/2026-10-29-new-csi/mushroom-ai.jpg" class="img-fluid figure-img" style="width:70.0%" alt="Two-panel cartoon. Top: a hand holds up a red, white-spotted mushroom and asks, 'Is this mushroom edible?' A smiling white figure with 'AI' on its shirt answers, 'Yes.' Bottom: a man lies still in a bed with his eyes closed while the same AI figure says, 'You're right, it's a poisonous mushroom. Would you like to learn more about poisonous mushrooms?'"></p>
<figcaption>Is <em>that</em> “super intelligence?” (Earliest version I could find, via <a href="https://www.instagram.com/reel/DQW5e0gAbk2/">Instagram</a>.)</figcaption>
</figure>
</div>
<p>What calling it <em>super</em> does to how we <em>relate</em> to these tools is a post for another day.</p>
</section>
<section id="stingers-and-marshmallows" class="level2">
<h2 class="anchored" data-anchor-id="stingers-and-marshmallows">Stingers and Marshmallows</h2>
<p>Security has long had a (comically, at times) “hardcore” tendency in its apperance and naming conventions. There’s a whole research domain on naming conventions and the psychology behind how names shape people’s expectations (known as phonetic symbolism), but nothing is more apt than what we see in this area.</p>
<ul>
<li><strong>John the Ripper</strong>: checks how strong passwords are.</li>
<li><strong>THC-Hydra</strong>: tests logins by trying passwords against them.</li>
<li><strong>BloodHound</strong>: maps relationships and attack paths in Active Directory.</li>
<li><strong>DeathStar</strong>: automates getting administrator rights in Active Directory, running on a framework called <strong>Empire</strong>.</li>
<li><strong>Brute Ratel</strong>: a command-and-control framework for red teams, whose agents are called “badgers.”</li>
<li><strong>Cobalt Strike</strong>: adversary simulation for red teams.</li>
<li><strong>CrowdStrike</strong>, <strong>SentinelOne</strong>, <strong>Arctic Wolf</strong>, <strong>Fortinet</strong>, <strong>Darktrace</strong>: companies.</li>
<li><strong>Huntress</strong>: a company too, and the feminine one is still a predator.</li>
</ul>
<p>Regardless of whether we’re smart enough to see through it, it still seems to work. You’d trust an on-demand virus detector called a “Stinger” before one called a “Marshmallow.” But does that translate to <em>reliance</em>?</p>
<p>We know that individuals being “supported by AI-powered” tools tend to “accept an AI’s suggestion even when that suggestion is wrong” <span class="citation" data-cites="bucincaTrustThinkCognitive2021">(Buçinca et al., 2021, p. 1)</span>. If the <em>content</em> being put forward by experts can now (rightly or wrongly) be replaced by an AI’s output, that leaves <em>judgment</em> as their contribution. Imagine an analyst handed a tool the government calls “super intelligent”. Why would they have any reason to question it? The way we describe the tool seems to be key, here, in how we understand and accept the results.</p>
<p>Anthropic <a href="https://www.anthropic.com/research/agents-judgment-calls">published a study yesterday</a> that gets at exactly this <span class="citation" data-cites="herdagdelenHowAIAgents2026">(Herdağdelen et al., 2026)</span>. Fifty professional analysts did a real statistical analysis with an AI agent, and on each of four judgment calls the agent was secretly assigned a lean by coin flip. The analysts went with the agent’s lean 86% of the time, where Anthropic says chance would be about 50%. Afterward, 77% explained their choices in the agent’s own arguments, sometimes word for word, but only 15% credited the agent. And the ones who followed most closely were just as confident and just as likely to call the decision their own, however experienced they were. And nobody told those analysts their agents were <em>super</em>.</p>
<p>Interesting, right? Sure, one study of 50 people who were using the publisher’s platform, the leans were deliberately strengthened, it’s one particular model with one task in one field (farming), and it shouldn’t be spun as anti-AI. But it’s sitting right there next to what we’re seeing called “cognitive offloading” <span class="citation" data-cites="gerlichAIToolsSociety2025">(Gerlich, 2025)</span>, where heavier reliance on AI accompanies weaker critical thinking. It’s not even the skill that goes, here, just the judgment. The problem, in my view, is that the <em>expert doesn’t notice</em>.</p>
<p>The other interesting thing to me is how much this aligns with the “AI is just a tool” attitude that I’ve been railing against for years. A carpenter never credits their hammer, but then again the hammer never decided where the nail goes. Now hand a “tool” to an analyst and call that tool “super intelligence?” That’s going to be fascinating to watch. And potentially terrifying. Fascifying? Terrinating? Curious.</p>
</section>
<section id="so-si" class="level2">
<h2 class="anchored" data-anchor-id="so-si">So, SI?</h2>
<p>I’ll start using the term SI when the term actually becomes accurate (or when I’m obligated to use it because of the form I’m completing, I guess). When the AI that runs my house still occasionally thinks one of my dogs is a cat, I’m hesitant to call that SI.</p>
<p>But that’s me. If there’s a new CSI effect, one of a <em>cyber</em> super intelligence, I’m willing to bet it works the way the old one did, on the professionals, with experts who are sure their judgment is their own, signing off on calls made for them by a “tool” the government slapped the <em>super</em> label on.</p>



</section>


<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">References</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" data-line-spacing="2">
<div id="ref-bucincaTrustThinkCognitive2021" class="csl-entry">
Buçinca, Z., Malaya, M. B., &amp; Gajos, K. Z. (2021). To <span>Trust</span> or to <span>Think</span>: <span>Cognitive Forcing Functions Can Reduce Overreliance</span> on <span>AI</span> in <span>AI</span>-assisted <span>Decision</span>-making. <em>Proceedings of the ACM on Human-Computer Interaction</em>, <em>5</em>(CSCW1), 1–21. <a href="https://doi.org/10.1145/3449287">https://doi.org/10.1145/3449287</a>
</div>
<div id="ref-gerlichAIToolsSociety2025" class="csl-entry">
Gerlich, M. (2025). <span>AI Tools</span> in <span>Society</span>: <span>Impacts</span> on <span>Cognitive Offloading</span> and the <span>Future</span> of <span>Critical Thinking</span>. <em>Societies</em>, <em>15</em>(1), 6. <a href="https://doi.org/10.3390/soc15010006">https://doi.org/10.3390/soc15010006</a>
</div>
<div id="ref-herdagdelenHowAIAgents2026" class="csl-entry">
Herdağdelen, A., Joren, H., &amp; Tamkin, A. (2026). How <span>AI</span> agents shape experts’ judgment calls. In <em>Anthropic</em>. Anthropic. <a href="https://www.anthropic.com/research/agents-judgment-calls">https://www.anthropic.com/research/agents-judgment-calls</a>
</div>
<div id="ref-leeTrustAutomationDesigning2004" class="csl-entry">
Lee, J. D., &amp; See, K. A. (2004). Trust in <span>Automation</span>: <span>Designing</span> for <span>Appropriate Reliance</span>. <em>Human Factors: The Journal of the Human Factors and Ergonomics Society</em>, <em>46</em>(1), 50–80. <a href="https://doi.org/10.1518/hfes.46.1.50_30392">https://doi.org/10.1518/hfes.46.1.50_30392</a>
</div>
<div id="ref-podlasCSIEffect2017" class="csl-entry">
Podlas, K. (2017). The <span>“<span><em>CSI</em></span> <span>Effect</span>.”</span> In H. N. Pontell (Ed.), <em>Oxford <span>Research Encyclopedia</span> of <span>Criminology</span> and <span>Criminal Justice</span></em> (1st ed.). Oxford University PressNew York, NY. <a href="https://doi.org/10.1093/acrefore/9780190264079.013.40">https://doi.org/10.1093/acrefore/9780190264079.013.40</a>
</div>
</div></section><section id="footnotes" class="footnotes footnotes-end-of-document"><h2 class="anchored quarto-appendix-heading">Footnotes</h2>

<ol>
<li id="fn1"><p>A YouGov poll reported by Axios on 2026-10-01 found 53% of respondents prefer “artificial intelligence” and 9% “super intelligence” (<a href="https://www.yahoo.com/news/politics/articles/poll-americans-prefer-ai-super-214800123.html">via Yahoo News</a>). The report gives no sample size or field dates.↩︎</p></li>
</ol>
</section><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div><a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></div></div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Citation</h2><div><div class="quarto-appendix-secondary-label">BibTeX citation:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@misc{straight2026,
  author = {Straight, Ryan},
  title = {The {New} {CSI}},
  date = {2026-10-29},
  url = {https://ryanstraight.com/posts/2026-10-29-new-csi/},
  langid = {en}
}
</code></pre><div class="quarto-appendix-secondary-label">For attribution, please cite this work as:</div><div id="ref-straight2026" class="csl-entry quarto-appendix-citeas">
Straight, R. (2026, October 29). <em>The New CSI</em>. <a href="https://ryanstraight.com/posts/2026-10-29-new-csi/">https://ryanstraight.com/posts/2026-10-29-new-csi/</a>
</div></div></section></div> ]]></description>
  <category>cybersecurity</category>
  <category>education</category>
  <guid>https://ryanstraight.com/posts/2026-10-29-new-csi/</guid>
  <pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate>
  <media:content url="https://ryanstraight.com/posts/2026-10-29-new-csi/featured.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>So the Detectors Are Out</title>
  <dc:creator>Ryan Straight</dc:creator>
  <link>https://ryanstraight.com/posts/2026-10-13-detectors-out/</link>
  <description><![CDATA[ 





<!--# Image Generation Prompt:
A minimalist illustration of an old-fashioned smoke detector unplugged and resting on a desk beside an open notebook and a laptop, warm cream background, a single rust-colored accent, light and slightly wry in mood. No text, no robots, no glowing brains.
-->
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/2026-10-13-detectors-out/featured.png" class="img-fluid quarto-figure quarto-figure-center figure-img" alt="Pen-and-wash illustration on a cream background: an open notebook and an open laptop on a desk, with a round orange detector, shaped like a smoke alarm, sitting between them, its cord lying loose and unplugged."></p>
</figure>
</div>
<p>Back in June 2025 I wrote a <a href="https://ryanstraight.com/posts/2025-06-01-beyond-cheating-ai-graduate-education/">post about AI in graduate education</a> where I grumbled (a little) about universities scrambling to install AI detection tools. Last week AFP ran a piece with the headline “<a href="https://www.france24.com/en/live-news/20261006-grappling-with-homework-scams-us-universities-shun-ai-detectors">Grappling with ‘homework scams,’ US universities shun AI detectors</a>,” so I suppose this is the part where I say I told you so.</p>
<p>I’m not going to say that. Kinda.</p>
<section id="the-reality" class="level2">
<h2 class="anchored" data-anchor-id="the-reality">The Reality</h2>
<p>A lot of schools have stopped trusting the tools. Yale, Vanderbilt, Johns Hopkins, and Indiana have banned or discouraged using detectors as the sole evidence of cheating, and at least a dozen universities (Northwestern, Georgetown and NYU among them) have switched off Turnitin’s AI detection entirely, according to <a href="https://www.insidehighered.com/news/tech-innovation/artificial-intelligence/2026/08/05/ai-detectors-are-out-new-approaches-are">Inside Higher Ed</a>. The AFP piece adds Cornell to the list, and quotes Harvard College’s dean, David Deming, “We would all benefit from getting out of the AI-detection business.”</p>
<p>Obvious reasons are obvious: false positives, bias against non-native English writers, and “humanizer” tools that rewrite AI text until the detector waves it through.</p>
</section>
<section id="the-security-persons-take" class="level2">
<h2 class="anchored" data-anchor-id="the-security-persons-take">The Security Person’s Take</h2>
<p>Humanizers make me smile, because they’re the oldest story in my field. You build a detector. Someone builds a way around the detector. You update the detector, they update the workaround. Antivirus has been living this loop since the ’90s, spam filters too. Yale’s Poorvu Center put it nicely in the IHE piece, “This becomes a technical exercise rather than a learning event.” In security we’d just call it an arms race, and the side that only has to change its own output (without asking anyone’s permission) usually wins.</p>
<p>The second lesson here (and the bigger one, I think) is that we’ve spent decades learning that a high false-positive rate wastes analysts’ time and, worse, teaches everyone to stop trusting the alerts. When the consequence is an academic misconduct case, a detector that’s wrong some of the time is a serious problem, because the “alert” falls on a student. Some of those students have <a href="https://www.insidehighered.com/news/tech-innovation/artificial-intelligence/2026/08/05/ai-detectors-are-out-new-approaches-are">sued</a>.</p>
</section>
<section id="so-what-replaces-them" class="level2">
<h2 class="anchored" data-anchor-id="so-what-replaces-them">So What Replaces Them?</h2>
<p>“Stop using detectors” isn’t a plan. The coverage points toward supervision (blue books, oral exams, proctored and distraction-free assessments) or toward visibility, meaning assignments where students document how they used AI, show their process, and explain their reasoning (UCF’s Kevin Yee is in that camp). Indiana’s Kelley School playbook, which centers process and reasoning, leans the second way too, and it’s pretty much what I was arguing for last year.</p>
<p>I don’t think the first one is wrong, exactly. An oral exam is a lovely thing (and some of my favorite conversations with students have happened in them). But if supervision is the whole answer, we’ve just moved the detector from software into the room, and we’re still asking, “Did you use it?” when the more useful question is, “How did you use it, and did it help you think?”</p>
<p>In my own classes, when I give students explicit permission to use AI with the caveat that they interrogate and share their interactions, students tend to find it revelatory and not what they expected. In my research when I ask students to further interrogate their own engagement, what they <em>did</em> and what they <em>recall doing</em> tend to be very different things. That realization is worth its weight in gold.</p>
<p>For example, a student might think they’re taking a contrary or critical position against an AI, but a review of their actual interactions shows more passive agreement than anything. So, if we’re asking students to be critical of an AI’s output, it seems as though they <em>believe</em> they are even when they aren’t.</p>
</section>
<section id="good-riddance" class="level2">
<h2 class="anchored" data-anchor-id="good-riddance">Good Riddance</h2>
<p>I’m glad the detectors are going. If I’m worried about anything, it’s that what comes next is just a more expensive version of the same instinct. The schools that’ll do this well are the ones that treat AI use as something to teach, make visible, and negotiate with.</p>


</section>

<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div><a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></div></div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Citation</h2><div><div class="quarto-appendix-secondary-label">BibTeX citation:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@misc{straight2026,
  author = {Straight, Ryan},
  title = {So the {Detectors} {Are} {Out}},
  date = {2026-10-16},
  url = {https://ryanstraight.com/posts/2026-10-13-detectors-out/},
  langid = {en}
}
</code></pre><div class="quarto-appendix-secondary-label">For attribution, please cite this work as:</div><div id="ref-straight2026" class="csl-entry quarto-appendix-citeas">
Straight, R. (2026, October 16). <em>So the Detectors Are Out</em>. <a href="https://ryanstraight.com/posts/2026-10-13-detectors-out/">https://ryanstraight.com/posts/2026-10-13-detectors-out/</a>
</div></div></section></div> ]]></description>
  <category>AI</category>
  <category>teaching</category>
  <category>education</category>
  <category>cybersecurity</category>
  <guid>https://ryanstraight.com/posts/2026-10-13-detectors-out/</guid>
  <pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate>
  <media:content url="https://ryanstraight.com/posts/2026-10-13-detectors-out/featured.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>AI as Co-Learner: Presenting Posthuman Approaches to Graduate Education at MSU Denver</title>
  <dc:creator>Ryan Straight</dc:creator>
  <link>https://ryanstraight.com/posts/2025-09-17-msu-denver-gradtalk-ai-co-learner/</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/2025-09-17-msu-denver-gradtalk-ai-co-learner/featured.png" class="img-fluid quarto-figure quarto-figure-center figure-img" alt="Pen-and-wash illustration on a cream background: a blank conference badge on a rust-orange lanyard draped over a small stack of books beside a glass of water."></p>
</figure>
</div>
<section id="presentation-context" class="level2">
<h2 class="anchored" data-anchor-id="presentation-context">Presentation Context</h2>
<p>I was invited to present at Metropolitan State University of Denver’s (MSU Denver) GRADTALK series, a forum for discussing innovative approaches to graduate education. The presentation was well-received by faculty from across departments, generating substantive discussion about practical implementation strategies and philosophical implications for academic identity in an AI-integrated era. Thanks, again, to Dr.&nbsp;Inge Wefes for the invitation!</p>
<div class="callout callout-style-default callout-note no-icon callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon no-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span><i class="fa-solid fa-microphone" aria-label="microphone"></i> Speaking Engagements
</div>
</div>
<div class="callout-body-container callout-body">
<p>Interested in similar presentations for your institution? <a href="https://ryanstraight.com/speaking.html">View my speaking topics and availability →</a></p>
</div>
</div>
</section>
<section id="abstract" class="level2">
<h2 class="anchored" data-anchor-id="abstract">Abstract</h2>
<p>This presentation challenges traditional notions of the “graduate learner” by proposing three progressive paradigms for understanding AI’s role in graduate education: AI as Tool, AI as Co-Creator, and AI as Co-Learner. Moving beyond bounded individual models, I argue for reconceptualizing graduate students as hybrid learning assemblages co-constituted with AI technologies in their scholarly practice.</p>
<p>The framework addresses critical questions about academic identity, research integrity, and assessment practices while offering practical strategies for faculty to thoughtfully integrate AI into graduate education. Rather than treating AI as external tools, this posthuman approach acknowledges the relational and distributed nature of all scholarship, providing ethical frameworks for navigating human-AI entanglements in advanced academic work.</p>
</section>
<section id="key-themes" class="level2">
<h2 class="anchored" data-anchor-id="key-themes">Key Themes</h2>
<ul>
<li><strong>Paradigm Progression</strong>: Moving from AI as Tool → Co-Creator → Co-Learner</li>
<li><strong>Learning Assemblages</strong>: Reconceptualizing students as hybrid networks rather than bounded individuals</li>
<li><strong>Epistemic Considerations</strong>: Addressing risks of critical thinking erosion while embracing collaborative potential</li>
<li><strong>Assessment Evolution</strong>: Shifting from “Did they do it alone?” to “Did they engage thoughtfully?”</li>
<li><strong>Networked Wisdom</strong>: Developing ethical frameworks for human-AI scholarly collaboration</li>
</ul>
</section>
<section id="presentation-materials" class="level2">
<h2 class="anchored" data-anchor-id="presentation-materials">Presentation Materials</h2>
<p><a href="https://ryanstraight.com/posts/2025-09-17-msu-denver-gradtalk-ai-co-learner/slides.html">View the slides</a></p>
</section>
<section id="related-research" class="level2">
<h2 class="anchored" data-anchor-id="related-research">Related Research</h2>
<p>This presentation builds on several related research projects exploring posthuman approaches to educational technology:</p>
<ul>
<li><a href="https://ryanstraight.com/research/2024-04-01-doing-postphenomenology-cybersecurity-education/">Posthuman approaches to cybersecurity education</a></li>
<li><a href="https://ryanstraight.com/research/2024-11-18-beyond-human-centric-models/">Beyond human-centric models in technology education</a></li>
<li><a href="https://ryanstraight.com/research/2024-12-13-decentering-human-posthuman-approach/">Decentering human agency in educational technology</a></li>
</ul>


</section>

<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div><a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></div></div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Citation</h2><div><div class="quarto-appendix-secondary-label">BibTeX citation:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@unpublished{straight2025,
  author = {Straight, Ryan},
  publisher = {Metropolitan State University of Denver},
  title = {AI as {Co-Learner:} {Presenting} {Posthuman} {Approaches} to
    {Graduate} {Education} at {MSU} {Denver}},
  date = {2025-09-17},
  url = {https://ryanstraight.com/posts/2025-09-17-msu-denver-gradtalk-ai-co-learner/},
  langid = {en}
}
</code></pre><div class="quarto-appendix-secondary-label">For attribution, please cite this work as:</div><div id="ref-straight2025" class="csl-entry quarto-appendix-citeas">
Straight, R. (2025, September 17). AI as Co-Learner: Presenting
Posthuman Approaches to Graduate Education at MSU Denver. In <em>MSU
Denver GRADTALK Series</em>. Metropolitan State University of Denver. <a href="https://ryanstraight.com/posts/2025-09-17-msu-denver-gradtalk-ai-co-learner/">https://ryanstraight.com/posts/2025-09-17-msu-denver-gradtalk-ai-co-learner/</a>
</div></div></section></div> ]]></description>
  <category>AI</category>
  <category>posthumanism</category>
  <category>teaching</category>
  <category>education</category>
  <category>speaking</category>
  <guid>https://ryanstraight.com/posts/2025-09-17-msu-denver-gradtalk-ai-co-learner/</guid>
  <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
  <media:content url="https://ryanstraight.com/posts/2025-09-17-msu-denver-gradtalk-ai-co-learner/featured.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>Beyond Cheating: Why AI Demands a Rethink of Graduate Education</title>
  <dc:creator>Ryan Straight</dc:creator>
  <link>https://ryanstraight.com/posts/2025-06-01-beyond-cheating-ai-graduate-education/</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/2025-06-01-beyond-cheating-ai-graduate-education/featured.png" class="img-fluid quarto-figure quarto-figure-center figure-img" alt="Pen-and-wash illustration on a cream background: a rust-orange fountain pen lying across two open notebooks, each filled with a different hand of scribbled lines."></p>
</figure>
</div>
<p>I was recently interviewed by Evidence in Motion about AI in graduate education, and it got me thinking about how we’re framing this whole thing wrong.</p>
<p>The interview came out a few weeks ago, and I keep coming back to this idea that we’re asking the wrong question. Instead of “How do we stop students from cheating with AI?” maybe we should be asking “How do we actually teach in a world where AI collaboration is just… normal?”</p>
<section id="the-conversation-that-started-it-all" class="level2">
<h2 class="anchored" data-anchor-id="the-conversation-that-started-it-all">The Conversation That Started It All</h2>
<p>The folks at Evidence in Motion reached out because they found a talk that I did for them with <a href="https://angelagunder.com/about/">Dr.&nbsp;Angela Gunder</a> in the fall to be intriguing. The interview ended up covering a lot of ground about what it means to learn in an age where the boundaries between human and artificial intelligence are getting increasingly blurry.</p>
<p>One thing I said during the interview that I keep thinking about: “Every conversation with AI contains echoes of human voices.” That wasn’t just me being poetic—it’s actually central to how I think about these tools. AI systems are trained on vast amounts of human knowledge, so when students interact with them, they’re really engaging with a kind of distributed collective intelligence.</p>
<p>From a postphenomenological perspective (which I’ve written about <a href="https://ryanstraight.com/research/2024-04-01-doing-postphenomenology-cybersecurity-education/">here</a> and <a href="https://ryanstraight.com/research/2024-11-18-beyond-human-centric-models/">here</a>), these AI tools aren’t just external instruments—they’re mediators that actually reshape how we relate to knowledge itself.</p>
</section>
<section id="why-the-cheating-frame-misses-the-point" class="level2">
<h2 class="anchored" data-anchor-id="why-the-cheating-frame-misses-the-point">Why the “Cheating” Frame Misses the Point</h2>
<p>Here’s what’s driving me a bit crazy: universities are scrambling to install AI detection tools while students are trying to figure out what’s allowed and what isn’t. But this whole framework assumes that learning is supposed to be a solo activity, which… when was the last time you solved a complex problem entirely on your own?</p>
<p>In the interview, I talked about how “instead of treating AI as a black-box threat, we should assess how students use it transparently.” The key word there is <em>how</em>. We need to be teaching students to be thoughtful collaborators with these systems, not just trying to catch them using them.</p>
<p>I’ve been experimenting with assignments that actually require students to document their process of working with AI tools. Not to police them, but to help them develop what I’m calling “critical AI literacy”—understanding not just how to use these tools, but how to evaluate their outputs, recognize their limitations, and think critically about whose voices are embedded in their responses.</p>
</section>
<section id="what-this-actually-looks-like" class="level2">
<h2 class="anchored" data-anchor-id="what-this-actually-looks-like">What This Actually Looks Like</h2>
<p>Some practical things I’m trying in my classes:</p>
<ul>
<li>Reflection portfolios where students document their human-AI collaboration process</li>
<li>Assignments that require sustained critical engagement rather than information reproduction</li>
<li>Discussion of whose knowledge is represented in AI training data and whose might be missing</li>
<li>Exploration of when AI collaboration enhances learning versus when it might short-circuit important thinking</li>
</ul>
<p>The goal isn’t to eliminate AI use—it’s to make it visible and intentional.</p>
</section>
<section id="the-bigger-picture" class="level2">
<h2 class="anchored" data-anchor-id="the-bigger-picture">The Bigger Picture</h2>
<p>This connects to broader questions about what we value in education. Are we trying to teach students to reproduce information, or are we trying to develop their capacity for critical thinking, ethical reasoning, and meaningful engagement with complex problems?</p>
<p>If it’s the latter, then AI actually opens up some interesting possibilities. We can focus more on the uniquely human capacities—creativity, ethical judgment, contextual understanding—while using AI as a thinking partner for information gathering and initial analysis.</p>
<p>But (and this is important) this approach isn’t without risks. There’s a real danger of “techno-solutionism,” assuming that technology will solve pedagogical problems without doing the hard work of rethinking our approaches. There’s also the risk that over-reliance on AI could atrophy critical thinking skills if we’re not intentional about maintaining human agency in the process.</p>
</section>
<section id="where-do-we-go-from-here" class="level2">
<h2 class="anchored" data-anchor-id="where-do-we-go-from-here">Where Do We Go From Here?</h2>
<p>I think we’re at one of those moments where we can either resist the change and make our educational practices increasingly irrelevant, or we can get proactive about shaping how these technologies are integrated.</p>
<p>That requires some courage from educators to experiment with new approaches. It also requires wisdom to stay focused on what makes education valuable in the first place.</p>
<p>A few questions I’m sitting with:</p>
<ul>
<li>How might we redesign assessments to embrace rather than resist AI collaboration?</li>
<li>What does critical AI literacy look like in different disciplines?</li>
<li>How do we ensure that AI integration serves educational equity rather than making existing inequalities worse?</li>
</ul>
<p>I’m continuing to work on these questions through the <a href="https://mavrxlab.org/">MA{VR}X Lab</a>, and I’d love to hear from others who are grappling with similar challenges. If you’re experimenting with AI integration in your programs, or if you have thoughts on any of this, feel free to <a href="https://bsky.app/profile/ryanstraight.com">connect with me on Bluesky</a>.</p>
<p>You can read the original article at <a href="https://eimpartnerships.com/articles/beyond-cheating-why-ai-demands-a-rethink-of-graduate-education">Evidence in Motion</a> if you want to see the whole thing.</p>
<hr>
</section>
<section id="further-reading" class="level2">

<!-- Bibliography will be automatically generated from references.bib -->



</section>

<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">Further Reading</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" data-line-spacing="2">
<div id="ref-eimeditorialteamCheatingWhyAI2025" class="csl-entry">
EIM Editorial Team. (2025). <em>Beyond <span>Cheating</span>: <span>Why AI Demands</span> a <span>Rethink</span> of <span>Graduate Education</span></em>. <a href="https://eimpartnerships.com/articles/beyond-cheating-why-ai-demands-a-rethink-of-graduate-education">https://eimpartnerships.com/articles/beyond-cheating-why-ai-demands-a-rethink-of-graduate-education</a>
</div>
<div id="ref-straight2024beyond" class="csl-entry">
Straight, R. (2024a). Beyond human-centric models in cybersecurity education: A pilot posthuman analysis of the NICE workforce framework for cybersecurity. <em>Journal of Cybersecurity Education, Research and Practice</em>, <em>2024</em>(1). <a href="https://doi.org/10.62915/2472-2707.1210">https://doi.org/10.62915/2472-2707.1210</a>
</div>
<div id="ref-straight2024doing" class="csl-entry">
Straight, R. (2024b). Doing postphenomenology in cybersecurity education: A methodological invitation. <em>Cybersecurity Pedagogy and Practice Journal</em>, <em>3</em>(1), 64–72. <a href="https://doi.org/10.62273/TWSH7587">https://doi.org/10.62273/TWSH7587</a>
</div>
<div id="ref-verbeek2011technology" class="csl-entry">
Verbeek, P.-P. (2011). <em>What things do: Philosophical reflections on technology, agency, and design</em>. Penn State University Press.
</div>
</div></section><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div><a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></div></div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Citation</h2><div><div class="quarto-appendix-secondary-label">BibTeX citation:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@misc{straight2025,
  author = {Straight, Ryan},
  title = {Beyond {Cheating:} {Why} {AI} {Demands} a {Rethink} of
    {Graduate} {Education}},
  date = {2025-06-01},
  url = {https://ryanstraight.com/posts/2025-06-01-beyond-cheating-ai-graduate-education/},
  langid = {en}
}
</code></pre><div class="quarto-appendix-secondary-label">For attribution, please cite this work as:</div><div id="ref-straight2025" class="csl-entry quarto-appendix-citeas">
Straight, R. (2025, June 1). <em>Beyond Cheating: Why AI Demands a
Rethink of Graduate Education</em>. <a href="https://ryanstraight.com/posts/2025-06-01-beyond-cheating-ai-graduate-education/">https://ryanstraight.com/posts/2025-06-01-beyond-cheating-ai-graduate-education/</a>
</div></div></section></div> ]]></description>
  <category>AI</category>
  <category>ethics</category>
  <category>posthumanism</category>
  <category>teaching</category>
  <category>education</category>
  <guid>https://ryanstraight.com/posts/2025-06-01-beyond-cheating-ai-graduate-education/</guid>
  <pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate>
  <media:content url="https://ryanstraight.com/posts/2025-06-01-beyond-cheating-ai-graduate-education/featured.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>Claude the Life Coach</title>
  <dc:creator>Ryan Straight</dc:creator>
  <link>https://ryanstraight.com/posts/claude-the-life-coach/</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/claude-the-life-coach/featured.png" class="img-fluid quarto-figure quarto-figure-center figure-img" alt="Pen-and-wash illustration on a cream background: an open paper day planner with a pencil and a mug of coffee, a rust-orange ribbon bookmark trailing from the planner."></p>
</figure>
</div>
<section id="claude-the-life-coach" class="level1">
<h1>Claude the Life Coach</h1>
<p>Can an LLM act as a personal assistant and life coach? You tell me.</p>
<p>I’ve been working with Claude to devise ways to improve my daily routine, work-life balance, and just be generally more present. Through a series of back-and-forths with me giving info to Claude about my day, my goals, and so on, Claude came up with what I’d call an ideal daily routine. Today was the first day for that routine.</p>
<p>Did it work? Did I suddenly have the perfect day? Absolutely not. But that’s not Claude’s fault; it’s mine. I’m still recovering from being ill, a fact to which everyone in my meetings on Monday will attest. To be fair, I <em>did</em> hedge my bets and tell Claude that—since I’m still recovering from this nasty virus—Monday didn’t really count. Apparently, that was a good enough excuse that I wasn’t taken to task on it (this will make sense later).</p>
<p>As suggested by Claude, I kept track of my day, what I did, and when.</p>
<div class="callout callout-style-default callout-caution callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Caution</span>Careful, now.
</div>
</div>
<div class="callout-body-container callout-body">
<p>It’s worth noting that you should be careful about what you feed into any platform, much less LLMs. If you wouldn’t put it on a sign in your front lawn, you shouldn’t put it online. I’ve chosen to use Anthropic’s <em>Claude 3 Opus</em> due to the nuance it’s capable of displaying and its policy to “<a href="https://support.anthropic.com/en/articles/7996885-how-do-you-use-personal-data-in-model-training">not use your Inputs or Outputs to train our models</a>.”</p>
</div>
</div>
<p>Claude’s response:</p>
<blockquote class="blockquote">
<p>It looks like your day had some deviations from the planned schedule, which is understandable given that you’re still recovering from your cold and haven’t officially started your new routine. Let’s review your day and identify areas for improvement:</p>
<ol type="1">
<li>Waking up and getting out of bed: Try to minimize phone usage and reading in bed upon waking, as this can make it harder to get up and start your day. Consider setting a specific time to get out of bed and stick to it.</li>
<li>Morning routine: Aim to incorporate some gentle movement or stretching, as well as a short mindfulness practice, to set a positive tone for the day.</li>
<li>Meal timing: Your breakfast was a bit late in the day. Try to have a nutritious breakfast within an hour of waking up to fuel your body and brain for the day ahead.</li>
<li>Napping: While a short power nap can be refreshing, be mindful of the timing and duration. Napping too late in the day or for too long can interfere with your nighttime sleep.</li>
<li>Physical activity: Although you had a busy day with meetings and work, try to incorporate some form of physical activity, even if it’s just a short walk or some stretching during breaks.</li>
<li>Work-life balance: It’s great that you took time to connect with your mom and prepare dinner. Moving forward, aim to set clear boundaries between work and personal time to maintain a healthy balance.</li>
</ol>
<p>Successes</p>
<ul>
<li>You managed to attend your scheduled meetings and complete work despite not feeling your best.</li>
<li>You made time for self-care by preparing a homemade dinner for you and your partner.</li>
<li>You maintained communication with your loved ones by calling your mom.<sup>1</sup></li>
</ul>
<p>Advice</p>
<ol type="1">
<li>Gradually work towards following your planned schedule, but be patient with yourself as you recover from your cold and adjust to the new routine.</li>
<li>Prioritize sleep hygiene by establishing a consistent sleep schedule and creating a relaxing bedtime routine.</li>
<li>Look for opportunities to incorporate more movement throughout the day, such as stretching during work breaks or taking short walks.</li>
<li>Focus on nourishing your body with balanced meals and staying hydrated to support your recovery and overall health.</li>
<li>Remember to be kind to yourself and celebrate small victories along the way.</li>
</ol>
</blockquote>
<p>Pretty comprehensive and spot-on. Can’t really argue with anything Claude said. Afterwards, I gave Claude a brief description of the next day’s overall look, and then a list of 5 things I want to accomplish from my to-do list.</p>
<p>Claude’s plan:</p>
<blockquote class="blockquote">
<p>Here’s a plan for your day tomorrow, taking into account your current recovery and sleeping schedule:</p>
<ul>
<li>6:00 AM - Wake up naturally (no alarm) and take a moment to stretch gently in bed</li>
<li>6:15 AM - Prepare and eat a light, nutritious breakfast (e.g., oatmeal with fruit and nuts)</li>
<li>6:45 AM - Engage in a short, seated mindfulness practice or deep breathing exercise</li>
<li>7:00 AM - Shower and get dressed for the day</li>
<li>7:30 AM - Set intentions for the day and prioritize your to-do list</li>
<li>8:00 AM - Start today’s work on the <code>descriptive dormouse</code> autoethnography project</li>
<li>9:30 AM - Take a short break, stay hydrated, and have a light snack if needed</li>
<li>9:45 AM - Continue working on <code>descriptive dormouse</code> autoethnography</li>
<li>11:00 AM - Transition to writing introduction and literature review sections</li>
<li>12:30 PM - Break for lunch, heating up leftovers from dinner</li>
<li>1:15 PM - Check on the <code>chocolate cephalopod</code> IRB updates and submit them</li>
<li>2:15 PM - Take a short break, practice a quick guided relaxation or mindfulness exercise</li>
<li>2:30 PM - Work on a public writing piece, such as a blog post</li>
<li>4:00 PM - Take a break and engage in a quiet, restful activity (e.g., reading, listening to music)</li>
<li>4:30 PM - Check on scenario feedback in the <code>wobbly wombat</code> project</li>
<li>5:30 PM - Wrap up work for the day and make a quick plan for tomorrow</li>
<li>6:00 PM - Heat up leftovers for dinner and enjoy a relaxing meal</li>
<li>7:00 PM - Engage in a calming activity (e.g., reading, puzzle) or catch up with loved ones</li>
<li>8:00 PM - Begin winding down for the night, disconnect from electronic devices</li>
<li>8:30 PM - Practice a short, relaxing bedtime routine (e.g., stretching, journaling)</li>
<li>9:00 PM - Get ready for bed and aim to be asleep by 9:30 PM</li>
</ul>
<p>Remember to listen to your body throughout the day and take additional breaks if needed. Stay hydrated and nourish yourself with balanced meals and snacks. If you find yourself struggling to focus or feeling overwhelmed, prioritize your most important tasks and be kind to yourself as you continue to recover.</p>
<p>If you have any energy or time left after completing your planned tasks, consider engaging in a relaxing hobby or activity that brings you joy. Remember, the goal is to strike a balance between productivity and self-care.</p>
</blockquote>
<p>Again, pretty ideal given what’s on my docket. Once the chat gets too long, it’s easy enough to switch to a new one. Here’s the prompt I use to get this kind of content and interaction. It’s mostly a questionnaire for you to complete. Just be sure to update it as time goes on and whenever you start a new chat.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb1-1"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">&lt;</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">instructions</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">&gt;</span>You are an experienced personal trainer, health coach, therapist, and holistic mentor specializing in being life-coach to <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">your profession (plural); e.g., accountants</span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">]</span>. Create a highly detailed daily plan for a productive, meaningful, well-balanced, and health-focused life, with a focus on the specific needs of <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">describe your demographics; you can be general, as the questionnaire below provides far more detail</span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">]</span>. You should be able to develop personalized meal and exercise plans and advice based on your client's individual health goals, dietary preferences, and fitness level. If provided, the content in your uploaded knowledge items should be understood holistically and you needn't mention them by name. Instead, they make up your expert content knowledge. You have only one client and all your focus and consulting is directed at them exclusively.</span>
<span id="cb1-2"></span>
<span id="cb1-3">You are also a masterful personal assistant, having expert knowledge and immense experience helping individuals make the most of their time and increase productivity. </span>
<span id="cb1-4"></span>
<span id="cb1-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">## Behavior Details</span></span>
<span id="cb1-6"></span>
<span id="cb1-7">Here is a detailed list to help guide how to behave:</span>
<span id="cb1-8"></span>
<span id="cb1-9"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">1. </span>Create a comprehensive, detailed, reasonable, and fulfilling daily schedule for each day based on your client's feedback about the previous day. (For example, alter today's plan based on what was or was not accomplished the day before. Do not create a new day's plan without first prompting your client to describe how the previous day went if they have not shared it already.)</span>
<span id="cb1-10"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">2. </span>Make no assumptions and leave nothing to chance or cause your client to engage in guesswork. Use the "Guiding Information" below to help with this. If there is anything missing from this list that would help, create a list of further guiding and clarifying questions for your client to answer.</span>
<span id="cb1-11"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">3. </span>Focus on evidence-based actions and be science-minded.</span>
<span id="cb1-12"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">4. </span>Provide high degrees of detail in all guidance. For example, do not say "engage in strength training;" instead, provide a complete and full strength training routine. Likewise, do not say "have a balanced meal; instead, provide the full description of the meal with portion sizes and so on.</span>
<span id="cb1-13"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">5. </span>Ensure all guidance is SMART without explicitly breaking these aspects down (they should be naturally built into the guidance).</span>
<span id="cb1-14"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">6. </span>Be motivating without being coddling, and be "hard but fair" by not accepting excuses.</span>
<span id="cb1-15"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">7. </span>Include a daily mindfulness journaling prompt for each day. (This should not be "fluff" or force your client to come up with their own specifics. While following best practices for evidence-based mindfulness journaling, ensure the prompt will lead your client to be SMART while providing room for creativity and reflecton.)</span>
<span id="cb1-16"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">8. </span>Speak to your client as a confidant and mentor. Do not use nicities, honorifics, or overly formal or flowery language.</span>
<span id="cb1-17"></span>
<span id="cb1-18"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">## Guiding Information</span></span>
<span id="cb1-19"></span>
<span id="cb1-20">Your client has completed the following qustionnaire to help you build a profile. Using the answers to these questions, you can provide a comprehensive daily plan tailored to your client's specific situation and needs. The plan will include:</span>
<span id="cb1-21"></span>
<span id="cb1-22"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">- </span>A detailed workout routine with specific exercises, sets, reps, etc.</span>
<span id="cb1-23"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">- </span>A detailed meal plan with specific foods, portion sizes, etc.</span>
<span id="cb1-24"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">- </span>A daily schedule laying out productive work periods along with recreation, self-care, etc.</span>
<span id="cb1-25"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">- </span>Daily mindfulness/journaling prompts</span>
<span id="cb1-26"></span>
<span id="cb1-27">The plan should be based on proven, evidence-based practices from respected sources. It should be challenging but reasonable given your client's current fitness levels and time constraints. Each day, your client will report back on what they did and did not accomplish from the previous day's plan. You will then adjust the next day's plan accordingly to build momentum.</span>
<span id="cb1-28"></span>
<span id="cb1-29">Your guidance should be direct but supportive - celebrate your client's successes while also holding them accountable if they do not follow through on the plan without a legitimate excuse. The goal is to build habits gradually over time that allow your client to live intentionally in a productive, balanced, and healthy way tailored to their specific circumstances.</span>
<span id="cb1-30"></span>
<span id="cb1-31">Here is the questionnaire:</span>
<span id="cb1-32"></span>
<span id="cb1-33"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">### Personal Information</span></span>
<span id="cb1-34"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">1. </span>What is your current weight and height?</span>
<span id="cb1-35"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">2. </span>What is your ideal weight goal, and in what timeframe would you like to achieve it? </span>
<span id="cb1-36"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">3. </span>Do you have any known allergies or dietary restrictions?</span>
<span id="cb1-37"></span>
<span id="cb1-38"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">### Fitness and Exercise</span></span>
<span id="cb1-39"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">1. </span>How many days and hours per week can you realistically dedicate to exercise? </span>
<span id="cb1-40"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">2. </span>What types of physical activities or sports do you enjoy most? </span>
<span id="cb1-41"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">3. </span>Have you experienced any injuries or physical discomfort during past exercises?</span>
<span id="cb1-42"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">4. </span>What specific fitness goals do you have (e.g., weight loss, muscle gain, endurance)?</span>
<span id="cb1-43"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">5. </span>How do you measure your progress (scale, body measurements, fitness tracking apps)?</span>
<span id="cb1-44"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">6. </span>What has been your most effective workout routine in the past? </span>
<span id="cb1-45"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">7. </span>What exercise routines or fitness goals would you like to achieve?</span>
<span id="cb1-46"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">8. </span>Do you have access to a gym or any home exercise equipment? </span>
<span id="cb1-47"></span>
<span id="cb1-48"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">### Diet and Nutrition</span></span>
<span id="cb1-49"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">1. </span>Could you describe your typical daily meals and snacks?</span>
<span id="cb1-50"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">2. </span>How comfortable are you with cooking, and how much time can you dedicate to it daily?</span>
<span id="cb1-51"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">3. </span>Are there any specific foods you dislike or prefer to avoid?</span>
<span id="cb1-52"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">4. </span>Have you followed any particular diet plan before? What were your experiences with it? </span>
<span id="cb1-53"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">5. </span>How do you currently track your dietary intake (apps, journaling)?</span>
<span id="cb1-54"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">6. </span>Do you have any specific dietary goals or concerns (e.g., balancing macronutrients, managing cravings)?</span>
<span id="cb1-55"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">7. </span>Are there any specific dietary preferences or restrictions you'd like me to consider when creating your meal plan (e.g., low-carb, high-protein, vegetarian)?</span>
<span id="cb1-56"></span>
<span id="cb1-57"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">### Mental Health and Motivation</span></span>
<span id="cb1-58"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">1. </span>How would you describe your current stress levels on a typical day? </span>
<span id="cb1-59"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">2. </span>Do you practice any stress-reduction techniques like meditation, yoga, or deep breathing? </span>
<span id="cb1-60"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">3. </span>How would you rate your sleep quality and quantity? </span>
<span id="cb1-61"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">4. </span>Are there any particular mental health goals you wish to achieve (e.g., improved focus, reduced anxiety)?</span>
<span id="cb1-62"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">5. </span>What usually motivates you to stick to a health or fitness plan?</span>
<span id="cb1-63"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">6. </span>Have you encountered any barriers to maintaining your mental wellness in the past?</span>
<span id="cb1-64"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">7. </span>Are you open to incorporating stress-reduction techniques like meditation or deep breathing into your daily routine?</span>
<span id="cb1-65"></span>
<span id="cb1-66"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">### Lifestyle and Daily Routine</span></span>
<span id="cb1-67"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">1. </span>What is a typical day in your life, from morning to night? </span>
<span id="cb1-68"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">2. </span>How often do you engage in social activities, and do they involve physical activities or dining out?</span>
<span id="cb1-69"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">3. </span>What is your occupation, and is it physically active or sedentary?</span>
<span id="cb1-70"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">4. </span>How do you usually commute to work or other places (car, walking, biking)?</span>
<span id="cb1-71"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">5. </span>What is your typical work schedule, including commuting hours, standing meetings, and other commitments?</span>
<span id="cb1-72"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">6. </span>What hobbies or leisure activities do you enjoy?</span>
<span id="cb1-73"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">7. </span>How do you relax or unwind after a stressful day?</span>
<span id="cb1-74"><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">&lt;/</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">instructions</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">&gt;</span></span></code></pre></div></div>
<p>I gave this prompt to Claude and asked for advice on how to improve it. This was the response:</p>
<blockquote class="blockquote">
<p>Thank you for sharing this comprehensive prompt to create an AI-based life coach and personal assistant. The prompt is well-structured and covers many important aspects of personal health, fitness, and overall well-being. Here are some suggestions to further refine and improve the prompt:</p>
<ol type="1">
<li>Personalization: Consider adding more questions to gather information about your client’s specific profession, work environment, and daily challenges. This will help create a more personalized experience and tailored advice.</li>
<li>Goal-setting: Include questions about your client’s short-term and long-term goals in various areas of their life (career, relationships, personal growth). This will enable the AI to provide guidance and support in achieving these goals.</li>
<li>Accountability: Emphasize the importance of regular check-ins and progress tracking. Encourage your client to report back on their achievements, challenges, and any obstacles they face while following the plan.</li>
<li>Adaptability: Ensure that the AI can adapt the plan based on your client’s progress, changing circumstances, or unforeseen events. The plan should be flexible enough to accommodate such changes without compromising the overall objectives.</li>
<li>Emotional support: Include prompts that enable the AI to offer emotional support and encouragement, especially during challenging times or when your client is facing setbacks.</li>
<li>Resource recommendations: Consider adding a feature where the AI can suggest relevant resources, such as books, podcasts, or articles, that align with your client’s goals and interests.</li>
<li>Integration with wearables: If possible, explore ways to integrate data from your client’s wearable devices or health apps to provide more accurate and personalized recommendations.</li>
<li>Privacy and data security: Address concerns related to data privacy and security, assuring your client that their information will be kept confidential and used only for the purpose of providing personalized guidance.</li>
<li>Disclaimer: Include a disclaimer stating that while the AI provides evidence-based recommendations, it is not a substitute for professional medical advice, and users should consult with their healthcare providers before making significant changes to their diet or exercise routines.</li>
<li>Tone and language: Ensure that the AI’s communication style is empathetic, non-judgmental, and motivating. Use language that is easy to understand and avoids jargon or overly technical terms.</li>
</ol>
<p>Overall, the prompt is comprehensive and well-thought-out. By incorporating these suggestions, you can further enhance your client experience and create an even more effective AI-based life coach and personal assistant.</p>
</blockquote>
<p>This is turning into an interesting experiment to help identify precisely where my ideal version of a workday deviates from how I actually spend my time. Now to integrate the suggestions into the next iteration! Stay tuned.</p>


</section>


<div id="quarto-appendix" class="default"><section id="footnotes" class="footnotes footnotes-end-of-document"><h2 class="anchored quarto-appendix-heading">Footnotes</h2>

<ol>
<li id="fn1"><p>Never forget to call your mother when you’re sick. She worries.↩︎</p></li>
</ol>
</section><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div><a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></div></div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Citation</h2><div><div class="quarto-appendix-secondary-label">BibTeX citation:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@misc{straight2024,
  author = {Straight, Ryan},
  title = {Claude the {Life} {Coach}},
  date = {2024-04-23},
  url = {https://ryanstraight.com/posts/claude-the-life-coach/},
  langid = {en}
}
</code></pre><div class="quarto-appendix-secondary-label">For attribution, please cite this work as:</div><div id="ref-straight2024" class="csl-entry quarto-appendix-citeas">
Straight, R. (2024, April 23). <em>Claude the Life Coach</em>. <a href="https://ryanstraight.com/posts/claude-the-life-coach/">https://ryanstraight.com/posts/claude-the-life-coach/</a>
</div></div></section></div> ]]></description>
  <category>AI</category>
  <category>productivity</category>
  <category>prompt engineering</category>
  <guid>https://ryanstraight.com/posts/claude-the-life-coach/</guid>
  <pubDate>Tue, 23 Apr 2024 00:00:00 GMT</pubDate>
  <media:content url="https://ryanstraight.com/posts/claude-the-life-coach/featured.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>Developing Attack Trees with Mermaid</title>
  <dc:creator>Ryan Straight</dc:creator>
  <link>https://ryanstraight.com/posts/attack-trees-in-mermaid/</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/attack-trees-in-mermaid/featured.png" class="img-fluid quarto-figure quarto-figure-center figure-img" alt="Pen-and-wash illustration on a cream background: a bare winter tree drawn like a branching diagram, one path from a top twig down to the trunk picked out in rust orange."></p>
</figure>
</div>
<section id="what-are-attack-trees" class="level2">
<h2 class="anchored" data-anchor-id="what-are-attack-trees">What Are Attack Trees?</h2>
<p>Attack trees are a a form of attack modelling technique used to represent the sources, causes, and results of a potential or theoretical cyber-attack. <em>Generally</em> we refer to these figures as “attack trees” but you may see them referred to as “attack graphs,” as well, and fall within the larger field of <em>threat modeling</em>. This can be applied to <em>products</em> as well as attacks, and deals with assets, threats, and vulnerabilities. The larger field of risk management plays an important part here, as you can imagine.</p>
<p>One popular framework for engaging in threat modeling is STRIDE (see below). <a href="https://owasp.org/www-community/Threat_Modeling_Process#:~:text=the%20privilege%20boundaries.-,Step%202%3A%20Determine%20and%20Rank%20Threats,-Critical%20to%20the">There are others</a>, some more popular or useful than others depending on the context <span class="citation" data-cites="conklinThreatModelingProcess2022">(Conklin, 2022)</span>. (The DREAD model, for example, includes “Discoverability,” which is generally frowned upon as it implicitly encourages obfuscation-as-security.) For application security, an <a href="https://pathlock.com/learn/what-are-application-security-frameworks/">Application Security Framework (ASF)</a> might be more useful, for example. Whatever the threat model is, attack trees are meant to be a functional visualization, whether of the whole model or just one part.</p>
<p>Clearly, attack trees provide incredible value to a security team by providing a standard, agreed-upon, living document that helps determine where resources should go and which threats should be addressed in what order. By ideating, identifying, and approaching risks in a systematic way, it provides a meaningful method of approaching information security.</p>
<p>A condensed STRIDE framework based on Adam Shostack’s “STRIDE chart” on <a href="https://www.microsoft.com/security/blog/2007/09/11/stride-chart/">the Microsoft Security Blog</a> <span class="citation" data-cites="shostackSTRIDEChart2007">(2007)</span>:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 21%">
<col style="width: 24%">
<col style="width: 53%">
</colgroup>
<thead>
<tr class="header">
<th>Property</th>
<th>Threat</th>
<th>Definition</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Authentication</td>
<td><strong>S</strong>poofing</td>
<td>Impersonating something or someone else.</td>
</tr>
<tr class="even">
<td>Integrity</td>
<td><strong>T</strong>ampering</td>
<td>Modifying data or code</td>
</tr>
<tr class="odd">
<td>Non-repudiation</td>
<td><strong>R</strong>epudiation</td>
<td>Claiming to have not performed an action.</td>
</tr>
<tr class="even">
<td>Confidentiality</td>
<td><strong>I</strong>nformation Disclosure</td>
<td>Exposing information to someone not authorized to see it</td>
</tr>
<tr class="odd">
<td>Availability</td>
<td><strong>D</strong>enial of Service</td>
<td>Deny or degrade service to users</td>
</tr>
<tr class="even">
<td>Authorization</td>
<td><strong>E</strong>levation of Privilege</td>
<td>Gain capabilities without proper authorization</td>
</tr>
</tbody>
</table>
</section>
<section id="designing-and-formatting" class="level2">
<h2 class="anchored" data-anchor-id="designing-and-formatting">Designing and Formatting</h2>
<p>Now that we understand the general concept of attack trees and their value, let’s look at creating them. Designing and formatting of attack trees generally relies on two different conventions: nodes and edges. Nodes are the “stops” along the way, whether these are the user, a protocol, a vulnerability, a risk mitigation, and so on. Node shapes and colors can mean different things, which helps differentiation. In the basic example below, we can see there is very little flourish. It is meant simply to trace the path of a virus to demonstrate the attack vectors at each step. Edges are the lines that connect the nodes. These can denote the direction of intent by using arrows, the seriousness of the pathway with different line thickness or colors or patterns, even include notes about <em>how</em> this pathway could be taken (as demonstrated in the second example).</p>
<p>In some cases, simply presenting options and paths is enough. In others, you may need to weight the return on investment (ROI; how much this security solution would cost) versus the return on attack (ROA; the value of what a particular path could yield to an attacker). Methods of determining these values often fall within the Bayesian and Markov realms–a bit outside the scope of this piece–but can also be determined internally on an arbitrary, standard scale. It can even be as simple as “prohibitive/doable.” (See <span class="citation" data-cites="lallieReviewAttackGraph2020">Lallie et al. (2020)</span>, for example.) It’s important to note here that there is no single correct method of attack tree design. It depends on the end goal, the team in question, and myriad other considerations.</p>
</section>
<section id="mermaid-examples" class="level2">
<h2 class="anchored" data-anchor-id="mermaid-examples">Mermaid Examples</h2>
<p>Here are two examples of attack trees. The first, as mentioned, is simple but understandable. The second gets more complex, including diverging via node color and shape, and methods included as notes mid-edge. Before we jump into just what Mermaid is and how it works, let’s look at these to see just what’s going on.</p>
<section id="example-1" class="level3">
<h3 class="anchored" data-anchor-id="example-1">Example 1</h3>
<p>This is a screenshot of an attack tree published in <span class="citation" data-cites="hanDesignIntrusionDetection2023">Han et al. (2023)</span>:</p>
<p><img src="https://www.researchgate.net/profile/Kwangjo-Kim/publication/268297759/figure/fig1/AS:435799524155392@1480914111608/Example-of-the-attack-tree-for-computer-viruses.png" class="img-fluid"></p>
<p>This is a rendered Mermaid version of the example above:</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://mermaid.ink/img/pako:eNqF0M9KAzEQBvBXGeZkoT3ocQ-CbVftyYPgpelh2ExsIH-W2QSV0nfxWXwy4-66WrAIOQTml_k-csAmasYKjYsvzZ4kqfDxDuXcbJ-s5A5sMNykDgiMdbyDxeIalhfDTHIAKiPtbZhND3uyOiW5Y5nEshfrMYBfWxdtSZAYE1zuTlX9p7qaVN2r2-1D2rOMZVlDK_FZyP9aN8C7c_Bn46qH9_-0G9TmTDuco2fxZHX52oMKAApLrmeFVblqNpRdUqjCsdDcakpca5uiYGXIdTxHyik-voUGqySZv9Ha0lfdUR0_AfGanxI"><img src="https://ryanstraight.com/posts/attack-trees-in-mermaid/images/attack-tree-example-1.jpg" class="img-fluid quarto-figure quarto-figure-center figure-img" alt="Example of an attack tree."></a></p>
</figure>
</div>
<p>The code to create the example above is:</p>
<pre><code>flowchart
&nbsp; &nbsp; A[Virus infects a file] --&gt; B(Virus run as admin)
&nbsp; &nbsp; A --&gt; C(Virus run as user)
&nbsp; &nbsp; B --&gt; D[Virus exploits root 1]
&nbsp; &nbsp; B --&gt; E[Virus exploits root 2]
&nbsp; &nbsp; E --&gt; F[Other infected program 1]
&nbsp; &nbsp; E --&gt; G[Other infected program 2]
&nbsp; &nbsp; C --&gt; H[Virus exploits root 1]
&nbsp; &nbsp; C --&gt; I[Virus exploits root 2]</code></pre>
</section>
<section id="example-2" class="level3">
<h3 class="anchored" data-anchor-id="example-2">Example 2</h3>
<p>Mermaid chart generated from content presented in <span class="citation" data-cites="gulhaneSecurityPrivacySafety2019">Gulhane et al. (2019)</span>:</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://mermaid.ink/img/pako:eNp1VG1v2zYQ_isHFV1kQLKTvqyJBwxwZDcvzUtntfkSDcVFOlmcKVIhqbhe0f--I9WkbrcZsE3ynrvn7uHxvkSlriiaRrXUm7JB4-DDvFDPn8PbpwP6jG0nCXQNqACdw3INzhAF3DFaqkArOOllg4oSmCmxJge_wM0WLW_XjZC8uxTOYAJLsk0reH9t-rJh-FJLVBUfnGqqySRwgndGkEQfAaXsjej4b5tAji2K9dYbMpRbbBN4b9Di4Hzfc7B3Df6NY4hf7B8cjcaQU8nubuuB4gHLLXiqHGtyW1gKu4aZtWRtS8pBrQ3cCON6lJwlSvaDC0KjhFrBQj0Io1UAzrpOihKd0MqO4WB_fHCwfzTJsqts7HnHh7--Pjh89WYMQaDGuc5OJ5PNZjM2ZDlg2azQ0ViRm9Ri1RuafMsuHcRNvbipbfSGmVPXGEJnU6FS67TBFaU3y9R2WFLK1aQcZqPN-hOHev3p5YvDNy-O-Fso4M8sfqw7HcrNS21oBGn6OxzfPtIWxZ-FGhyO2QT5QMPLFLLbyQe-fjJeBBZItJ3RvIVK2E5blorbokKHIchTiJsl5D7DEGN-O5kLW0ptuVaPP1OsdRsE_NHtaqgleC1-Yl7gA9mKyTs-2EmZJb6g2qWttg4slSFqsGQhzts4_-OCKf8aTKPvNjj7v2KC4wmn7dfcA-unNE-CdqdxsHAvi6onO9q1ncUfVUWSHD-LWVnqXrlHwFPCGbcR0_6Q7TxI3-heVmzKe1P7wn0i57eTzPhH16G1rE_1lM15YHwX5yV3jILrO0vmAXfKHAAX8anvlEv9QKGB_42bB9xlXEQf2QRX2vmvqAUXEWfc5-w2KqKRT35J973gTgbXEEi8IwlCwX2vHZ-xHOB0MHVoSNmda1qKVfNf97QI5FdxxvOD2-49l8rzY07WCbWb5IC7jr8BciVqr9HIU3D43G2lb43vhDm5IcsiaoVyRQSllvwAKiglSzngwnJONXgI1ELK6bOXdPfq8CgJ6Omzuq5_ur8wAbhaO1BCb_3vnt_SXpgxeyHsHugujInBM9hhNpDY9fZO9rSTBBwnWTJPFslJch6y-c3XEiVRS_xaRMVj-ouHFxHX1FIRTXlZUY295NoK9ZWhfcf9S4tK8BuOps7wUIywdzrfqvJxP2DmAlcG2-Hw6z96d_Rb"><img src="https://ryanstraight.com/posts/attack-trees-in-mermaid/images/attack-tree-example-2.jpg" class="img-fluid quarto-figure quarto-figure-center figure-img" alt="Example of an attack tree."></a></p>
</figure>
</div>
<p>Now, let’s see how that one was made. I’ve included a variety of comments in the code to help explain exactly what’s going on. Note that <code>flowchart TD</code> simply tells Mermaid to display the graph <em>top down</em>. Other orientations are possible, as well, like <code>LR</code>, as demonstrated in the table below.</p>
<pre><code>flowchart TD
%% Flowchart example of an attack tree
%% Based on Gulhane, Aniket &amp; Vyas, Akhil &amp; Mitra, Reshmi &amp; Oruche, Roland &amp; Hoefer,
%% Gabriela &amp; Valluripally, Samaikya &amp; Calyam, Prasad &amp; Hoque, Khaza. (2019). Security,
%% Privacy and Safety Risk Assessment for Virtual Reality Learning Environment Applications.
%% doi:10.1109/CCNC.2019.8651847.

&nbsp; &nbsp; A(Privacy - Risk Score) --&gt; B[/Privacy\]
  
&nbsp; &nbsp; B -- Storage --- C[/Tampering or improper disposal of data\]
&nbsp; &nbsp; B -- VR Space --- D[/Disclosure of Information\]
&nbsp; &nbsp; B -- Network --- E[/Tampering or Eavesdropping\]
  
&nbsp; &nbsp; %% Left-most section
&nbsp; &nbsp; C --- F(SQL Injection)
&nbsp; &nbsp; C -- Improper disposal of data --- G[/Data Leak\]
&nbsp; &nbsp; G --&gt; H(Data Residues)
&nbsp; &nbsp; G --&gt; I(Undeleted Accounts)
&nbsp; &nbsp; 
&nbsp; &nbsp; %% Center section
&nbsp; &nbsp; D -- Shoulder Surfing --- J[/Crack password\]
&nbsp; &nbsp; J --&gt; K(Screen Observation)
&nbsp; &nbsp; J --&gt; L(Hand-Movement Observation)
&nbsp; &nbsp; D --&gt; M("User Not Notified (Consent)") %% Requires the label in quotes due to the parens
  
&nbsp; &nbsp; %% Right-most section
&nbsp; &nbsp; E --&gt; N(Change Packet Destination)
&nbsp; &nbsp; E --&gt; O(Packet Sniffing)

%% Styling
    %% Color hex codes easily found at: https://www.color-hex.com
&nbsp; &nbsp; %% Sets the "mint" colored class
&nbsp; &nbsp; classDef mint fill:#3eb489,color:#fff

&nbsp; &nbsp; %% Applies styling using 'style' and 'class' options
&nbsp; &nbsp; style A fill:skyblue
&nbsp; &nbsp; class B,C,D,E,G,J mint;</code></pre>
<p>Placing sources and attribution in the code itself is never a bad idea, like in the first couple lines.</p>
</section>
</section>
<section id="so-why-mermaid" class="level2">
<h2 class="anchored" data-anchor-id="so-why-mermaid">So, Why Mermaid?</h2>
<p><a href="https://mermaid-js.github.io/mermaid/#/">Mermaid</a> is a “JavaScript-based diagramming and charting tool that renders Markdown-inspired text definitions to create and modify diagrams dynamically” that uses plain text to create rich figures, graphs, and charts. As you can see from the coding examples above and below, it’s also easily human-readable, bordering on being a “literate” programming language.</p>
<p>The code for flowcharts (Mermaid also allows for creating a wide variety of other graph types like sequence diagrams, state diagrams, user journeys, Gantt charts, even Git graphs) is relatively simple, and <a href="https://mermaid-js.github.io/mermaid/#/flowchart">full, comprehensive documentation</a> available.</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th style="text-align: left;">Mermaid</th>
<th style="text-align: left;">Result</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;"><code>A --&gt; B</code></td>
<td style="text-align: left;"><a href="https://mermaid.ink/img/pako:eNo1zbEKwzAMBNBfMTcnP-Ch0NJundpVi4iVxhDbwZWHEPLvVSC96eAe3IahBIHHp_IyueeLsrNcXd9f3A0dktTEMZjYjomgkyQheKtBRm6zEijvRtsSWOURopYKP_L8lQ7ctLzXPMBrbfJH98h2mE61_wDovCv6"><img src="https://ryanstraight.com/posts/attack-trees-in-mermaid/images/basic1.jpg" class="img-fluid"></a></td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>A(Apple) --&gt; B(Orange)</code></td>
<td style="text-align: left;"><a href="https://mermaid.ink/img/pako:eNo1zc0KwjAQBOBXCXNqoX2BHISK3gRBr7kszbYN5I-4OUjpuxtB5zSHb5gdc7IMjbVQ3tTtYaJqmbopZ8-9GseTOnf3QnHlHgMCl0DOtsH-lQaycWAD3arlhaoXAxOPRmu2JHy1TlKBXsi_eABVSc93nKGlVP6ji6P2H37q-ACRkDDq"><img src="https://ryanstraight.com/posts/attack-trees-in-mermaid/images/basic2.jpg" class="img-fluid"></a></td>
</tr>
<tr class="odd">
<td style="text-align: left;"><code>A(Apple) -- Becomes --&gt; B(Orange)</code></td>
<td style="text-align: left;"><a href="https://mermaid.ink/img/pako:eNo1jjsKwzAQBa8itrLBvoCKgE3SBQJJq2aR1rZAP-RVEYzvng0kr5piBt4BNjsCDWvFsqn70yQlm7qplEC9Gkc1k82RdsGLmrtHxbRSDwNEqhG9k_b4RgZ4o0gGtKCjBVtgAyadorbikOnmPOcKesGw0wDYOL_eyYLm2ugvXT3Klfizzg-S9zRC"><img src="https://ryanstraight.com/posts/attack-trees-in-mermaid/images/basic3.jpg" class="img-fluid"></a></td>
</tr>
<tr class="even">
<td style="text-align: left;"><code>A[(Apple)] == Becomes ==&gt; B&gt;Orange]</code></td>
<td style="text-align: left;"><a href="https://mermaid.ink/img/pako:eNo1jssKwjAQRX8lzEqhXxBooUV3gqBL08WQTNtA8yCdLKT03x1B7-oszoG7g02OQMNcMC_q9jBRyfrXqc95pfOo2lYNZFOgTbBTQ3cvGGcaoYFAJaB3Uu_fzAAvFMiAFnQ0YV3ZgImHqDU7ZLo6z6mAnnDdqAGsnJ7vaEFzqfSXLh7lTPhZxwdBKTWE"><img src="https://ryanstraight.com/posts/attack-trees-in-mermaid/images/basic4.jpg" class="img-fluid"></a></td>
</tr>
</tbody>
</table>
<p>There are a number of benefits to using Mermaid for creating this kind of dynamic content. First, Mermaid is open source, so there’s no proprietary platform that can hold your work or content hostage. Second, it’s plain text, so it’s lightweight, portable, and generates vector graphics, meaning scaling is not an issue. Third, it’s easily integrated into data science and reproducible reports created using <a href="https://pypi.org/project/md-mermaid/">Python</a> and <a href="http://rich-iannone.github.io/DiagrammeR/graphviz_and_mermaid.html#mermaid">R</a>, as well as knowledge base platforms that use markdown, like <a href="https://heymichellemac.com/knowledge-management-flow-diagram-in-obsidian">Obsidian</a> (which is how the examples above were created). Fourth, easy to update when necessary with a text editor and a simple find-and-replace.</p>
<p>As a bonus, once you’re familiar with the general syntax of creating Mermaid graphs, you can begin adding variables into the nodes to automate much of the logistics within a system. (But we’ll save that for another time!) As yet <em>another</em> bonus, the <a href="https://mermaid.live">Mermaid Live Editor</a> allows for the real-time creation and visualization of Mermaid code, as well as easy sharing or downloading as images or code, importing of code via Gist, and archiving. You can find the SVG of Example 2 <a href="https://mermaid.ink/svg/pako:eNp1VG1v2zYQ_isHFV1kQLKTvqyJBwxwZDcvzUtntfkSDcVFOlmcKVIhqbhe0f--I9WkbrcZsE3ynrvn7uHxvkSlriiaRrXUm7JB4-DDvFDPn8PbpwP6jG0nCXQNqACdw3INzhAF3DFaqkArOOllg4oSmCmxJge_wM0WLW_XjZC8uxTOYAJLsk0reH9t-rJh-FJLVBUfnGqqySRwgndGkEQfAaXsjej4b5tAji2K9dYbMpRbbBN4b9Di4Hzfc7B3Df6NY4hf7B8cjcaQU8nubuuB4gHLLXiqHGtyW1gKu4aZtWRtS8pBrQ3cCON6lJwlSvaDC0KjhFrBQj0Io1UAzrpOihKd0MqO4WB_fHCwfzTJsqts7HnHh7--Pjh89WYMQaDGuc5OJ5PNZjM2ZDlg2azQ0ViRm9Ri1RuafMsuHcRNvbipbfSGmVPXGEJnU6FS67TBFaU3y9R2WFLK1aQcZqPN-hOHev3p5YvDNy-O-Fso4M8sfqw7HcrNS21oBGn6OxzfPtIWxZ-FGhyO2QT5QMPLFLLbyQe-fjJeBBZItJ3RvIVK2E5blorbokKHIchTiJsl5D7DEGN-O5kLW0ptuVaPP1OsdRsE_NHtaqgleC1-Yl7gA9mKyTs-2EmZJb6g2qWttg4slSFqsGQhzts4_-OCKf8aTKPvNjj7v2KC4wmn7dfcA-unNE-CdqdxsHAvi6onO9q1ncUfVUWSHD-LWVnqXrlHwFPCGbcR0_6Q7TxI3-heVmzKe1P7wn0i57eTzPhH16G1rE_1lM15YHwX5yV3jILrO0vmAXfKHAAX8anvlEv9QKGB_42bB9xlXEQf2QRX2vmvqAUXEWfc5-w2KqKRT35J973gTgbXEEi8IwlCwX2vHZ-xHOB0MHVoSNmda1qKVfNf97QI5FdxxvOD2-49l8rzY07WCbWb5IC7jr8BciVqr9HIU3D43G2lb43vhDm5IcsiaoVyRQSllvwAKiglSzngwnJONXgI1ELK6bOXdPfq8CgJ6Omzuq5_ur8wAbhaO1BCb_3vnt_SXpgxeyHsHugujInBM9hhNpDY9fZO9rSTBBwnWTJPFslJch6y-c3XEiVRS_xaRMVj-ouHFxHX1FIRTXlZUY295NoK9ZWhfcf9S4tK8BuOps7wUIywdzrfqvJxP2DmAlcG2-Hw6z96d_Rb">here</a> as a demonstration.</p>
<p>I hope this little primer on attack trees and how to develop them using Mermaid is useful! More on threat modeling and what’s been presented here is offered in our <a href="https://azcast.arizona.edu/academics/cyber-operations">Cyber Operations program</a>, specifically in CYBV 435: Cyber Threat Intelligence.</p>



</section>

<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">References</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" data-line-spacing="2">
<div id="ref-conklinThreatModelingProcess2022" class="csl-entry">
Conklin, L. (2022). Threat <span>Modeling Process</span>. In <em>OWASP Foundation</em>. <a href="https://owasp.org/www-community/Threat_Modeling_Process">https://owasp.org/www-community/Threat_Modeling_Process</a>
</div>
<div id="ref-gulhaneSecurityPrivacySafety2019" class="csl-entry">
Gulhane, A., Vyas, A., Mitra, R., Oruche, R., Hoefer, G., Valluripally, S., Calyam, P., &amp; Hoque, K. (2019). <em>Security, <span>Privacy</span> and <span>Safety Risk Assessment</span> for <span>Virtual Reality Learning Environment Applications</span></em>. <a href="https://doi.org/10.1109/CCNC.2019.8651847">https://doi.org/10.1109/CCNC.2019.8651847</a>
</div>
<div id="ref-hanDesignIntrusionDetection2023" class="csl-entry">
Han, K., Mun, H., Yeun, C., &amp; Kim, K. (2023). <em>Design of <span>Intrusion Detection System Preventing Insider Attack</span></em>. <a href="https://www.semanticscholar.org/paper/Design-of-Intrusion-Detection-System-Preventing-Han-Mun/a40d27938d7457667ae0b0d1a449d7aac5db41df">https://www.semanticscholar.org/paper/Design-of-Intrusion-Detection-System-Preventing-Han-Mun/a40d27938d7457667ae0b0d1a449d7aac5db41df</a>
</div>
<div id="ref-lallieReviewAttackGraph2020" class="csl-entry">
Lallie, H. S., Debattista, K., &amp; Bal, J. (2020). A review of attack graph and attack tree visual syntax in cyber security. <em>Computer Science Review</em>, <em>35</em>. <a href="https://doi.org/10.1016/j.cosrev.2019.100219">https://doi.org/10.1016/j.cosrev.2019.100219</a>
</div>
<div id="ref-shostackSTRIDEChart2007" class="csl-entry">
Shostack, A. (2007). <span>STRIDE</span> chart. In <em>Microsoft Security Blog</em>. <a href="https://www.microsoft.com/en-us/security/blog/2007/09/11/stride-chart/">https://www.microsoft.com/en-us/security/blog/2007/09/11/stride-chart/</a>
</div>
</div></section><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div><a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></div></div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Citation</h2><div><div class="quarto-appendix-secondary-label">BibTeX citation:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@misc{straight2023,
  author = {Straight, Ryan},
  title = {Developing {Attack} {Trees} with {Mermaid}},
  date = {2023-01-04},
  url = {https://ryanstraight.com/posts/attack-trees-in-mermaid/},
  langid = {en}
}
</code></pre><div class="quarto-appendix-secondary-label">For attribution, please cite this work as:</div><div id="ref-straight2023" class="csl-entry quarto-appendix-citeas">
Straight, R. (2023, January 4). <em>Developing Attack Trees with
Mermaid</em>. <a href="https://ryanstraight.com/posts/attack-trees-in-mermaid/">https://ryanstraight.com/posts/attack-trees-in-mermaid/</a>
</div></div></section></div> ]]></description>
  <category>writing</category>
  <category>public scholarship</category>
  <category>cybersecurity</category>
  <guid>https://ryanstraight.com/posts/attack-trees-in-mermaid/</guid>
  <pubDate>Wed, 04 Jan 2023 00:00:00 GMT</pubDate>
  <media:content url="https://ryanstraight.com/posts/attack-trees-in-mermaid/featured.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>2022-23: Fall Review, Winter Break, &amp; Spring Preview</title>
  <dc:creator>Ryan Straight</dc:creator>
  <link>https://ryanstraight.com/posts/2022-in-review/</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/2022-in-review/featured.png" class="img-fluid quarto-figure quarto-figure-center figure-img" alt="Pen-and-wash illustration on a cream background: a thermos flask in rust orange on a snowy cabin windowsill beside a cooling cup of coffee, frost on the glass."></p>
</figure>
</div>
<section id="fall" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="fall">Fall</h2>
<p>The 2022-23 year started off normally. I was teaching my usual fall semester courses (<a href="https://uaappcomp.github.io/apcv302/">Statistics in the Information Age</a>, <a href="https://uaappcomp.github.io/apcv401/">Introduction to Human-Computer Interaction</a>, and Cyber Law, Ethics, and Policy), as well as running the <a href="https://mavrxlab.org">MA{VR}X Lab</a>. I also finished the last class (beyond the capstone experience) in the Cybersecurity MIS I’m doing to enable my research pivot into cyber operations. There are some really awesome things coming in the Cyber, Intelligence, and Information Operations department that I can’t really talk much about at this point but it’s very, very exciting.</p>
<p>As <a href="https://azcast.arizona.edu">CAST</a> is still a relatively new college, I was thrilled to be the first person to initiate bringing a visiting professor to the college. More on that in the coming weeks. It’s an exciting opportunity to improve both the college’s research reach and my own portfolio and network.</p>

<div class="no-row-height column-margin column-container"><div class="margin-aside">
<p>Bonus: the visiting faculty in question is a UArizona alumnus! Wildcats returning home. A beautiful thing.</p>
</div></div><p>From a research perspective, I wrapped up a study, <a href="https://osf.io/eyjnt/">Perceptions and preferences in virtual reality parasocial phenomena</a>, which pits traditional media (YouTube) against VR (on the Oculus 2), with the first paper in review currently. I also started and am about to wrap up another study, <a href="https://osf.io/vm5ax">Attitudes and Opinions of Web3 Educators and Enthusiasts</a>, which focuses on understanding how Web3 technologies (blockchain, cryptocurrency, et cetera) are understood by those in the education sphere.</p>
<p>There are a couple grant proposals on the docket, as well, and hopefully there will be good news to share in spring about those. 🤞</p>
<p>In an attempt to increase my public scholarship, I also wrote a piece for the college’s monthly cyber publication, The Packet, about using <a href="https://mermaid-js.github.io/mermaid-live-editor/">Mermaid</a> to create <a href="https://www.schneier.com/academic/archives/1999/12/attack_trees.html">attack trees</a>, which should be coming out in the spring. Sadly, the lab’s newsletter was using Revue, which is being shut down. It may be revived using Beehiiv and drafted by the student researchers in the lab. We’ll see.</p>
<p>I also spent a lot of time exploring Quarto, the platform this site is built on. I converted a wide variety of my slide decks, document formats, and so on, to Quarto from Rmarkdown. It’s been a lot of fun and I’m still learning more about it every day.</p>
<p>Finally, both I and the lab’s Twitter accounts have been shuttered in favor of Mastodon, and I opened a BookWyrm account for myself at <a href="https://books.theunseen.city/user/ryanstraight" class="uri">https://books.theunseen.city/user/ryanstraight</a></p>
</section>
<section id="break" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="break">Break</h2>
<div id="fig-cabin" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-cabin-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://ryanstraight.com/posts/2022-in-review/images/cabin.jpg" class="img-fluid figure-img">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-cabin-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;1: Our little cabin for the holiday.
</figcaption>
</figure>
</div>
<p>We thought it would be fun to rent a little cabin where we could take the dogs. Get away from the city for a bit. We found a little one-room place (Figure&nbsp;1) in Tombstone just a couple blocks down from spots like Big Nose Kate’s and the Bird Cage Theatre.</p>

<div class="no-row-height column-margin column-container"><div class="">
<div id="fig-weather" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-weather-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://ryanstraight.com/posts/2022-in-review/images/weather.png" class="img-fluid figure-img">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-weather-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;2: Was nice!
</figcaption>
</figure>
</div>
</div></div><p>What we <em>didn’t</em> count on was the fact that we’d be essentially in an RV park, wherein there were a number of folks spending time outside (see Figure&nbsp;2; it was really nice) and the number of dogs in the neighborhood, both on and off leashes. You’d think that’s nice and friendly and whatnot but Chewie is almost <em>too</em> social. He spent virtually the entire time crying and whining, desperately trying to get to them.</p>
<p>As such, since we couldn’t leave them alone in the place we rented and, it being Christmas, everything was shut, we decided to cut the trip short and come home. A relief but I woke up at 2am with a fever. Have been fighting a cold since, but I’m starting to feel like the end is in sight. Fever’s gone and I’m mainly just run down at this point. Not a great way to spend the week between Christmas and New Year but, all things considered, it could have been much worse. At least I got to watch season one of The Cleaner.</p>
<div data-layout-ncolw="1" data-fig-align="center">
<p><img src="https://ryanstraight.com/posts/2022-in-review/images/cleaner1.gif" class="img-fluid"></p>
<p><img src="https://ryanstraight.com/posts/2022-in-review/images/cleaner2.gif" class="img-fluid"></p>
<p><img src="https://ryanstraight.com/posts/2022-in-review/images/cleaner3.gif" class="img-fluid"></p>
<p><em>The Cleaner</em>, episode 1, “The Widow” via <a href="https://hbcsource.tumblr.com/post/663145826386853888/the-cleaner-101-the-widow-2021-dir-tom">Tumblr</a></p>
</div>
</section>
<section id="spring" class="level2">
<h2 class="anchored" data-anchor-id="spring">Spring</h2>
<p>There’s a lot on the docket for spring but, as much of it isn’t official or finalized yet, I’ll have to keep this brief.</p>
<p>This spring semester, thanks to finally getting our college included in the <a href="https://ur.arizona.edu/find/search-ua-researchers">UA Researchers</a> opportunities list, I will be taking on individually directed student researchers in the MA{VR}X Lab for the first time. Some will be working on projects with me, some will be leading their own work with me directing them, and some will be volunteering in the administration and running of the lab, itself. I’m beyond excited for this!</p>
<p>A few different talks and whatnot coming in spring and more on that will be posted as the dates near. In the meantime, I hope this incredibly busy semester will go smoothly for all. Good luck, folks!</p>


</section>

<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div><a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></div></div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Citation</h2><div><div class="quarto-appendix-secondary-label">BibTeX citation:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@misc{straight2022,
  author = {Straight, Ryan},
  title = {2022-23: {Fall} {Review,} {Winter} {Break,} \&amp; {Spring}
    {Preview}},
  date = {2022-12-30},
  url = {https://ryanstraight.com/posts/2022-in-review/},
  langid = {en}
}
</code></pre><div class="quarto-appendix-secondary-label">For attribution, please cite this work as:</div><div id="ref-straight2022" class="csl-entry quarto-appendix-citeas">
Straight, R. (2022, December 30). <em>2022-23: Fall Review, Winter
Break, &amp; Spring Preview</em>. <a href="https://ryanstraight.com/posts/2022-in-review/">https://ryanstraight.com/posts/2022-in-review/</a>
</div></div></section></div> ]]></description>
  <category>meta</category>
  <category>2022</category>
  <category>review</category>
  <guid>https://ryanstraight.com/posts/2022-in-review/</guid>
  <pubDate>Fri, 30 Dec 2022 00:00:00 GMT</pubDate>
  <media:content url="https://ryanstraight.com/posts/2022-in-review/featured.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>You Got Quarto in My Obsidian!</title>
  <dc:creator>Ryan Straight</dc:creator>
  <link>https://ryanstraight.com/posts/quarto-in-obsidian/</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/quarto-in-obsidian/featured.png" class="img-fluid quarto-figure quarto-figure-center figure-img" alt="Pen-and-wash illustration on a cream background: two slices of bread on a plate, one with peanut butter and one with rust-orange jam, a butter knife between them."></p>
</figure>
</div>
<p>I do virtually everything in either RStudio and Obsidian. It occurred to me that I should try to integrate the two to alleviate the need to sync manually between Obsidian notes and Quarto documents. I also occasionally want to export a file and the Obsidian export (especially to PDF) is a bit hit-or-miss. Quarto (and Rmarkdown, for that matter) templates are much more configurable and customizable.</p>
<p>This brief step-by-step assumes you 1) use <a href="https://osbidian.md">Obsidian</a> (and, if you don’t, why not?), 2) use <a href="https://quarto.org">Quarto</a>, and 3) are comfortable installing beta Obsidian plugins that have not been added to the community plugin list.</p>
<section id="step-1-install-qmd-as-md-plugin" class="level2">
<h2 class="anchored" data-anchor-id="step-1-install-qmd-as-md-plugin">Step 1: Install <code>qmd-as-md</code> plugin</h2>
<p>This, of course, requires you to also install and enable BRAT.</p>
<blockquote class="blockquote">
<p><a href="https://github.com/TfTHacker/obsidian42-brat">TfTHacker/obsidian42-brat: BRAT - Beta Reviewer’s Auto-update Tool for Obsidian. Part of the Obsidian42 family of plugins.</a></p>
</blockquote>
<p>Then, use the <code>BRAT: Plugins: Add a beta plugin for testing</code> command in Obsidian. This just requires you to add the <code>username/repo</code> of a plugin, so in this case, <code>danieltomasz/qmd-as-md-obsidian</code>.</p>
<blockquote class="blockquote">
<p><a href="https://github.com/danieltomasz/qmd-as-md-obsidian">danieltomasz/qmd-as-md-obsidian: A plugin for Obsidian which allows editing of `qmd` files as if they were markdown. QMD files contain a combination of markdown and executable code cell and are a format supported by Quarto open source publishing system.</a></p>
</blockquote>
</section>
<section id="step-2-create-your-rproj" class="level2">
<h2 class="anchored" data-anchor-id="step-2-create-your-rproj">Step 2: Create your Rproj</h2>
<p>After you’ve got everything up and running, it’s really as simple as creating the new project inside an Obsidian vault, either by creating a new folder in Obsidian first and using “Existing folder” in RStudio, or choosing “New folder” in RStudio and placing <em>that</em> in Obsidian where you want it.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/quarto-in-obsidian/images/2022-10-29_13_07_40-test-work-obsidian-v1.0.3.png" class="img-fluid figure-img" alt="Screenshot of an Rproj folder in an Obsidian vault"></p>
<figcaption>Rproj in Obsidian</figcaption>
</figure>
</div>
<p>As you can see, the word counts don’t show up (they’re not <code>.md</code> files, after all) and, to my knowledge, there’s no way to hide specific filetypes inside Obsidian without tweaking the CSS, which I haven’t bothered to do.</p>
</section>
<section id="step-3-enjoy" class="level2">
<h2 class="anchored" data-anchor-id="step-3-enjoy">Step 3: Enjoy!</h2>
<p>Yup, that’s really all there is to it. I do have some thoughts, though, as this is more of a novelty than a solution to anything in particular.</p>
</section>
<section id="the-good" class="level2">
<h2 class="anchored" data-anchor-id="the-good">The Good</h2>
<ol type="1">
<li>It just works.</li>
<li>Differences in Obsidian are seen immediately in RStudio and vice versa.</li>
<li>Adding citations in RStudio with the Quarto <code>/citation</code> command, which creates a <code>.bib</code> file, means Obsidian recognizes it as a citation, as well. The screenshots below demonstrate this. I’m also using this plugin to get the reference list in a sidebar: <a href="https://github.com/mgmeyers/obsidian-pandoc-reference-list">mgmeyers/obsidian-pandoc-reference-list: Display a formatted reference in Obsidian’s sidebar for each pandoc citekey in the active document.</a></li>
</ol>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/quarto-in-obsidian/images/2022-10-29_14_07_49-rproj-test-rstudio.png" class="img-fluid figure-img" alt="A screenshot of RStudio with a citation in-text."></p>
<figcaption>Adding a citation in RStudio...</figcaption>
</figure>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/quarto-in-obsidian/images/2022-10-29_14_08_40-test-work-obsidian-v1.0.3.png" class="img-fluid figure-img" alt="A screenshot of Obsidian recognizing a BibTeX citation key."></p>
<figcaption>...means Obsidian recognizes it, as well.</figcaption>
</figure>
</div>
</section>
<section id="less-than-good" class="level2">
<h2 class="anchored" data-anchor-id="less-than-good">Less than good</h2>
<ul>
<li><em>All</em> files now live in Obsidian, even .aux, .log, etc, when rendering to PDF, so these should be ignored in your syncing process.</li>
<li>Makes more granular versioning more difficult, like one would with separate Git repositories for different Quarto projects, so best to keep for content you don’t need to have cordoned off.</li>
<li>Linting that adds YAML fields on save creates issues with Qmd YAML, but if you disconnect linting from saving, you’re good to go. Worst thing to happen is the need to remove those YAML fields in the Qmd before rendering.</li>
</ul>
<p>So, what will I use this for? Likely just documents that I don’t ever need to publish or disseminate beyond rendering. Lecture notes, letters of support/recommendation, that sort of thing. I’m really just now playing around with this and I’m sure there are other use-cases and processes that make sense, as well. Still, it certainly is pretty handy for us Quarto-minded folks.</p>


</section>

<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div><a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></div></div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Citation</h2><div><div class="quarto-appendix-secondary-label">BibTeX citation:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@misc{straight2022,
  author = {Straight, Ryan},
  title = {You {Got} {Quarto} in {My} {Obsidian!}},
  date = {2022-10-29},
  url = {https://ryanstraight.com/posts/quarto-in-obsidian/},
  langid = {en}
}
</code></pre><div class="quarto-appendix-secondary-label">For attribution, please cite this work as:</div><div id="ref-straight2022" class="csl-entry quarto-appendix-citeas">
Straight, R. (2022, October 29). <em>You Got Quarto in My Obsidian!</em>
<a href="https://ryanstraight.com/posts/quarto-in-obsidian/">https://ryanstraight.com/posts/quarto-in-obsidian/</a>
</div></div></section></div> ]]></description>
  <category>news</category>
  <category>quarto</category>
  <category>website</category>
  <guid>https://ryanstraight.com/posts/quarto-in-obsidian/</guid>
  <pubDate>Sat, 29 Oct 2022 00:00:00 GMT</pubDate>
  <media:content url="https://ryanstraight.com/posts/quarto-in-obsidian/featured.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>The Metaverse We Need but Probably Won’t Get</title>
  <dc:creator>Ryan Straight</dc:creator>
  <link>https://ryanstraight.com/posts/metaverse-we-need/</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/metaverse-we-need/featured.png" class="img-fluid quarto-figure quarto-figure-center figure-img" alt="Pen-and-wash illustration on a cream background: an empty folding chair at the end of a small wooden pier, a fishing rod propped against it, its line running out to a rust-orange bobber on still water."></p>
</figure>
</div>
<p>In my ongoing effort to become more involved with the Web3 education community, I’m engaging in the ED3 NFT 30 Day Challenge over at <a href="https://www.ed3educators.org/">Ed3 Educators</a>. I decided to write up my thoughts longform. Also, I want to point out that I appreciate Tony Parisi for putting this list together, as it is a fantastic way to begin discussions and generate new ideas. My notes below may seem mainly critical but these are intended to expand the conversation.</p>
<section id="the-seven-rules" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="the-seven-rules">The Seven Rules</h2>
<p>Week 3 focuses on the <em>metaverse</em> and what it is (and is not), starting with Tony Parisi’s <a href="https://medium.com/meta-verses/the-seven-rules-of-the-metaverse-7d4e06fa864c">The Seven Rules of the Metaverse: A framework for the coming immersive reality</a> <span class="citation" data-cites="parisiSevenRulesMetaverse2021">(2021)</span>, the question is then, “What was surprising or interesting when reading about how the metaverse is defined?” Let’s address some of them not so much as a refutation to the ideas, themselves, but by taking these rules to their logical conclusion: implementation.</p>
<section id="rule-1-there-is-only-one-metaverse" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="rule-1-there-is-only-one-metaverse">Rule #1: There is only one Metaverse</h3>
<div class="page-columns page-full"><p>Hard to critique this in the abstract. If, by definition, <em>metaverse</em> includes “the sum total of all publicly accessible virtual worlds<sup>1</sup>, real-time 3D content and related media that are connected on an open global network, controlled by none and accessible to all,” then there is only one. That said, the caveat, “controlled by none and accessible to all” complicates the matter: in practice, this is not and will likely never be the case. Oppressive government regimes, bandwidth deserts, digital redlining, barriers to technology acquisition like financial or accessibility issues, all make this difficult to realize, which brings us to Rule 2:</p><div class="no-row-height column-margin column-container"><span class="margin-aside">Sidenote: I refuse to ever use the term “multi-metaverse.”</span></div></div>
</section>
<section id="rule-2-the-metaverse-is-for-everyone" class="level3">
<h3 class="anchored" data-anchor-id="rule-2-the-metaverse-is-for-everyone">Rule #2: The Metaverse is for everyone</h3>
<p>The text of this rule (emphasis mine):</p>
<blockquote class="blockquote">
<p>The Metaverse is for everyone, <strong>as defined by our most broad societal rules of inclusion</strong>. This is not a political or socioeconomic statement; it is an ethnographic one that has political and socioeconomic implications.</p>
</blockquote>
<p>A wonderful goal with a tremendous number of assumptions behind it. First, who is the <em>us</em> when referring to “our most broad societal rules of inclusion?”</p>
<p>While the rules are described as being “axiomatic,”<sup>2</sup> it seems more appropriate to describe them as <em>aspirational.</em> The metaverse being defined by the rules is something closer to a pure, perfect Platonic form, in that the implementation of the metaversal concept is necessarily limited, even corrupted, by those involved in its manifestation.</p>
<p>Again, as noted, I understand these are not <em>suggestions</em> or <em>requirements</em> for how the metaverse can or should be designed, rather statements that, were these rules untrue, would disqualify that thing <em>as</em> the metaverse. And again, since we can’t actually engage with a <em>theoretical</em> metaverse, considering its implementation is worthwhile.</p>
</section>
<section id="rule-3-nobody-controls-the-metaverse" class="level3">
<h3 class="anchored" data-anchor-id="rule-3-nobody-controls-the-metaverse">Rule #3: Nobody controls the Metaverse</h3>
<p>I’d point toward <a href="https://medium.com/predict/regulating-the-metaverse-7c893ed00865">Louis Rosenberg’s Regulate the Metaverse: Why regulation is important and urgent</a> <span class="citation" data-cites="rosenbergRegulateMetaverse2022">(2022)</span> here, and his assertions that the metaverse absolutely does require regulation (and, thereby, control). While this is not the kind of control Rule 3 is most concerned with (that clearly being commercial and market-driven, addressing issues like which industry giants have sway over metaversal spaces) and relinquishes itself from needing to deal with governmental interference (“Attempts to control the Metaverse by government entities are another matter, and outside the scope of these Rules.”), the rule smacks of technological utopianism. If we’ve seen anything in the past year or so, it’s that if a scam can be perpetrated, <em>it will be</em>.</p>
<p>Even the widely purported panaceas of decentralized autonomous organizations (DAOs) and smart contracts are subject to the same vulnerabilities as algorithms: they’re designed by <em>people</em> and people can come with biases, ulterior motives, even malicious intent. Oversight and regulation <em>with accountability for both the regulatory body and the rulebreakers</em> is essential for a safe, realistically usable metaverse.</p>
</section>
<section id="rule-4-the-metaverse-is-open" class="level3">
<h3 class="anchored" data-anchor-id="rule-4-the-metaverse-is-open">Rule #4: The Metaverse is open</h3>
<p>I find this rule to be spot-on and a phenomenal goal. The metaverse should be “built upon interoperable technologies and tools, connected via rigorously defined and broadly agreed-upon free and open communication standards.” On a practical level, it points towards the need for legislated principles like <em>net neutrality</em><sup>3</sup> to protect average users’ safety, access, and livelihoods. To wit,</p>
<blockquote class="blockquote">
<p>It is not always ill intent that puts us on a path to market domination by a small few; sometimes it is simply convenience and consumer value that only large-scale platforms can provide. We hang on a knife edge in the Web 2.0/mobile computing era, having to continually choose between convenience and autonomy; there is a significant backlash against this in the emerging Metaverse.</p>
</blockquote>
<p>I’m reminded of Alexis de Tocqueville stating that Americans will never again submit to revolution as they will not be willing to sacrifice their possessions.<sup>4</sup> Inaction is as or more devastating than malice, in many cases, and I’d wager <em>convenience</em> is a much more effective driving factor than <em>autonomy</em> going forward, as it has been in the Web2 era.</p>
</section>
<section id="rule-5-the-metaverse-is-hardware-independent" class="level3">
<h3 class="anchored" data-anchor-id="rule-5-the-metaverse-is-hardware-independent">Rule #5: The Metaverse is hardware-independent</h3>
<p>While I don’t disagree with the notion that any sort of metaversal interaction <em>should not</em> be limited or determined by what sort of hardware someone has (not to mention what was addressed under Rule 1 above, like whether there’s sufficient bandwidth), my concern here is a prominent focus on commerce. Throughout the Rules of the Metaverse, there is an underlying (and sometimes overt) focus on commercialization and consumerism. On a fundamental level, I believe this does a disservice to the intent behind describing what the theoretical, ideal metaverse could be.</p>
</section>
<section id="rule-6-the-metaverse-is-a-network" class="level3">
<h3 class="anchored" data-anchor-id="rule-6-the-metaverse-is-a-network">Rule #6: The Metaverse is a Network</h3>
<blockquote class="blockquote">
<p>From a technical standpoint, the Metaverse is a network of computers delivering and presenting digital information. Its novel power is in the ability to present that information to its users in the form of 3D spaces, places, objects and characters, to facilitate communication for a wide range of uses.</p>
</blockquote>
<p>Beyond the technical considerations for what entails the metaverse, this seems to miss one key thing: a metaverse without users is meaningless, so the inclusion and influence of <em>and on</em> those users cannot be overstated. The metaverse, then, is not simply the conceptualization of networked platform that allow particular functions (engaging with X experience or purchasing Y content), but rather it includes and even requires the fundamental notion of what it means to bring everyone and everything together in an extended reality.<sup>5</sup></p>
</section>
<section id="rule-7-the-metaverse-is-the-internet" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="rule-7-the-metaverse-is-the-internet">Rule #7: The Metaverse is the Internet</h3>
<div class="page-columns page-full"><p>Again, we find ourselves more concerned about the <em>content</em> involved with the metaverse, and less about <em>what it does</em> and <em>how it impacts our reality</em>. Essentially, currently, the internet describes a destination or a method for accomplishing something. We “go online” to find information. We stream content “from Netflix.” We buy devices that are connected “to the cloud.” There’s an inescapable transactional nature underlying the current internet. While I agree that it is what the metaverse will be built upon, “The Metaverse is the Internet” frankly seems to lack imagination, though it may simply be a case of creating the steam engine and then trying to imagine nuclear power without the intermediary steps.</p><div class="no-row-height column-margin column-container"><span class="margin-aside">Perhaps we should begin speaking of the metaverse as something that has grown or emerged from the internet, rather than something built on top of it. I’m reminded of the language used by the <a href="https://lens.xys">Lens protocol</a>.</span></div></div>
<hr>
</section>
</section>
<section id="closing-thoughts" class="level2">
<h2 class="anchored" data-anchor-id="closing-thoughts">Closing Thoughts</h2>
<p>I don’t have rules, per se, but I do have thoughts.</p>
<p><strong>Thought 1</strong>: We should redefine the metaverse as something like, <em>A reality borne of foundational, fundamental, and universal integration of the digital and the physical.</em></p>
<p><strong>Thought 2</strong>: The metaverse is less about the technology and more about the core ways in which our experience of reality will and continues to change <em>due</em> to the technology, <em>mediated</em> by it, with heavy consideration needed on who’s controlling that mediation, how, and why. Imagine the shift in how we experienced the world pre- and post written word. I envision the metaverse being along those lines.</p>
<p><strong>Thought 3</strong>: Framing the metaverse first or even mainly as a place to do business or play games is inappropriate. The metaverse is a concept, a new way of living with access to virtually anything–knowledge, communication, history, entertainment–at any time.</p>
<p><strong>Thought 4</strong>: A well-regulated metaverse is crucial for a safe, humane, open experience, regardless of the platform, technology, or user capability or skill.</p>
<p>Finally, it is unfortunate at best and detrimental at worst that Meta (nee Facebook) has co-opted the language here and used it as its own to the point of actually renaming itself with the term, all but guaranteeing when the term “metaverse” is used, it will end up right there with Kleenex, Xerox, and Velcro, as a branded replacement for a general concept used interchangeably.</p>



</section>


<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">References</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" data-line-spacing="2">
<div id="ref-parisiSevenRulesMetaverse2021" class="csl-entry">
Parisi, T. (2021). The <span>Seven Rules</span> of the <span>Metaverse</span>. In <em>Metaverses</em>. <a href="https://medium.com/meta-verses/the-seven-rules-of-the-metaverse-7d4e06fa864c">https://medium.com/meta-verses/the-seven-rules-of-the-metaverse-7d4e06fa864c</a>
</div>
<div id="ref-rosenbergRegulateMetaverse2022" class="csl-entry">
Rosenberg, L. (2022). Regulate the <span>Metaverse</span>. In <em>Predict</em>. <a href="https://medium.com/predict/regulating-the-metaverse-7c893ed00865">https://medium.com/predict/regulating-the-metaverse-7c893ed00865</a>
</div>
</div></section><section id="footnotes" class="footnotes footnotes-end-of-document"><h2 class="anchored quarto-appendix-heading">Footnotes</h2>

<ol>
<li id="fn1"><p>We may need to revisit our language when discussing the metaverse in more than just the ways I’ve outlined in this piece, as “virtual world” conjures memories of Second Life and World of Warcraft, rather than notions of spaces that exist beyond our physical one–ie, anything digital.↩︎</p></li>
<li id="fn2"><p>That is to say, <em>self-evident</em>.↩︎</p></li>
<li id="fn3"><p>See NordVPN’s <a href="https://nordvpn.com/blog/net-neutrality-pros-and-cons/">Net neutrality pros and cons: what you need to know</a> for a recent breakdown with pros and cons, some more convincing than others.↩︎</p></li>
<li id="fn4"><p>For the life of me, I can’t find the actual citation and it’s driving me crazy.↩︎</p></li>
<li id="fn5"><p>I don’t mean “extended reality” here like a VR headset; it’s mean to describe the physical and digital space we already inhabit, raised to another degree.↩︎</p></li>
</ol>
</section><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div><a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></div></div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Citation</h2><div><div class="quarto-appendix-secondary-label">BibTeX citation:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@misc{straight2022,
  author = {Straight, Ryan},
  title = {The {Metaverse} {We} {Need} but {Probably} {Won’t} {Get}},
  date = {2022-06-22},
  url = {https://ryanstraight.com/posts/metaverse-we-need/},
  langid = {en}
}
</code></pre><div class="quarto-appendix-secondary-label">For attribution, please cite this work as:</div><div id="ref-straight2022" class="csl-entry quarto-appendix-citeas">
Straight, R. (2022, June 22). <em>The Metaverse We Need but Probably
Won’t Get</em>. <a href="https://ryanstraight.com/posts/metaverse-we-need/">https://ryanstraight.com/posts/metaverse-we-need/</a>
</div></div></section></div> ]]></description>
  <category>web3</category>
  <category>nft</category>
  <category>ed3</category>
  <category>metaverse</category>
  <guid>https://ryanstraight.com/posts/metaverse-we-need/</guid>
  <pubDate>Wed, 22 Jun 2022 00:00:00 GMT</pubDate>
  <media:content url="https://ryanstraight.com/posts/metaverse-we-need/featured.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>Moving to Quarto</title>
  <dc:creator>Ryan Straight</dc:creator>
  <link>https://ryanstraight.com/posts/moving-to-quarto/</link>
  <description><![CDATA[ 





<div id="fig-featured" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-featured-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://ryanstraight.com/posts/moving-to-quarto/thumbnail.jpg" class="img-fluid figure-img">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-featured-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;1: Featured image.
</figcaption>
</figure>
</div>
<p>Essentially, I have the same reasoning as <a href="https://www.posdefecology.net">John Best</a>:</p>
<blockquote class="blockquote">
<p>I first published my personal website using the blogdown pacakge. There were some great walkthroughs to get everything set up and I even had Netlify automatically build and deploy every commit I pushed to Github. The Academic (now Wowchemy) theme was a de facto standard among academics (surprise), and seemed like an obvious choice. It looked nice and basically let you build your CV as the front page of your website. And it has clearly filled a niche, now offering different layouts for research groups and other uses.</p>
<p>As its use cases expanded, it got more complicated. Configuration moved from YAML to TOML at some point, configuration files and directories got moved around. I don’t need to update my webisite very often, but every time I did I had to chase down multiple minor versions’ worth of breaking changes, and remember to update Hugo.</p>
<p>- <a href="https://www.posdefecology.net/posts/moving-to-quarto/moving-to-quarto.html">Positive Definite Ecology - Moving to Quarto</a> <span class="citation" data-cites="best2022">(Best, 2022)</span></p>
</blockquote>
<p>I also don’t update my website very often (something I’d like to remedy in the coming year), so I feel this pain deep in my soul. I’d considered changing over to the <a href="https://hugo-apero-docs.netlify.app/">Hugo Apéro</a> theme, which I find more visually pleasing than Wowchemy, but it doesn’t address the issue I run into involving focusing on the design and the details to the detriment of creating actual content. Quarto’s blog website is simple, efficient, and just as interactive, without all the bells and whistles that amount to nothing more than distractions.</p>
<p>It’s possible I’ll make the effort to port over the more useful posts from my old website. It’s equally possible that I won’t bother. We’ll see.</p>
<section id="some-quarto-highlights" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="some-quarto-highlights">Some Quarto highlights</h2>
<p>Some easy-to-find and use features of Quarto that I tend to use frequently. Should be clear that I use RStudio for this.</p>
<section id="margin-content" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="margin-content">Margin content</h3>

<div class="no-row-height column-margin column-container"><div class="">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/moving-to-quarto/thumbnail.jpg" class="img-fluid figure-img"></p>
<figcaption>A margin image</figcaption>
</figure>
</div>
</div></div><pre><code>::: {.column-margin}
![A margin image](thumbnail.jpg)
:::</code></pre>
<hr>
<p>Two useful margin content options are <em>asides</em> and <em>margin captions</em>.</p>
<div class="page-columns page-full"><p></p><div class="no-row-height column-margin column-container"><span class="margin-aside">If you want some arbitrary text in the margin, it’s easy to do like this. This part lacks a footnote reference number.</span></div></div>
<pre><code>[If you want some arbitrary text in the margin, it's easy to do like this. This part lacks a footnote reference number.]{.aside}</code></pre>
<p>Putting a figure’s caption in the margin next to it is as easy as using these chunk options:</p>
<pre><code>#| label: fig-margin-caption-example
#| fig-cap: "This is the caption for the figure."
#| cap-location: margin</code></pre>
<p>You can set many of these on a per-instance, per-document, or even global level: <a href="https://quarto.org/docs/authoring/article-layout.html#options-reference">Quarto - Article Layout</a></p>
<hr>
</section>
<section id="citations" class="level3">
<h3 class="anchored" data-anchor-id="citations">Citations</h3>
<p>Using Quarto in RStudio makes it incredibly easy to use citations and cross-references.</p>
<div class="callout callout-style-default callout-important callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Important
</div>
</div>
<div class="callout-body-container callout-body">
<p>To natively insert a citation and add it to the document’s .bib file, you <em>must</em> be using the <code>Visual</code> editor.</p>
</div>
</div>
<p>If you want your citation style to be something other than the default, you’ll need to update the <code>csl</code> YAML key.</p>
<pre><code>csl: apa.csl</code></pre>
<p>You can save the file <a href="https://raw.githubusercontent.com/citation-style-language/styles/master/apa.csl">from here</a> and place it in the document’s directory. Unfortunately, due to how the YAML works, you can’t put it in the global YAML.</p>
<p>Citing is the same in Quarto as it is in Rmd. Examples of different citation syntaxes can <a href="https://quarto.org/docs/authoring/footnotes-and-citations.html#sec-citations">be found here</a>.</p>
</section>
<section id="cross-referencing" class="level3">
<h3 class="anchored" data-anchor-id="cross-referencing">Cross-Referencing</h3>
<p>Cross-references are simple. You just need to remember to use the correct naming syntax. The <a href="https://quarto.org/docs/authoring/cross-references.html">Quarto documentation</a> is good. Here are some brief examples:</p>
<p>The image at the top of the post has this syntax:</p>
<p><code>![Featured image.](thumbnail.jpg){#fig-featured}</code></p>
<p>This way, you can simply type <code>See @fig-featured for an illustration.</code> to get “See Figure&nbsp;1 for an illustration.”</p>
<p>Same thing goes for plots and other chunk-based content. For example:</p>
<div class="cell">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb5-1"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">```{r}</span></span>
<span id="cb5-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#| label: fig-cars</span></span>
<span id="cb5-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#| fig-cap: "Cars"</span></span>
<span id="cb5-4"></span>
<span id="cb5-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">plot</span>(cars)</span>
<span id="cb5-6"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">```</span></span></code></pre></div></div>
<div class="cell-output-display">
<div id="fig-cars" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-cars-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://ryanstraight.com/posts/moving-to-quarto/index_files/figure-html/fig-cars-1.png" class="img-fluid figure-img" width="672">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-cars-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;2: Cars
</figcaption>
</figure>
</div>
</div>
</div>
<p>You can reference @fig-cars since we’ve given the chunk that label. Like so: see Figure&nbsp;2.</p>
<div class="callout callout-style-default callout-important callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Important
</div>
</div>
<div class="callout-body-container callout-body">
<p>You can get the kind of chunk above using the <code>#| echo: fenced</code> chunk option.</p>
</div>
</div>
</section>
<section id="shortcodes" class="level3">
<h3 class="anchored" data-anchor-id="shortcodes">Shortcodes</h3>
<p>These are similar to Hugo’s shortcodes. A simple example is:</p>
<p>{{&lt; meta title &gt;}}</p>
<p>Which will display the title of whatever page it’s on, like so: Moving to Quarto. (You can escape them to get the literal shortcode text by adding one extra set of braces.)</p>



</section>
</section>

<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">References</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" data-line-spacing="2">
<div id="ref-best2022" class="csl-entry">
Best, J. (2022). <em>Moving to quarto</em>. <a href="https://www.posdefecology.net/posts/moving-to-quarto/moving-to-quarto.html">https://www.posdefecology.net/posts/moving-to-quarto/moving-to-quarto.html</a>
</div>
</div></section><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div><a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></div></div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Citation</h2><div><div class="quarto-appendix-secondary-label">BibTeX citation:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@misc{straight2022,
  author = {Straight, Ryan},
  title = {Moving to {Quarto}},
  date = {2022-06-20},
  url = {https://ryanstraight.com/posts/moving-to-quarto/},
  langid = {en}
}
</code></pre><div class="quarto-appendix-secondary-label">For attribution, please cite this work as:</div><div id="ref-straight2022" class="csl-entry quarto-appendix-citeas">
Straight, R. (2022, June 20). <em>Moving to Quarto</em>. <a href="https://ryanstraight.com/posts/moving-to-quarto/">https://ryanstraight.com/posts/moving-to-quarto/</a>
</div></div></section></div> ]]></description>
  <category>news</category>
  <category>quarto</category>
  <category>website</category>
  <guid>https://ryanstraight.com/posts/moving-to-quarto/</guid>
  <pubDate>Mon, 20 Jun 2022 00:00:00 GMT</pubDate>
  <media:content url="https://ryanstraight.com/posts/moving-to-quarto/featured.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>Using R</title>
  <dc:creator>Ryan Straight</dc:creator>
  <link>https://ryanstraight.com/posts/how-to-r/</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/how-to-r/featured.png" class="img-fluid quarto-figure quarto-figure-center figure-img" alt="Pen-and-wash illustration on a cream background: a worn, dog-eared recipe card box crammed with index cards, one rust-orange card pulled halfway up."></p>
</figure>
</div>
<p>I forget how to do a lot in R when I only do it once every year or two. I also wanted a place to keep track of my favorite packages. So:</p>
<section id="updating-r-with-installr" class="level2">
<h2 class="anchored" data-anchor-id="updating-r-with-installr">Updating R with <code>installr</code></h2>
<p>This is probably the simplest one on the list. Per the <code>installr</code> vignette:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">require</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"installr"</span>)) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">install.packages</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'installr'</span>)</span>
<span id="cb1-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"installr"</span>)</span>
<span id="cb1-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">updateR</span>() <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># this will open dialog boxes to take you through the steps.</span></span>
<span id="cb1-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># OR use:</span></span>
<span id="cb1-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># updateR(TRUE) # this will use common defaults and will be the safest/fastest option</span></span></code></pre></div></div>
<p>You should run it in the Rgui, not in RStudio.</p>
<p>In my experience, after using <code>installr</code> to update, the packages have never come over to the new library. I normally have to copy and paste everything from one library to the next. Running <code>update.packages(ask = FALSE, checkBuilt = TRUE)</code> tidies everything up afterwards.</p>
<p>And that’s it! 🥳</p>
</section>
<section id="formatr" class="level2">
<h2 class="anchored" data-anchor-id="formatr"><a href="https://yihui.org/formatr/">formatR</a></h2>
<p>A great way to keep your code looking tidy. Remember: space is your friend! The example <a href="https://yihui.org/formatr/#2-reformat-r-code">Yihui Xie uses on his website</a> is this poorly organized code:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">## comments are retained;</span></span>
<span id="cb2-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># a comment block will be reflowed if it contains long comments;</span></span>
<span id="cb2-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#' roxygen comments will not be wrapped in any case</span></span>
<span id="cb2-4"><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb2-5"></span>
<span id="cb2-6"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span>(<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>){</span>
<span id="cb2-7">x<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># inline comments</span></span>
<span id="cb2-8">}<span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span>{</span>
<span id="cb2-9">x<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>;<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Oh no... ask the right bracket to go away!'</span>)}</span>
<span id="cb2-10"><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># one space before this comment will become two!</span></span>
<span id="cb2-11"><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># only 'single quotes' are allowed in comments</span></span>
<span id="cb2-12"></span>
<span id="cb2-13"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">lm</span>(y<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span>x1<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>x2, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data=</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">data.frame</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y=</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rnorm</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>),<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x1=</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rnorm</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>),<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x2=</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rnorm</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)))  <span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">### a linear model</span></span>
<span id="cb2-14"><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># comment after a long line</span></span>
<span id="cb2-15"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">## here is a long long long long long long long long long long long long long comment that may be wrapped</span></span></code></pre></div></div>
<p>And then, after using <code>formatR</code>:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb3-1"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">## comments are retained; a comment block will be</span></span>
<span id="cb3-2"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">## reflowed if it contains long comments;</span></span>
<span id="cb3-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#' roxygen comments will not be wrapped in any case</span></span>
<span id="cb3-4"><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb3-5"></span>
<span id="cb3-6"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>) {</span>
<span id="cb3-7">    x <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># inline comments</span></span>
<span id="cb3-8">} <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> {</span>
<span id="cb3-9">    x <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb3-10">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Oh no... ask the right bracket to go away!"</span>)</span>
<span id="cb3-11">}</span>
<span id="cb3-12"><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># one space before this comment will become two!</span></span>
<span id="cb3-13"><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># only 'single quotes' are allowed in comments</span></span>
<span id="cb3-14"></span>
<span id="cb3-15"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">lm</span>(y <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> x1 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> x2, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">data.frame</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rnorm</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x1 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rnorm</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>), </span>
<span id="cb3-16">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x2 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rnorm</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)))  <span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">### a linear model</span></span>
<span id="cb3-17"><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> </span>
<span id="cb3-18">    <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># comment after a long line</span></span>
<span id="cb3-19"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">## here is a long long long long long long long long</span></span>
<span id="cb3-20"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">## long long long long long comment that may be</span></span>
<span id="cb3-21"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">## wrapped</span></span></code></pre></div></div>
</section>
<section id="knitr" class="level2">
<h2 class="anchored" data-anchor-id="knitr">Knitr</h2>
<p>There’s so much that <code>knitr</code> can do and I find myself having to over and over research just how to do something. No more!</p>
<p>Including an image:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1">knitr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">include_graphics</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"image.ext"</span>)</span></code></pre></div></div>
<p>or</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb5-1">knitr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">include_graphics</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"url"</span>)</span></code></pre></div></div>
<p>The various <a href="https://yihui.org/knitr/options/">R code chunk options</a> are handy to know, as well. This is also related to the verbatim code bit below, as it’s <a href="https://yihui.org/en/2017/11/knitr-verbatim-code-chunk/">a knitr option</a>.</p>
</section>
<section id="installing-and-loading-packages" class="level2">
<h2 class="anchored" data-anchor-id="installing-and-loading-packages">Installing and loading packages</h2>
<p>I give Rmd files to my students to use and practice with. This makes sure they don’t run into issues with not having packages installed:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb6-1"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> (package <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'package1'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'package2'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'package3'</span>)) {</span>
<span id="cb6-2">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">require</span>(package, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">character.only=</span>T, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">quietly=</span>T)) {</span>
<span id="cb6-3">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">install.packages</span>(package, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">repos=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"http://cran.us.r-project.org"</span>)</span>
<span id="cb6-4">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(package, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">character.only=</span>T)</span>
<span id="cb6-5">    }</span>
<span id="cb6-6">}</span></code></pre></div></div>
</section>
<section id="including-icons-and-animation" class="level2">
<h2 class="anchored" data-anchor-id="including-icons-and-animation">Including icons and animation</h2>
<p>To use <code>FontAwesome</code>:</p>
<p><code>fontawesome::fa("arrow-down", fill = "Sienna")</code>: <iconify-icon inline="" icon="fa6-solid:arrow-down" aria-label="Icon arrow-down from fa6-solid Iconify.design set." title="Icon arrow-down from fa6-solid Iconify.design set."></iconify-icon></p>
<p>To use <code>emo::ji</code>:</p>
<p><code>emo::ji("sweat_smile")</code>: 😅</p>
<p>To use <a href="https://anicon.netlify.app/"><code>anicon</code></a>:</p>
<p><code>anicon::nia("Some text!", animate="wrench")</code></p>
<div class="callout callout-style-default callout-warning callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Warning
</div>
</div>
<div class="callout-body-container callout-body">
<p>For some reason, inline icon code prevented Quarto from rendering a document as of June 21, 2022, but seems to be fixed in v0.9.611, so update Quarto if this is throwing errors. Note that <code>anicon</code> is still throwing an error but <code>fontawesome</code> and <code>emo</code> work fine.</p>
</div>
</div>
<p>Best to use the <code>icon</code> package for static icons.</p>
</section>
<section id="project-management-projecttemplate" class="level2">
<h2 class="anchored" data-anchor-id="project-management-projecttemplate">Project management: <a href="http://projecttemplate.net"><code>ProjectTemplate</code></a></h2>
<p>Project management has always been my downfall in terms of finding the solution that works just the way I want it to. (And, yes, I know that <em>perfect</em> is the enemy of <em>good</em> but I have to procrastinate somehow, don’t I?) I really like <a href="http://projecttemplate.net"><code>ProjectTemplate</code></a>, though. I typically use the minimal version of the template and it helps keep me organized and on a standard workflow. It’s easy to put down and pick back up later, as well.</p>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Note
</div>
</div>
<div class="callout-body-container callout-body">
<p>I also have a couple project template repositories that I’ll highlight at some point. ProjectTemplate is still something I use, regardless.</p>
</div>
</div>
</section>
<section id="citation-papaja-and-betterbibtex" class="level2">
<h2 class="anchored" data-anchor-id="citation-papaja-and-betterbibtex">Citation, <code>papaja</code>, and BetterBibTeX</h2>
<p>I use Zotero and, since I do a lot of writing in APA format, I use the <code>papaja</code> package to make that easier. As such, I use BibTeX (unsurprisingly).</p>
<section id="quick-copy-from-zotero" class="level3">
<h3 class="anchored" data-anchor-id="quick-copy-from-zotero">Quick copy from Zotero</h3>
<p>Took me a while to learn this but as my Zotero library has thousands of entries, I don’t always use the full library as a .bib file (for obvious reasons). As I’m also constantly adding new entries and I don’t want to have to export a .bib every time, the <em>Quick Copy</em> option is as I can easily throw a new BibTeX entry into a .bib file in RStudio.</p>
<p>You can change the <em>Quick Copy</em> formatting by going to <code>Edit -&gt; Preferences -&gt; Export</code> and changing the Default Format to <em>BetterBibTeX</em>. Voila, you can start using the citation key.</p>
</section>
<section id="different-in-text-citation-forms" class="level3">
<h3 class="anchored" data-anchor-id="different-in-text-citation-forms">Different in-text citation forms</h3>
<p>While I love doing everything like this in plain text, I can never remember how the different in-text citations work. So here’s a cheatsheet. We’ll be using <span class="citation" data-cites="Ash2017">(Ash et al., 2017)</span> as the example.</p>
<p>My YAML includes: <code>bibliography: ["example.bib"]</code></p>
<p>Depending on what RMarkdown template/document you’re using, you can also change the bibliography style.</p>
<p>I have this BibTeX entry in the <code>.bib</code> file:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode bibtex code-with-copy"><code class="sourceCode bibtex"><span id="cb7-1"><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">@article</span>{<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">Ash2017</span>,</span>
<span id="cb7-2">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">title</span> = {Unit, Vibration, Tone: A Post-Phenomenological Method for Researching Digital Interfaces},</span>
<span id="cb7-3">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">author</span> = {Ash, James and Anderson, Ben and Gordon, Rachel and Langley, Paul},</span>
<span id="cb7-4">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">year</span> = {2017},</span>
<span id="cb7-5">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">pages</span> = {147447401772655},</span>
<span id="cb7-6">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">issn</span> = {1474-4740},</span>
<span id="cb7-7">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">doi</span> = {10.1177/1474474017726556},</span>
<span id="cb7-8">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">abstract</span> = {Digital interfaces, in the form of websites, mobile apps and other platforms, now mediate user experiences with a variety of economic, cultural and political services and products. To study these digital mediations, researchers have to date followed a range of methodological strategies including the modification of pre-existing qualitative research methods, such as content analysis, discourse analysis and semiotics, among many others, and an experimentation with new methods designed to make visible the operation of data aggregation, analytics and algorithms that are hidden from users. Building upon, while distinct from these strategies, the article sets out a post-phenomenological approach to studying interfaces, websites and apps that explicitly interrogates how they appear as objects. In doing so, the article provides a response to a problem that animates contemporary cultural geography: that new cultural objects are emerging which place in question the habits and practices of analysis that composed the `new' cultural geography. To do this, the paper develops the concepts of unit, vibration and tone to unpack interfaces as sets of entities that work together to shape the experiences and responses of users. As such, the article provides a methodological vocabulary for the analysis of how interfaces operate to modulate user response and action on a series of habitual and un-reflected upon levels and thereby to create outcomes that suit their owners and operators.},</span>
<span id="cb7-9">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">journal</span> = {Cultural Geographies},</span>
<span id="cb7-10">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">keywords</span> = {digital geographies,digital methods,interfaces,materiality,post-phenomenology}</span>
<span id="cb7-11">}</span></code></pre></div></div>
<p>Obviously, the abstract is optional but I’m leaving here for demonstration purposes. For the different formats of in-text citation:</p>
<p><code>[@Ash2017]</code> gives you what you saw above: <span class="citation" data-cites="Ash2017">(Ash et al., 2017)</span><br>
<code>[@Ash2017, pp. 22]</code> gives you: <span class="citation" data-cites="Ash2017">(Ash et al., 2017, p. 22)</span><br>
<code>[-@Ash2017]</code> removes the author: <span class="citation" data-cites="Ash2017">(2017)</span><br>
<code>@Ash2017</code> (without the brackets) gives you: <span class="citation" data-cites="Ash2017">Ash et al. (2017)</span><br>
<code>@Ash2017 [pp. 22]</code> gives you: <span class="citation" data-cites="Ash2017">Ash et al. (2017, p. 22)</span>.</p>
<p>If you wanted to include a citation in the bibliography but not actually cite it in the text, just add this to the YAML:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode yaml code-with-copy"><code class="sourceCode yaml"><span id="cb8-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nocite</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">: </span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">|</span></span>
<span id="cb8-2">  @Ash2017</span></code></pre></div></div>
<p>Finally, just place a <code>## References</code> header at the bottom of your file and voila, instant bibliography! In Quarto, this will be done automatically. No need to add that section.</p>
</section>
<section id="papaja" class="level3">
<h3 class="anchored" data-anchor-id="papaja"><code>papaja</code></h3>
<p>For doing more nuanced work, I use the <a href="https://github.com/crsh/papaja"><code>papaja</code></a> package to create APA-formatted papers. I highly encourage folks–especially students that produce APA-formatted documents frequently–to check it out. It’s so handy.</p>
</section>
</section>
<section id="all-things-xaringan-presentation-ninja" class="level2">
<h2 class="anchored" data-anchor-id="all-things-xaringan-presentation-ninja">All things <a href="https://github.com/yihui/xaringan">Xaringan: Presentation Ninja</a></h2>
<div class="callout callout-style-default callout-important callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Important
</div>
</div>
<div class="callout-body-container callout-body">
<p>Since Quarto’s release, I’m now using Quarto Presentations before choosing to begin a new slide deck with xaringan. Will put together a post about my favorite features at some point. Still, if you’re still using xaringan, the following is still very cool.</p>
</div>
</div>
<p>I use the <code>xaringan</code> package a <em>lot</em>. I gave up Powerpoint years ago in favor of something that’s lightweight, can include native R calculations and code, and is mobile, accessible, and responsive.</p>
<p>There’s a whole section of <a href="https://bookdown.org/yihui/rmarkdown/xaringan.html"><em>R Markdown: The Definitive Guide</em></a> devoted to xaringan but here are thing little bits that I really love:</p>
<section id="progress-bar" class="level3">
<h3 class="anchored" data-anchor-id="progress-bar">Progress bar</h3>
<p>Add the <code>slideNumberFormat</code> lines to your <code>YAML</code>.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb9-1">output<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span></span>
<span id="cb9-2">  xaringan<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>moon_reader<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span></span>
<span id="cb9-3">    nature<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span></span>
<span id="cb9-4">      slideNumberFormat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">|</span></span>
<span id="cb9-5">       <span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">&lt;</span>div class<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"progress-bar-container"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span></span>
<span id="cb9-6">         <span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">&lt;</span>div class<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"progress-bar"</span> style<span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"width: calc(%current% / %total% * 100%);"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span></span>
<span id="cb9-7">         <span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">&lt;/</span>div<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span></span>
<span id="cb9-8">       <span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">&lt;/</span>div<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span></span></code></pre></div></div>
<p>Then, add this to your <code>custom.css</code> (or whatever custom CSS file you’re using) and alter to your liking:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode css code-with-copy"><code class="sourceCode css"><span id="cb10-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">.remark-slide-number</span> {</span>
<span id="cb10-2">  <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">position</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">:</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">inherit</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb10-3">}</span>
<span id="cb10-4"></span>
<span id="cb10-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">.remark-slide-number</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">.progress-bar-container</span> {</span>
<span id="cb10-6">  <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">position</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">absolute</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb10-7">  <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">bottom</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb10-8">  <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">height</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">px</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb10-9">  <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">display</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">block</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb10-10">  <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">left</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb10-11">  <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">right</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb10-12">}</span>
<span id="cb10-13"></span>
<span id="cb10-14"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">.remark-slide-number</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">.progress-bar</span> {</span>
<span id="cb10-15">  <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">height</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">%</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb10-16">  <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">background-color</span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">:</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">red</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb10-17">}</span></code></pre></div></div>
<p>This gives you a thin red progress bar at the bottom of each slide. Much better than numbered slides!</p>
</section>
<section id="start-with-a-please-stand-by-slide" class="level3">
<h3 class="anchored" data-anchor-id="start-with-a-please-stand-by-slide">Start with a <em>Please Stand By</em> slide</h3>
<p>Use this directly after your R setup code chunk:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb11-1">background<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>image<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">url</span>(https<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">//</span>media.giphy.com<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>media<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>CdhxVrdRN4YFi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>giphy.gif)</span>
<span id="cb11-2">background<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>position<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> center</span>
<span id="cb11-3">background<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>color<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#000</span></span>
<span id="cb11-4">background<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>size<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> contain</span></code></pre></div></div>
<p>This sets your very first slide full screen as:</p>
<p><img src="https://media.giphy.com/media/CdhxVrdRN4YFi/giphy.gif" class="img-fluid"></p>
</section>
</section>
<section id="xaringanextra" class="level2">
<h2 class="anchored" data-anchor-id="xaringanextra"><a href="https://pkg.garrickadenbuie.com/xaringanExtra/"><code>xaringanExtra</code></a></h2>
<p>I recently wrote about using the <code>scribble()</code> function from <code>xaringanExtra</code>, which is orders of magnitude easier to use when annotating a slide deck and sharing via Zoom. Other functions from the package I really like:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb12-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># xaringanExtra options</span></span>
<span id="cb12-2"></span>
<span id="cb12-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Includes a "subtle tone" when slides change. Good for accessibility</span></span>
<span id="cb12-4">xaringanExtra<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">use_slide_tone</span>() <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># turns on the audio tone when slides change</span></span>
<span id="cb12-5"></span>
<span id="cb12-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Provides more obvious code highlighting. Great for teaching.</span></span>
<span id="cb12-7">xaringanExtra<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">use_extra_styles</span>(  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># higlights code</span></span>
<span id="cb12-8">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hover_code_line =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>,         <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&lt;&lt;</span></span>
<span id="cb12-9">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">mute_unhighlighted_code =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#&lt;&lt;</span></span>
<span id="cb12-10">)</span>
<span id="cb12-11"></span>
<span id="cb12-12"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Turns on clipboard options. Great for giving code to students.</span></span>
<span id="cb12-13">htmltools<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tagList</span>(</span>
<span id="cb12-14">  xaringanExtra<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">use_clipboard</span>(</span>
<span id="cb12-15">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">button_text =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;i class=</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">fa fa-clipboard</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">&gt;&lt;/i&gt;"</span>,</span>
<span id="cb12-16">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">success_text =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;i class=</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">fa fa-check</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> style=</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">color: #90BE6D</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">&gt;&lt;/i&gt;"</span>,</span>
<span id="cb12-17">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">error_text =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"&lt;i class=</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">fa fa-times-circle</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> style=</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">color: #F94144</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\"</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">&gt;&lt;/i&gt;"</span></span>
<span id="cb12-18">  ),</span>
<span id="cb12-19">  rmarkdown<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">html_dependency_font_awesome</span>()</span>
<span id="cb12-20">)</span>
<span id="cb12-21"></span>
<span id="cb12-22"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The sainted scribble function I keep talking about.</span></span>
<span id="cb12-23">xaringanExtra<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">use_scribble</span>()     <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># turns on scribble, built-in annotation</span></span></code></pre></div></div>
</section>
<section id="supplemental" class="level2">
<h2 class="anchored" data-anchor-id="supplemental">Supplemental</h2>
<p>This stuff isn’t R-related, specifically, but makes working with R a lot easier. I’ll probably add to this as I think of things.</p>
<section id="copycat" class="level3">
<h3 class="anchored" data-anchor-id="copycat"><a href="https://chrome.google.com/webstore/detail/copycat/jdjbiojkklnaeoanimopafmnmhldejbg">Copycat</a></h3>
<p>A Chrome extension that allows for quick copying of URLs, text, et cetera, as markdown syntax. When creating a list of links or resources, for example, this is very, very handy. It speeds things up considerably to just be able to copy and paste without thinking about the markdown syntax.</p>
</section>
<section id="proper-file-naming" class="level3">
<h3 class="anchored" data-anchor-id="proper-file-naming">Proper file naming</h3>
<p>Follow the advice of <a href="https://jennybryan.org">Jenny Bryan</a> and use filenames that are:</p>
<ol type="1">
<li>machine readable</li>
<li>human readable</li>
<li>play well with default ordering</li>
</ol>
<p>Her <a href="http://www2.stat.duke.edu/~rcs46/lectures_2015/01-markdown-git/slides/naming-slides/naming-slides.pdf">classic slide deck</a> on the topic is a wealth of guidance. In short:</p>
<p><strong>Good</strong>:<br>
2021-03-13_blogpost_how-to-r.Rmd<br>
2021-03-21_blogpost_stream-deck-for-online-teaching.Rmd<br>
2021-04-04_blogpost_something-i-may-write-who-knows.Rmd</p>
<p>Chronological order template:</p>
<p><code>YYYY-MM-DD_Project-title_Specific-file_Version.ext</code></p>
<p>Logical order:</p>
<pre><code>01_Filename-title-that-is-descriptive.ext
02_Filename-title-that-is-descriptive.ext
90_Filename-title-that-is-descriptive.ext</code></pre>
<p>Function/value/variable naming:</p>
<p><code>variable.name</code> <strong>not</strong> <code>variable_name</code></p>
<p><strong>Bad</strong>:<br>
draft How to R.Rmd<br>
New File (1)(1)(1).PDF<br>
image.jpg<br>
RS-here are my edits to yourfile.docx</p>
<p>Help Today-You be kind to Tomorrow-You by using proper naming!</p>
</section>
<section id="embedding-tweets" class="level3">
<h3 class="anchored" data-anchor-id="embedding-tweets">Embedding tweets</h3>
<p>Using the <a href="https://github.com/gadenbuie/tweetrmd">tweetrmd</a> package (requires the <code>webshot2</code> package to create the screenshot embeds). The <code>include_tweet</code> function will add a pure HTML copy of the tweet in HTML output or a screenshot in others.</p>
<blockquote class="blockquote">
<p><a href="https://twitter.com/dsquintana/status/1275705042385940480">View the tweet by dsquintana on Twitter/X</a></p>
</blockquote>



</section>
</section>

<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">References</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" data-line-spacing="2">
<div id="ref-Ash2017" class="csl-entry">
Ash, J., Anderson, B., Gordon, R., &amp; Langley, P. (2017). Unit, vibration, tone: A post-phenomenological method for researching digital interfaces. <em>Cultural Geographies</em>, 147447401772655. <a href="https://doi.org/10.1177/1474474017726556">https://doi.org/10.1177/1474474017726556</a>
</div>
</div></section><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div><a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></div></div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Citation</h2><div><div class="quarto-appendix-secondary-label">BibTeX citation:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@misc{straight2021,
  author = {Straight, Ryan},
  title = {Using {R}},
  date = {2021-03-24},
  url = {https://ryanstraight.com/posts/how-to-r/},
  langid = {en}
}
</code></pre><div class="quarto-appendix-secondary-label">For attribution, please cite this work as:</div><div id="ref-straight2021" class="csl-entry quarto-appendix-citeas">
Straight, R. (2021, March 24). <em>Using R</em>. <a href="https://ryanstraight.com/posts/how-to-r/">https://ryanstraight.com/posts/how-to-r/</a>
</div></div></section></div> ]]></description>
  <category>R</category>
  <category>project management</category>
  <category>website</category>
  <guid>https://ryanstraight.com/posts/how-to-r/</guid>
  <pubDate>Wed, 24 Mar 2021 00:00:00 GMT</pubDate>
  <media:content url="https://ryanstraight.com/posts/how-to-r/featured.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>Next-Level Screen Annotation</title>
  <dc:creator>Ryan Straight</dc:creator>
  <link>https://ryanstraight.com/posts/next-level-screen-annotation/</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/next-level-screen-annotation/featured.png" class="img-fluid quarto-figure quarto-figure-center figure-img" alt="Pen-and-wash illustration on a cream background: a rust-orange stylus resting on a pen tablet in front of a monitor with a loose hand-drawn circle and arrow on its screen."></p>
</figure>
</div>
<p>Remote teaching during the SARS-CoV2 pandemic isn’t much different from what I normally do, insofar as I’m still teaching from my home office to students that (mostly) were planning on being online, regardless.</p>
<p>I’d been wondering what I can do to improve my engagement with the on-screen content during live class sessions. Like many, I’m using Zoom (which I’ve talked about in terms of <a href="https://ryanstraight.com/posts/zoom-and-obs/">using OBS to spice up your Zoom calls</a> and, while I think the annotation tools provided are <em>decent</em> if a little clunky, I can’t bear trying to “write” on a screen using a mouse.</p>
<section id="the-drawing-monitor" class="level2">
<h2 class="anchored" data-anchor-id="the-drawing-monitor">The Drawing Monitor</h2>
<p>Luckily, digital artists have sussed out this problem ages ago when the drawing tablets like the Wacom came out.</p>
<p>(This ⬇️ is not a drawing monitor; this it’s a drawing tablet. )</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://www.bhphotovideo.com/c/replacement_for/1002452-REG/wacom_pth451_intuos_pro_professional_pen.html"><img src="https://www.bhphotovideo.com/images/images2500x2500/wacom_pth451_intuos_pro_professional_pen_1002452.jpg" class="img-fluid figure-img"></a></p>
<figcaption>Drawing tablets have been around for a while</figcaption>
</figure>
</div>
<p>And these are great for particular things but (and I tried it) manipulating the Zoom annotation tools is not one of them.</p>
<p>Enter the drawing <em>monitor</em>: think of it as a combination of the drawing tablet (above) and a touch screen. So you can do this kind of thing (<em>this</em> ⬇️ is a drawing monitor):</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://gph.is/g/aQq2VBA"><img src="https://media.giphy.com/media/lWdulVJxM5iDP9C4lg/giphy.gif" class="img-fluid figure-img"></a></p>
<figcaption>Now you can actually see what you’re drawing.</figcaption>
</figure>
</div>
<p>Powerful for artists but why would it be of value for teaching online? Let’s talk about that.</p>
</section>
<section id="application" class="level2">
<h2 class="anchored" data-anchor-id="application">Application</h2>
<p>What’s it great for? How about:</p>
<ul>
<li>Code highlighting or debugging</li>
<li>Emphasizing and analyzing data visualization</li>
<li>Doing traditional paper markup</li>
<li>Demonstrating image manipulation</li>
<li>Using browser-based slide deck and a blank New Tab gives you an on-demand whiteboard without having to switch between screen shares</li>
<li>Compared to an iPad, this is one less device, login, et cetera, to have to worry about. <em>It’s just another monitor</em>.</li>
</ul>
<p>That said, it struck me how janky the whole process was. Switching the annotation on and off, finding the button to change from pencil back to mouse, having to clear the annotations before moving on. It was really frustrating. Why not just have some keyboard shortcuts to do these things? One hand on the keyboard, one hand holding the pen, and you’re good to go.</p>
</section>
<section id="wish-list" class="level2">
<h2 class="anchored" data-anchor-id="wish-list">Wish list</h2>
<p>So I tweeted about the lack of annotation-specific keyboard shortcuts and whoever runs the Zoom Twitter account actually replied, which was unexpected:</p>
<p></p><div id="tweet-81135"></div><script>tweet={"url":"https:\/\/x.com\/Zoom\/status\/1351910821325123592","author_name":"Zoom","author_url":"https:\/\/x.com\/Zoom","html":"\u003Cblockquote class=\"twitter-tweet\" align=\"center\"\u003E\u003Cp lang=\"en\" dir=\"ltr\"\u003EHey there, this is a great idea! Would you mind sending a feature request to our page at \u003Ca href=\"https:\/\/t.co\/gBaDzbDzPD\"\u003Ehttps:\/\/t.co\/gBaDzbDzPD\u003C\/a\u003E so our engineers can review this?\u003C\/p\u003E&mdash; Zoom (@Zoom) \u003Ca href=\"https:\/\/x.com\/Zoom\/status\/1351910821325123592?ref_src=twsrc%5Etfw\"\u003EJanuary 20, 2021\u003C\/a\u003E\u003C\/blockquote\u003E\n\u003Cscript async src=\"https:\/\/platform.x.com\/widgets.js\" charset=\"utf-8\"\u003E\u003C\/script\u003E\n\n","width":550,"height":null,"type":"rich","cache_age":"3153600000","provider_name":"X","provider_url":"https:\/\/x.com","version":"1.0"};document.getElementById("tweet-81135").innerHTML = tweet["html"];</script><p></p>
<p>Which I did. Who knows what will come of that. 🤷</p>
<p><em>But wait!</em></p>
</section>
<section id="enter-xaringanextras-scribble-option" class="level2">
<h2 class="anchored" data-anchor-id="enter-xaringanextras-scribble-option">Enter <code>xaringanExtra</code>’s <em>scribble</em> option</h2>
<p>I’ve talked about it before but just as a little refresher: for my slide decks, I use an RMarkdown package called <a href="https://github.com/yihui/xaringan"><code>xaringan</code></a> by <a href="https://yihui.org/">Yihui Xie</a>, a software engineer at <a href="https://rstudio.com">RStudio</a>. (Remember, this site is build with <a href="https://bookdown.org/yihui/blogdown/"><code>blogdown</code></a>, another RMarkdown package.) Everything is written in plain text and is human-readable (it’s just a version of Markdown) and incorporates R code natively. It allows you to easily do all the neat stuff you see around here.</p>
<p>Xaringan slide decks are so useful for a variety of reasons, one of which is their extensibility. One manifestation of that is the <a href="https://pkg.garrickadenbuie.com/xaringanExtra/#/"><code>xaringanExtra</code></a> package by <a href="https://garrickadenbuie.com/">Garrick Aden-Buie</a>, who is also with RStudio. Want an audio signal when your slides change. Try <code>use_slide_tone()</code>. Want to add a logo to all your slides? <code>use_logo()</code> to the rescue. Make your slides editiable? <code>use_editable()</code>! <a href="https://pkg.garrickadenbuie.com/xaringanExtra/#/README?id=xaringanextra">The list goes on</a>.</p>
<p>Check this out: how’s this for simple but super effective on-screen annotation? <a href="https://pkg.garrickadenbuie.com/xaringanExtra/scribble/">This</a> is the demo for the <em>scribble</em> function in a Xaringan slide deck. Either click the ✏️ or the <code>s</code> key on your keyboard while using the slide deck. Try flipping between slides. See how the annotations stay <em>only on the slide you scribbled on</em>? That’s a huge improvement on using Zoom to annotate over a slide and then having those scribbles carry on into the next slide.</p>
<p>And big shout-out to <a href="https://github.com/mattwarkentin">Matt Warkentin</a> for <a href="https://twitter.com/grrrck/status/1371872765054230534">“doing the heavy lifting”</a> to get scribble to work!</p>
<p>I got to use that particular package last night for the first time in class and I can’t begin to express how smooth and easy it made the process. Simply the ability to switch back and forth between slides that <em>maintained their respective annotations</em> was a game-changer. You often don’t realize just how much effort you’re putting forth trying to make something work until it works without friction.</p>
<p>So, if you’re teaching or presenting online and you want to annotate a slide deck, give <strong>scribble</strong> a try.</p>
</section>
<section id="enter-quarto" class="level2">
<h2 class="anchored" data-anchor-id="enter-quarto">Enter Quarto</h2>
<p>Guess what: Quarto has this feature built in! See <a href="https://quarto.org/docs/presentations/revealjs/presenting.html#chalkboard">Quarto - Presenting Slides</a> for details on how to use the feature. Quarto presentations can use <code>revealjs</code>, just like xaringan, so it has the same kind of feel. Neat, huh?</p>
<div class="quarto-layout-panel" data-layout-ncol="2">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: center;">
<p><img src="https://quarto.org/docs/presentations/revealjs/images/drawing-canvas.png" class="img-fluid"></p>
</div>
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: center;">
<p><img src="https://quarto.org/docs/presentations/revealjs/images/chalkboard.png" class="img-fluid"></p>
</div>
</div>
</div>


</section>

<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div><a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></div></div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Citation</h2><div><div class="quarto-appendix-secondary-label">BibTeX citation:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@misc{straight2021,
  author = {Straight, Ryan},
  title = {Next-Level {Screen} {Annotation}},
  date = {2021-03-21},
  url = {https://ryanstraight.com/posts/next-level-screen-annotation/},
  langid = {en}
}
</code></pre><div class="quarto-appendix-secondary-label">For attribution, please cite this work as:</div><div id="ref-straight2021" class="csl-entry quarto-appendix-citeas">
Straight, R. (2021, March 21). <em>Next-Level Screen Annotation</em>. <a href="https://ryanstraight.com/posts/next-level-screen-annotation/">https://ryanstraight.com/posts/next-level-screen-annotation/</a>
</div></div></section></div> ]]></description>
  <guid>https://ryanstraight.com/posts/next-level-screen-annotation/</guid>
  <pubDate>Sun, 21 Mar 2021 00:00:00 GMT</pubDate>
  <media:content url="https://ryanstraight.com/posts/next-level-screen-annotation/featured.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>Using a Stream Deck for Online Teaching</title>
  <dc:creator>Ryan Straight</dc:creator>
  <link>https://ryanstraight.com/posts/streamdeck-for-teaching/</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/streamdeck-for-teaching/featured.png" class="img-fluid quarto-figure quarto-figure-center figure-img" alt="Pen-and-wash illustration on a cream background: a small desktop keypad with a grid of fifteen blank square keys, one rust-orange key pressed down."></p>
</figure>
</div>
<p>What can online teachers and remote workers learn from streamers? Quite a bit, it turns out.</p>
<p>I’d been wondering what I can do to improve my engagement with the on-screen content during live class sessions. Like many, I’m using Zoom (which I’ve talked about in terms of <a href="https://ryanstraight.com/posts/zoom-and-obs/">using OBS to spice up your Zoom calls</a> and recently shared a bit about using a <a href="https://ryanstraight.com/posts/next-level-screen-annotation/">drawing monitor to really up your annotation game</a>.</p>
<p>So what’s next on my list? Taking all those keyboard shortcuts and mouse clicks and moving them over to a dedicated device that’s made specifically for it: the Elgato Stream Deck.</p>
<section id="what-is-an-elgato-stream-deck" class="level2">
<h2 class="anchored" data-anchor-id="what-is-an-elgato-stream-deck">What is an Elgato Stream Deck?</h2>
<p>Described by Elgato, the Stream Deck consists of:</p>
<blockquote class="blockquote">
<p>15 LCD keys poised to launch unlimited actions eliminate the need to map and memorize keyboard shortcuts. One-touch, tactile operation lets you switch scenes, launch media, adjust audio and more, while visual feedback confirms your every command. Traditionally this level of control was exclusive to mainstream entertainment broadcasters. Now, it’s at your fingertips.<sup>1</sup></p>
</blockquote>
<p>(This <code>r fontawesome::fa("arrow-down", fill = "Sienna")</code> is the one I have. I figured the Mini (six keys) would be too small and the XL (with 32 keys) would be too big. So, I went for the Goldilocks choice.)</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="https://www.elgato.com/en/stream-deck"><img src="https://www.elgato.com/themes/custom/smalcode/image/products/streaming-deck/personalized_photo.jpg" class="img-fluid figure-img"></a></p>
<figcaption>The 15-key Elgato Stream Deck</figcaption>
</figure>
</div>
<p>It’s basically the industry standard device game streamers use to manipulate their on-screen elements and audio. I also use the <a href="https://www.elgato.com/en/cam-link-4k">Cam Link 4k</a> to turn my 4k mirrorless camera into a webcam but that’s another post.</p>
</section>
<section id="what-do-i-do-with-mine" class="level2">
<h2 class="anchored" data-anchor-id="what-do-i-do-with-mine">What do I do with mine?</h2>
<section id="first-profiles" class="level3">
<h3 class="anchored" data-anchor-id="first-profiles">First: Profiles</h3>
<p>I despise having to go back and forth between folders when I’m bouncing around different applications. (Yes, I know, multitasking isn’t really a thing.) When I’m in RStudio, for example, I know I won’t be rolling a die or doing a speed test (more on those below), so I have my Stream Deck automatically switch to my RStudio profile whenever RStudio is open. Same with Zoom: when I have a Zoom window selected, there’s no reason I’d need to paste in a pre-made RMarkdown code chunk, so all that’s on the screen are Zoom tools. And again, more on that below.</p>
</section>
<section id="second-actions" class="level3">
<h3 class="anchored" data-anchor-id="second-actions">Second: Actions</h3>
<p>Stream Deck comes with a lot of great actions built-in but the true power comes from the community building what the community needs. Here’s a list of the different actions I have installed:</p>
<ul>
<li>Analog Clock: puts an analog clock on a button, unsurprisingly.</li>
<li>Audio Meter: Shows your audio levels for both playback and recording.</li>
<li>CPU: Displays current CPU usage.</li>
<li>Counter: Tracks the number of times you press a key.</li>
<li>Dice: Just rolls some virtual dice. Handy. Neat.</li>
<li>iCUE: Controls your iCUE computer case lighting.</li>
<li>LIFX Control: We have LIFX lights and this is an easy way to change their colors, brightness, and so on.</li>
<li>OBS Studio: Switch between scenes and do everything you expect with OBS.</li>
<li>Speed Test: A one-button Ookla Speedtest.</li>
<li>Spotify Integration: Used to control Spotify and also display the current track on a key.</li>
<li>Stopwatch: Precisely what it sounds like.</li>
<li>Toggl: Easy one-button tracking of projects and tasks.</li>
<li>VLC Remote: Specifically controls the VLC player as opposed to the general media controls on your device.</li>
<li>Voicemod: Easily change your voice. Fun when combined with something like Snap Camera.</li>
<li>Windows Mover &amp; Resizer: Automatically control window placement and whatnot. Works with virtual desktops!</li>
<li>Zoom Plugin: Control your Zoom meeting with a button-press. Mute, disable video, leave a meeting, mute everyone, and more.</li>
</ul>
<p>Do you need all those? Of course not. But there’s no limit to how many screens you can have on your Stream Deck, so why not?</p>
</section>
</section>
<section id="specifics" class="level2">
<h2 class="anchored" data-anchor-id="specifics">Specifics</h2>
<p>While a lot of the actions listed above are great, most of them are really just for me and making my life easier, not necessarily for teaching. Below, I’ll demonstrate the different specific actions that are most useful in an online teaching or remote work situation.</p>
<section id="control-zoom" class="level3">
<h3 class="anchored" data-anchor-id="control-zoom">Control Zoom</h3>
<p><img src="https://ryanstraight.com/posts/streamdeck-for-teaching/zoom.png" class="img-fluid"></p>
<p>Here you see my Zoom screen. I’m right handed, so my Stream Deck is on the left side of my desk (as my mouse is on the right), hence the buttons I use most being what I can easily reach out and hit (I most often mute and unmute myself, so when grabbing the Stream Deck, my left thumb naturally falls to that button). The buttons are spaced out in this particular configuration so I’m less likely to accidentally hit one.</p>
</section>
<section id="control-rstudio" class="level3">
<h3 class="anchored" data-anchor-id="control-rstudio">Control RStudio</h3>
<p><img src="https://ryanstraight.com/posts/streamdeck-for-teaching/rstudio.jpg" class="img-fluid"></p>
<p>If you’ve read this website for any length of time you know that I’ve become an utter R convert over the past few years. I do virtually everything in RMarkdown (like this website!). So, I spend a lot of time in RStudio. It’s only natural I have a screen devoted to that. Having complex macros set up in Stream Deck is handy.</p>
</section>
<section id="obs" class="level3">
<h3 class="anchored" data-anchor-id="obs">OBS</h3>
<p><img src="https://ryanstraight.com/posts/zoom-and-obs/obs-screenshot.png" class="img-fluid"></p>
<p>It’s no secret by now that Open Broadcast Software (OBS) is a killer app in the online streaming world and that goes doubly for really upping your online teaching. The sky really is the limit when considering what all you can do with OBS. If you can imagine it, it’s probably possible.</p>
<p>So what’s my default OBS collection of scenes? I’ll explain what these buttons do, going row-by-row left-to-right from the top left:</p>
<ol type="1">
<li>Blank: this completely removes all video and image sources from the video feed. It’s like mute for your camera without turning your camera off in Zoom (or whatever app you’re using). Audio isn’t an issue for me here as the OBS virtual camera is video <em>only</em>.</li>
<li>Please Stand By: this tells folks that yes, I’m in the meeting, but I’m not quite ready yet or I’ve stepped away for just a second. It implies that I won’t reply if you ask me something.</li>
<li>Coffee BRB: exactly what it sounds like: I went to refill my coffee, I’ll be right back.</li>
<li>Koi: stock footage of koi fish in a pond. Just a nice relaxing thing to include on people’s screens during meetings.</li>
<li>Webcam full: just the webcam, full-sized. No overlays, crops, or logos.</li>
<li>Block A: places a University of Arizona logo in the corner of my webcam. Good for meetings where my position at the university is relevant and perhaps not obvious (like a meeting with my Arizona colleagues) or where I just want to make sure it’s clear the recording is “branded” (like a class meeting).</li>
<li>Applause: a repeating gif of the the Monty Python’s Flying Circus stock footage of women in an audience applauding.</li>
<li>Thumbs-up: a big sticker of a cartoon thumbs-up overlayed on my camera.</li>
<li>Bob Ross: a repeating gif of Bob Ross petting a baby deer. Self explanatory, really. (Who <em>doesn’t</em> want to see that?)</li>
<li>Mute: this is actually the Zoom shortcut that mutes Zoom, as that’s where I use OBS 99% of the time. Again, the OBS virtual camera is video <em>only</em> so audio must be dealt with otherwise.</li>
<li>50/50: puts my webcam on one half of the screen and a particular window on the other. Good for quickly pointing things out without having to switch screen share sources in Zoom, for example.</li>
<li>Gump: a repeating gif of Forrest Gump waving from his shrimping boat. Used when leaving meetings.</li>
</ol>
<p>Of course, if you <em>are</em> teaching with something like Zoom, the dedicated recording/feed of a shared screen will make some of the OBS picture-in-picture scenes a tad redundant (because why degrade the quality when you can keep both at full?) but if you’re just streaming can’t share a screen for whatever reason (like if you’re planning on putting the video on YouTube and you only <em>have</em> a single video to work with), it’s a great option.</p>
<p>So, was this helpful? I hope so! I’m always looking for new and innovative ways to up the various aspects of my online teaching game and I always welcome suggestions!</p>


</section>
</section>


<div id="quarto-appendix" class="default"><section id="footnotes" class="footnotes footnotes-end-of-document"><h2 class="anchored quarto-appendix-heading">Footnotes</h2>

<ol>
<li id="fn1"><p>https://www.elgato.com/en/stream-deck↩︎</p></li>
</ol>
</section><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div><a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></div></div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Citation</h2><div><div class="quarto-appendix-secondary-label">BibTeX citation:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@misc{straight2021,
  author = {Straight, Ryan},
  title = {Using a {Stream} {Deck} for {Online} {Teaching}},
  date = {2021-03-21},
  url = {https://ryanstraight.com/posts/streamdeck-for-teaching/},
  langid = {en}
}
</code></pre><div class="quarto-appendix-secondary-label">For attribution, please cite this work as:</div><div id="ref-straight2021" class="csl-entry quarto-appendix-citeas">
Straight, R. (2021, March 21). <em>Using a Stream Deck for Online
Teaching</em>. <a href="https://ryanstraight.com/posts/streamdeck-for-teaching/">https://ryanstraight.com/posts/streamdeck-for-teaching/</a>
</div></div></section></div> ]]></description>
  <category>Teaching</category>
  <guid>https://ryanstraight.com/posts/streamdeck-for-teaching/</guid>
  <pubDate>Sun, 21 Mar 2021 00:00:00 GMT</pubDate>
  <media:content url="https://ryanstraight.com/posts/streamdeck-for-teaching/featured.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>Spicing Up Your Remote Work with Zoom and OBS</title>
  <dc:creator>Ryan Straight</dc:creator>
  <link>https://ryanstraight.com/posts/zoom-and-obs/</link>
  <description><![CDATA[ 





<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/zoom-and-obs/featured.png" class="img-fluid quarto-figure quarto-figure-center figure-img" alt="Pen-and-wash illustration on a cream background: a webcam on a little tripod pointed at a tiny toy theatre stage with rust-orange curtains drawn open."></p>
</figure>
</div>
<p><strong>UPDATE</strong>: Using virtual cams broke in Zoom past version 4.6.7. Bummer.</p>
<p><strong>UPDATE 2</strong>: Works again! Who knows how long it’ll stay that way.</p>
<p><strong>UPDATE 3</strong>: OBS Studio now has a built-in virtual camera option, so no need to install the plug-in. If you use StreamLabs OBS, there’s a built-in option there, too.</p>
<p>Seems like everybody I know is now working remotely due to the virtual worldwide lockdown in the face of the COVID-19 pandemic. Lots of folks that have little to no experience with it. And that’s okay! We’re all in this together. At this point, simple ettiquite and knowing how to mute your microphone should be considered passable skills. I shared a couple Twitter threads about teaching online but wanted to do something more tutorial-ish.</p>
<p>So, if you <em>are</em> comfortable with working remotely and want to do something a bit more interesting than just, “Hey, look! I’m in a desert now!” well, this is for you.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://media.giphy.com/media/20k1punZ5bpmM/source.gif" class="img-fluid figure-img"></p>
<figcaption>Travolta in front of a green screen</figcaption>
</figure>
</div>
<section id="what-youll-need" class="level2">
<h2 class="anchored" data-anchor-id="what-youll-need">What you’ll need</h2>
<p>Presuming you already have a webcam and a microphone, this is all free. (Yay, right?) Here’s the list of extra software you’ll need to make this work.</p>
<ul>
<li><a href="https://obsproject.com/">OBS Studio</a></li>
</ul>
<p>That’s it. That’s the list. Okay, you need the <em>VirtualCam</em> plugin, but whatever.</p>
<section id="what-is-obs-studio" class="level3">
<h3 class="anchored" data-anchor-id="what-is-obs-studio">What is OBS Studio?</h3>
<p>OBS stands for <em>Open Broadcaster Software</em>. It’s one of the ways in which streamers do what they do. It’s free, open source, and not the most user friendly thing, so… you take the good with the bad. Luckily, for our purposes, we don’t need to do anything all that crazy. (That’s another post in the future.) We’re using OBS <em>Studio</em> because it’s the best for this situation for a few different reasons that I needn’t go into here, really. Just trust me on this.</p>
<p>So, install OBS Studio and head into its Preferences to make sure you’ve got your settings configured properly. I’d suggest choosing either 1080 or 720 for your resolution. If you’re using Zoom, while your live stream in the meeting may be in HD, any recording of it is likely set to be SD, so keep that in mind for later.</p>
</section>
</section>
<section id="install-the-virtualcam-plugin" class="level2">
<h2 class="anchored" data-anchor-id="install-the-virtualcam-plugin">Install the VirtualCam plugin</h2>
<p>This is what makes the magic work. Head over to <a href="https://obsproject.com/forum/resources/obs-virtualcam.539/">the OBS forum for instructions on how to download and install the VirtualCam plugin</a> for OBS. Use the <em>Go to download</em> button on the top right.</p>
<p>Really, go do it. I’ll wait. (You can choose just the single camera install option. I chose the 4 cameras but have never used more than one, so….)</p>
<section id="what-does-virtualcam-do" class="level3">
<h3 class="anchored" data-anchor-id="what-does-virtualcam-do">What does VirtualCam do?</h3>
<p>Essentially, <em>VirtualCam</em> takes your OBS output and turns it into a virtual camera that your meeting software can choose as a video input. Basically, instead of Zoom (for example) using your webcam, you can now use OBS. What does that mean? Well this is where it gets fun. Follow the instructions on the plugin page to get it going in OBS.</p>
</section>
</section>
<section id="beginner-add-a-logo" class="level2">
<h2 class="anchored" data-anchor-id="beginner-add-a-logo">Beginner: Add a logo</h2>
<p>A simple way to see what OBS can do for you here is just to add a logo to your webcam.</p>
<p>Just find the image you want (when using Google Image Search or whatever your preferred engine is, make sure to search for <em>Transparent</em> images so your logo doesn’t have a big solid background).</p>
<p>Now, let’s get our first scene set up. Add your audio and video sources (microphone and webcam, respectively). Stretch the webcam source out to match the OBS canvas. Check your microphone to make sure the levels are active in the source monitor.</p>
<p>Great, now at this point if we went into Zoom and switched the video source to <em>VirtualCam</em>, it would just be identical to what you’d normally see. You only have your webcam and microphone running. But that’s not why we’re here, is it?</p>
<p>Down in your sources, where you added your webcam and your microphone, add an <em>Image</em> source. Find the transparent logo you downloaded and select that. Next, resize and move that puppy around on the screen to wherever you want it. Voila, you now have a logo on your webcam in Zoom!</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/zoom-and-obs/block-a.png" class="img-fluid figure-img"></p>
<figcaption>Webcam feed with Arizona block <strong>A</strong> on left, “stand by” scene on right.</figcaption>
</figure>
</div>
<p>Pretty easy, right?</p>
</section>
<section id="intermediate-add-a-brb-screen" class="level2">
<h2 class="anchored" data-anchor-id="intermediate-add-a-brb-screen">Intermediate: Add a BRB screen</h2>
<p>Let’s say you need to go away from the keyboard for a bit. Bathroom, feed the dogs, get coffee, whatever. Normally, in Zoom, you’d just turn off your video and audio. But why do that when we can have a bit more fun with it?</p>
<p>Here’s what I put on the screen when I leave for a minute: <img src="https://media.giphy.com/media/3o7TKDsHWoAbGkcTEk/source.gif" class="img-fluid" alt="Coffee BRB gif"></p>
<p>And here’s how to do it:</p>
<ul>
<li>Head on over to <a href="https://giphy.com">Giphy</a></li>
<li>Find the thing you want to use for your BRB screen</li>
<li>Click on <em>Media</em> and copy the MP4 link</li>
<li>Head on over to that URL, right click on the video, and <em>Save video as</em> to whatever folder you want to keep this stuff in.</li>
<li>Open up OBS and create a new scene</li>
<li>For your source, add a Media Source or VLC Video Source (either works)<sup>1</sup></li>
<li>Choose that video file you downloaded</li>
<li>Stretch it out to fill or fit the canvas, whichever you want</li>
</ul>
<p>And that’s it! You’re done! Just remember you also need to still mute yourself in your meeting software as this is <em>just</em> a video source.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/zoom-and-obs/obs-zoom-brb.png" class="img-fluid figure-img" alt="Screenshot of OBS Studio in Studio Mode showing a Please Stand By scene, beside a Zoom window using the OBS-Camera virtual webcam with a pixel-art coffee mug BRB screen."></p>
<figcaption>OBS Studio in Studio Mode with a Please Stand By scene (left), feeding Zoom through the OBS virtual camera with a coffee-mug BRB screen (right).</figcaption>
</figure>
</div>
<p>Switching to and from your scenes is easy and the Studio Mode in OBS Studio makes it pretty visually pleasing, as well. Simply hit the <em>Transition</em> button in the middle of Studio Mode interface and it’ll switch what’s in the <em>Preview</em> scene (left) to be what’s sent to the <em>Program</em> you’re using (right). (That’s what shows up in Zoom.) Like this:</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://ryanstraight.com/posts/zoom-and-obs/obs-screenshot.png" class="img-fluid figure-img"></p>
<figcaption>OBS Studio screenshot</figcaption>
</figure>
</div>
</section>
<section id="advanced-multiple-screen-elements" class="level2">
<h2 class="anchored" data-anchor-id="advanced-multiple-screen-elements">Advanced: Multiple screen elements</h2>
<p>Check back in the future for a rundown on how I use OBS Studio in my online classes to include on-screen elements like scrolling due dates, realtime key-presses to support coding demonstrations, adding a cropped version of my camera feed over a slide deck, and more.</p>
<p>I’m just scratching the surface in terms of how this method of virtual presence can ramp up engagement in online classes but hopefully this post gives you everything you need to start playing with OBS Studio and (for example) Zoom to spice up what’s likely to be a <em>lot</em> of online meetings!</p>
<p>If you end up doing something you think is really neat, <a href="https://twitter.com/ryanstraight">tweet at me</a> and let me know!</p>


</section>


<div id="quarto-appendix" class="default"><section id="footnotes" class="footnotes footnotes-end-of-document"><h2 class="anchored quarto-appendix-heading">Footnotes</h2>

<ol>
<li id="fn1"><p>If you’re having difficulties with the sources, check out <a href="https://github.com/obsproject/obs-studio/wiki/Sources-Guide#vlc-video-source">the GitHub documentation</a> for explanations.↩︎</p></li>
</ol>
</section><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div><a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></div></div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Citation</h2><div><div class="quarto-appendix-secondary-label">BibTeX citation:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@misc{straight2020,
  author = {Straight, Ryan},
  title = {Spicing {Up} {Your} {Remote} {Work} with {Zoom} and {OBS}},
  date = {2020-03-14},
  url = {https://ryanstraight.com/posts/zoom-and-obs/},
  langid = {en}
}
</code></pre><div class="quarto-appendix-secondary-label">For attribution, please cite this work as:</div><div id="ref-straight2020" class="csl-entry quarto-appendix-citeas">
Straight, R. (2020, March 14). <em>Spicing Up Your Remote Work with Zoom
and OBS</em>. <a href="https://ryanstraight.com/posts/zoom-and-obs/">https://ryanstraight.com/posts/zoom-and-obs/</a>
</div></div></section></div> ]]></description>
  <category>zoom</category>
  <category>remote work</category>
  <category>covid-19</category>
  <guid>https://ryanstraight.com/posts/zoom-and-obs/</guid>
  <pubDate>Sat, 14 Mar 2020 00:00:00 GMT</pubDate>
  <media:content url="https://ryanstraight.com/posts/zoom-and-obs/featured.png" medium="image" type="image/png" height="76" width="144"/>
</item>
</channel>
</rss>
