<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dendron Inc</title>
    <description>The latest articles on DEV Community by Dendron Inc (@dendron).</description>
    <link>https://dev.to/dendron</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F4637%2Fca658ab8-c009-47a8-9636-401384d94d6d.png</url>
      <title>DEV Community: Dendron Inc</title>
      <link>https://dev.to/dendron</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dendron"/>
    <language>en</language>
    <item>
      <title>Cache All the Things - A PKM workflow to incrementally retain (and find) everything</title>
      <dc:creator>Kevin Lin</dc:creator>
      <pubDate>Thu, 29 Sep 2022 15:53:40 +0000</pubDate>
      <link>https://dev.to/dendron/cache-all-the-things-a-pkm-workflow-to-incrementally-retain-and-find-everything-ne3</link>
      <guid>https://dev.to/dendron/cache-all-the-things-a-pkm-workflow-to-incrementally-retain-and-find-everything-ne3</guid>
      <description>&lt;h2&gt;
  
  
  Context
&lt;/h2&gt;

&lt;p&gt;An engineering manager that will remain unnamed told me his story of trying to find the solution to a technical problem on the internet. &lt;br&gt;
It's the typical &lt;code&gt;question -&amp;gt; google -&amp;gt; stack overflow -&amp;gt; answer&lt;/code&gt; pathway with a twist - when he finally found the answer, he realized that &lt;strong&gt;he himself had created&lt;/strong&gt; the question a year prior.&lt;/p&gt;

&lt;p&gt;I like this story because it's easy to relate to. Haven't we all searched for something that turned out to be a problem we've already encountered?&lt;/p&gt;

&lt;p&gt;The process of searching for answers on the internet is what doing software (and much of knowledge work) is like in the 20th century. &lt;/p&gt;

&lt;p&gt;There is an overwhelming amount of information we need to process just to do our job. It is impossible (nor useful) to keep this information in our heads so we rely on services like google to help look up what we don't know (or have forgotten). &lt;/p&gt;

&lt;p&gt;While this can work, there is a problem when we come to depend on this workflow for getting through the day. It's like &lt;strong&gt;only relying&lt;/strong&gt; on google maps to get home - while this works, you also lose the ability to navigate on your own in the process.  &lt;/p&gt;

&lt;p&gt;This is a &lt;strong&gt;groundhog day loop&lt;/strong&gt; - regardless of how much you search, learnings are quickly forgotten and mastery is never built. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ffpjzhqpv1%2Fgroundhog-loop_excalidraw_png___dendron__Workspace__AZhYnQ8c8.png%3Fik-sdk-version%3Djavascript-1.4.3%26updatedAt%3D1664217920426" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ffpjzhqpv1%2Fgroundhog-loop_excalidraw_png___dendron__Workspace__AZhYnQ8c8.png%3Fik-sdk-version%3Djavascript-1.4.3%26updatedAt%3D1664217920426" alt="Groundhogs day loop"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now imagine the same workflow where instead of starting with a search, you look up information in your personal knowledge &lt;a href="https://en.wikipedia.org/wiki/Cache_(computing)" rel="noopener noreferrer"&gt;cache&lt;/a&gt;. This cache contains every problem you have ever encountered and is accessible in seconds. If you find the answer, you're done, and if not, you can be &lt;strong&gt;certain that it is not there&lt;/strong&gt;. Only then do you fall back to search. When you find the answer, you add it to your cache so you can make use of it in the future.&lt;/p&gt;

&lt;p&gt;This is a mastery loop - instead of losing your place on every question, you build and reinforce your understanding of things with each problem you encounter.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ffpjzhqpv1%2Fgroundhog-loop_excalidraw_png___dendron__Workspace__EAz4ggBhd.png%3Fik-sdk-version%3Djavascript-1.4.3%26updatedAt%3D1664217901697" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ffpjzhqpv1%2Fgroundhog-loop_excalidraw_png___dendron__Workspace__EAz4ggBhd.png%3Fik-sdk-version%3Djavascript-1.4.3%26updatedAt%3D1664217901697" alt="Mastery Loop"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key to building this particular mastery loop comes from combining the following  PKM workflows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a modified version of the &lt;a href="https://fortelabs.com/blog/progressive-summarization-a-practical-technique-for-designing-discoverable-notes/" rel="noopener noreferrer"&gt;progressive summarization method&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.dendron.so/notes/3dd58f62-fee5-4f93-b9f1-b0f0f59a9b64" rel="noopener noreferrer"&gt;A Hierarchy First Approach to Note Taking&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, they let you &lt;strong&gt;cache all the things!&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Progressive Summarization
&lt;/h2&gt;

&lt;p&gt;If you're not familiar with the term, &lt;strong&gt;progressive summarization&lt;/strong&gt; is the means of incrementally retaining insights from text to be used at a future date. It is built around five layers of summarization and pioneered by &lt;a href="https://fortelabs.com/" rel="noopener noreferrer"&gt;Tiago Forte&lt;/a&gt;, a big influencer in the PKM space.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ffpjzhqpv1%2FIs_Progressive_Summarization_a_Waste_of_Time____JamesStuber_com_amM-cCvqM.png%3Fik-sdk-version%3Djavascript-1.4.3%26updatedAt%3D1661467439325" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ffpjzhqpv1%2FIs_Progressive_Summarization_a_Waste_of_Time____JamesStuber_com_amM-cCvqM.png%3Fik-sdk-version%3Djavascript-1.4.3%26updatedAt%3D1661467439325" alt="Progressive summarization"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The steps are described in more detail below:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If you come across useful information, save excerpts from it.  This is layer 1. The benefit: next time you revisit the notes, you can just go over your excerpts instead the entire text. &lt;/li&gt;
&lt;li&gt;If you happen to need the text again, &lt;strong&gt;bold specific passages&lt;/strong&gt; that stand out as you're reviewing.  This is layer 2 and serves to make future skimming easier.&lt;/li&gt;
&lt;li&gt;If you require the text again, ==highlight from the bolded parts== insights that are especially poignant. This is layer 3 and it represents the highest quality insights that you've derived from the specific text. &lt;/li&gt;
&lt;li&gt;If you still have need of the text, make a summary of it in your own words. This is layer 4 and represents the start of reframing the text in your own words.&lt;/li&gt;
&lt;li&gt;If you then find the text relevant in some current project, the final step is to remix it into your own material. This is layer 5 and represents the culmination of all the prior layers. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are some highly desirable characteristics of &lt;strong&gt;progressive summarization&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;just in time vs ahead of time&lt;/strong&gt;: you only do the work when you need to&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;incremental work&lt;/strong&gt;: you only do minimal work at each layer which can then be leveraged in later layers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;active vs passive&lt;/strong&gt;: you actively read the text instead of skimming it&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  A Hierarchy First Approach to Knowledge Management
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://blog.dendron.so/notes/3dd58f62-fee5-4f93-b9f1-b0f0f59a9b64" rel="noopener noreferrer"&gt;Hierarchy First Approach to Knowledge Management&lt;/a&gt; excels at helping people organize lots of information in a consistent structured way for later retrieval. &lt;/p&gt;

&lt;p&gt;It provides a foundation to create a knowledge base that can grow to any size while ensuring that information remains accessible. You can read more about the details of this workflow in the original blog post - &lt;a href="https://www.kevinslin.com/notes/e1455752-b052-4212-ac6e-cc054659f2bb" rel="noopener noreferrer"&gt;It's Not You - It's Your Knowledge Base&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  Cache all the Things
&lt;/h2&gt;

&lt;p&gt;Progressive Summarization helps with retaining key insights from text, the Hierarchy First Approach helps organize those summaries so that they can be found again later. The combination of the two lets us create a knowledge base of distilled insights that can be accessed at a moment's notice. &lt;/p&gt;

&lt;p&gt;There are five levels to this hybrid technique and we'll spend some time explaining each in greater detail below.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Note&lt;/li&gt;
&lt;li&gt;Expand&lt;/li&gt;
&lt;li&gt;Split&lt;/li&gt;
&lt;li&gt;Standardize&lt;/li&gt;
&lt;li&gt;Refactor&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Level 1 - Note
&lt;/h3&gt;

&lt;p&gt;When you come across information that turns out to be useful, make a note of it. This is done by copying the relevant excerpts from the source material. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Greg is a new engineer at Literal, a social VR company. Their first assignment is to change a hard-coded welcome string to an internationalized string. Their mentor recommends using the CLI tool &lt;code&gt;grep&lt;/code&gt; to find all instances of the string. Greg has never used &lt;code&gt;grep&lt;/code&gt; before so spends some time learning about it.  He captures a basic example of running the command in his notes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre&gt;
## Synopsis



```
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...] 
```



## Example



```sh
grep 'python' *
```


&lt;/pre&gt;
&lt;h3&gt;
  
  
  Level 2 - Expand
&lt;/h3&gt;

&lt;p&gt;If you find yourself continuously going back to the source material because you end up using more functionality, invest in adding more information to your note. For example, this could detail instructions for the new functionality or hard-won insights you've discovered through trial and error. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Greg finishes his first assignment and ends up doing more localization work. He uses &lt;code&gt;grep&lt;/code&gt; quite a lot and discovers that he can use regex to speed up his workflow. He has also at this point noticed some mistakes he keeps making with the options. Greg makes a note of all of this.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre&gt;
## Synopsis



```
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...] 
```



## Gotchas

- large repetitions can cause memory exhaustion
- must escape `()|-` signs
- set option flags **before** the PATTERN

## Options

- \-P  use perl like regex (you can lookahead and lookbehind)
- \-i: Ignore casecase
- \-x: Force search to match line

## Example



```sh
grep 'python' *
```



&lt;/pre&gt;
&lt;h3&gt;
  
  
  Level 3 - Split
&lt;/h3&gt;

&lt;p&gt;If you continue to expand the note, the note will eventually exceed the limit of a single page (eg. 800 words). At this point, you want to split your notes into smaller notes&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE: The process of splitting of large notes into smaller notes is also known as the &lt;a href="https://wiki.dendron.so/notes/e780000d-c784-4945-8e42-35218a3ecf10" rel="noopener noreferrer"&gt;amoeba pattern&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Greg finds himself using grep all the time and he now has to spend time scrolling through his &lt;code&gt;grep&lt;/code&gt; note to find what he needs. He has a section on snippets that makes up most of the note so he decides to split it off into its own note.&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
└── grep
    └── snippets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Level 4 - Standardize
&lt;/h3&gt;

&lt;p&gt;As you continue the process of expanding and splitting notes, you tend to find certain clusters of notes will all have the same shape. When this pattern starts to emerge, you can standardize these patterns into hierarchies. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As Greg takes on bigger assignments, he also expands his arsenal of CLI commands. Greg realizes after a while that all CLI commands have a similar structure and so he consolidates it in a hierarchy.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
└── cli/
    ├── grep
    │   └── snippets
    ├── sed
    ├── awk
    │   └── snippets
    ├── git
    ├── test
    └── ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Level 5 - Refactor
&lt;/h3&gt;

&lt;p&gt;In software engineering, &lt;a href="https://en.wikipedia.org/wiki/Code_refactoring" rel="noopener noreferrer"&gt;refactoring&lt;/a&gt; is "the process of restructuring existing (information) — changing the factoring — without changing its external behavior"&lt;/p&gt;

&lt;p&gt;Refactoring is done because the original structure can outgrow its usefulness. Sometimes the underlying information changes or your understanding of it does. Regardless, this means that you will need to update your hierarchies to account for this change.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Greg is tasked with a new assignment that involves working with windows and the PowerShell instead of the Linux terminal. He discovers that the PowerShell has its own set of commands and that the same commands in Linux will have slightly different behavior for Powershell. Greg proceeds to refactor his original hierarchy&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
└── cli/
    ├── linux
    │   ├── grep
    │   │   └── snippets
    │   ├── sed
    │   ├── awk
    │   │   └── snippets
    │   ├── git
    │   └── test
    │   └── ...
    └── powershell
        ├── CopyCmd
        ├── grep
        └── ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Challenges
&lt;/h2&gt;

&lt;p&gt;The workflow we just described can be applied outside of &lt;code&gt;CLI&lt;/code&gt; commands to cover any information you might want to track. It allows you to systematically build up both your reference of "facts" in a domain as well as an underlying mental model of said domain. &lt;/p&gt;

&lt;p&gt;The challenge in actually implementing this workflow generally surfaces in the latter two levels: standardization and refactoring. &lt;/p&gt;

&lt;p&gt;Standardization into hierarchies is difficult because creating hierarchies is usually time-consuming and adds friction to both the retrieval and capture of new information. &lt;/p&gt;

&lt;p&gt;Refactoring is hard because it usually relies on manually moving old notes into new hierarchies and also breaks links in the process.&lt;/p&gt;

&lt;p&gt;This is why we created &lt;a href="https://wiki.dendron.so/" rel="noopener noreferrer"&gt;Dendron&lt;/a&gt; - a note-taking tool that helps people &lt;strong&gt;organize and refactor&lt;/strong&gt; their notes.&lt;/p&gt;

&lt;p&gt;By making it easy to standardize into hierarchies and refactor as needed, Dendron makes it possible to create, maintain, and make use of knowledge bases that span from a single README file to hundreds of thousands of notes!&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Information can be overwhelming but it doesn't have to be. &lt;/p&gt;

&lt;p&gt;We've long passed the point where we can keep everything in our heads. While that information is available on the internet, it takes time to find and is hard to retain. &lt;/p&gt;

&lt;p&gt;By combining Progressive Summarization with a Hierarchy First Approach to Knowledge Management, we've created a workflow that lets us &lt;strong&gt;externalize an unlimited amount of information&lt;/strong&gt; and the means to &lt;strong&gt;quickly find it again&lt;/strong&gt; when needed.&lt;/p&gt;

&lt;p&gt;This incremental caching of everything represents an escape from the endless cycle of searching for things we've already done and instead, lets us focus our efforts on the novel and bigger challenges of the day. &lt;/p&gt;

&lt;p&gt;Imagine how much more effective we could be, as individuals, teams, and as a society, if we could build on top of what we knew instead of spending time forgetting and re-discovering hard-earned knowledge?&lt;/p&gt;

&lt;p&gt;And now stop imagining and start caching!&lt;/p&gt;

</description>
      <category>pkm</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Dendron 100</title>
      <dc:creator>Kevin Lin</dc:creator>
      <pubDate>Tue, 21 Jun 2022 15:28:47 +0000</pubDate>
      <link>https://dev.to/dendron/dendron-100-35of</link>
      <guid>https://dev.to/dendron/dendron-100-35of</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Dendron is launching on product hunt today. If Dendron has been of use to you, please leave feedback on our &lt;a href="https://www.producthunt.com/posts/dendron-v100"&gt;launch page&lt;/a&gt; - this would help us out a lot! 🙏&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Context
&lt;/h3&gt;

&lt;p&gt;Two years ago, we launched Dendron because we believed there was a &lt;a href="https://www.kevinslin.com/notes/e1455752-b052-4212-ac6e-cc054659f2bb.html"&gt;better way of managing knowledge&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The problem - we are all drowning in information! Existing tools try to make it easy to get knowledge in but fail at getting that information back out when needed.&lt;/p&gt;

&lt;p&gt;Dendron is a developer-focused, open-source, note-taking tool.  It combines the simplicity of markdown with the power of VSCode.  To manage information at scale, Dendron applies the insights we've learned from five decades of developer tooling and brings it to general knowledge. &lt;/p&gt;

&lt;p&gt;Since 2020, we've been iterating on this thesis with weekly releases to make Dendron better, faster and stronger! With the v100 release, we'll take a moment to go over some highlights.&lt;/p&gt;

&lt;h3&gt;
  
  
  Better
&lt;/h3&gt;

&lt;p&gt;In a well-designed system, easy things should be easy and hard things possible. &lt;/p&gt;

&lt;p&gt;This hasn't always been the case at Dendron and it's something we've put in a lot of effort addressing through improved documentation, feature work, and better defaults.&lt;/p&gt;

&lt;p&gt;Besides creating a catalog of &lt;a href="https://wiki.dendron.so/notes/ordz7r99w1v099v14hrwgnp"&gt;talks&lt;/a&gt; and &lt;a href="https://wiki.dendron.so/notes/9313b845-d9bf-42c9-aad1-0da34794ce26"&gt;guides&lt;/a&gt; of how Dendron is used in the wild, we've also kicked off a &lt;a href="https://handbook.dendron.so/notes/ebpudfrf6rg5uut75d29lhg"&gt;standardization effort&lt;/a&gt; across all our docs so that any feature, command, or config is just a &lt;a href="https://wiki.dendron.so/notes/a7c3a810-28c8-4b47-96a6-8156b1524af3"&gt;lookup&lt;/a&gt; away!&lt;/p&gt;

&lt;p&gt;Feature wise, the following are some areas we've invested in to make common workflows easy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the &lt;a href="https://wiki.dendron.so/notes/9b059u38o0b7fydjgoazt06"&gt;Dendron Sidebar&lt;/a&gt; provides one click access to most frequently used features like backlinks and the tree view&lt;/li&gt;
&lt;li&gt;the &lt;a href="https://wiki.dendron.so/notes/eea2b078-1acc-4071-a14e-18299fc28f47"&gt;Import Obsidian Vault&lt;/a&gt; command provides a one click method for importing your notes&lt;/li&gt;
&lt;li&gt;the &lt;a href="https://wiki.dendron.so/notes/c877f1204xn2ev5djgwc7do"&gt;Help and Feedback&lt;/a&gt; panel provides a cheatsheet of useful resources and docs&lt;/li&gt;
&lt;li&gt;the &lt;a href="https://wiki.dendron.so/notes/te9obzegtn5vjrsdf4sp5xx"&gt;Tip of the Day&lt;/a&gt; panel highlights new features and enhancements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, many of Dendron's core use cases now come with better defaults. For example, &lt;a href="https://wiki.dendron.so/notes/ogIUqY5VDCJP28G3cAJhd"&gt;daily journals&lt;/a&gt; and &lt;a href="https://wiki.dendron.so/notes/5c213aa6-e4ba-49e8-85c5-1bdcb33ce202"&gt;meeting notes&lt;/a&gt; have built-in &lt;a href="https://wiki.dendron.so/notes/861cbdf8-102e-4633-9933-1f3d74df53d2"&gt;templates&lt;/a&gt; that get created the first time these commands are invoked. &lt;/p&gt;

&lt;h3&gt;
  
  
  Faster
&lt;/h3&gt;

&lt;p&gt;Life is too short to wait for your notes to load. &lt;/p&gt;

&lt;p&gt;Dendron has always been fast - much of this we get for free because your notes are just local plaintext files stored in your computer. &lt;br&gt;
Over the past year, we've optimized all the parts of Dendron's lifecycle, which include initialization, lookup, publishing, and autocomplete just to name a few. &lt;/p&gt;

&lt;p&gt;These changes resulted in orders of magnitude better performance across the board and &amp;lt;100ms of latency for the most common actions in Dendron   🚀 🚀 🚀&lt;/p&gt;

&lt;h3&gt;
  
  
  Stronger
&lt;/h3&gt;

&lt;p&gt;Our goal is to make Dendron an IDE for knowledge. &lt;br&gt;
Since 2020, we've released &lt;strong&gt;over 600 features&lt;/strong&gt; to augment what you can do with plaintext.&lt;/p&gt;

&lt;p&gt;Some highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://wiki.dendron.so/notes/1mu1qb1vilhqr7tlatwyqxm"&gt;Handlebar Templates&lt;/a&gt; that allow augmentation of your templates with conditions, variables, and for loops&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://wiki.dendron.so/notes/ckkmesn09bye11sdnaoqcut"&gt;Hovers&lt;/a&gt; over links and backlinks&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://wiki.dendron.so/notes/bdZhT3nF8Yz3WDzKp7hqh"&gt;Note Traits&lt;/a&gt; that allow you to create notes with custom behavior&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://wiki.dendron.so/notes/4ushYTDoX0TYQ1FDtGQSg"&gt;Publishing using NextJS&lt;/a&gt; with selective publishing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the full changelog of all features, see the &lt;a href="https://wiki.dendron.so/notes/FPXeGgv44ZlJHVoXmU8Ku"&gt;release notes&lt;/a&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Prior to Dendron, I worked at Amazon for over half a decade. &lt;br&gt;
Something that stuck with me from my time there is that it's always &lt;a href="https://aws.amazon.com/executive-insights/content/how-amazon-defines-and-operationalizes-a-day-1-culture/"&gt;day one&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is especially relevant when dealing with knowledge management today because how humans manage information in the age of the internet is fundamentally an unsolved problem.&lt;br&gt;
With Dendron, we think we have something that works. &lt;br&gt;
Whether you are an individual managing a handful of notes or a team with tens of thousands of notes, Dendron helps you stay organized and on top of it all.&lt;/p&gt;

&lt;p&gt;We've spent the past 100 releases iterating on our &lt;a href="https://blog.dendron.so/notes/3dd58f62-fee5-4f93-b9f1-b0f0f59a9b64"&gt;hierarchy first approach to note taking&lt;/a&gt; and we'll spend a few hundred more building on top of this foundation.  On behalf of the entire Dendron team, I would like to say thanks to everyone that helped make this happen - chiefly our wonderful community and our steadfast investors.  Here's to the next 100 releases!&lt;/p&gt;

&lt;p&gt;Sincerely, &lt;br&gt;&lt;br&gt;
- Kevin&lt;/p&gt;

</description>
      <category>pkm</category>
      <category>opensource</category>
      <category>devjournal</category>
      <category>vscode</category>
    </item>
    <item>
      <title>VSCode - Markdown Edition</title>
      <dc:creator>Kevin Lin</dc:creator>
      <pubDate>Mon, 09 May 2022 15:57:50 +0000</pubDate>
      <link>https://dev.to/dendron/vscode-markdown-edition-e73</link>
      <guid>https://dev.to/dendron/vscode-markdown-edition-e73</guid>
      <description>&lt;p&gt;With the &lt;a href="https://code.visualstudio.com/updates/v1_67"&gt;1.67 release&lt;/a&gt;, markdown gains programming language like tooling in VSCode &lt;/p&gt;

&lt;p&gt;Specifically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;drag and drop files into the editor to create a markdown link&lt;/li&gt;
&lt;li&gt;find all references to header|links|files|urls inside of markdown&lt;/li&gt;
&lt;li&gt;rename headers|links inside markdown  (and propagate the changes to all places where the link is used)&lt;/li&gt;
&lt;li&gt;rename markdown files (and propagate changes to all links referencing said file)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If we move past drag and drop, it's notable that all other functions are related to referencing and renaming symbols. These are capabilities that are more commonly associated with programming languages than markdown. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A programming language is any set of rules that converts strings... to various kinds of machine code output&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Programming_language#Static_semantics"&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Programming languages generally have a strict syntax that constrains the language. IDEs leverage this strict syntax to offer features to manipulate symbols within the language. &lt;/p&gt;

&lt;p&gt;Markdown also has &lt;em&gt;&lt;a href="https://daringfireball.net/projects/markdown/syntax"&gt;syntax&lt;/a&gt;&lt;/em&gt; (albeit more loosely defined) . This makes it possible to introduce similar transformations onto markdown. &lt;/p&gt;

&lt;p&gt;The reason that this functionality is useful (and necessary) for programming languages is because codebases today can be massive, surpassing &lt;a href="https://www.quora.com/How-many-lines-of-code-is-Google-Chrome"&gt;hundreds of millions of lines of code&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Repositories of markdown can also be massive. They are increasingly used to document and store general knowledge - both in the context of personal knowledge management (PKM) and team knowledge management (TKM). &lt;/p&gt;

&lt;p&gt;For purposes of illustration - the primary &lt;a href="https://wiki.dendron.so/notes/6682fca0-65ed-402c-8634-94cd51463cc4"&gt;vault&lt;/a&gt; (the circle titled &lt;code&gt;private&lt;/code&gt;) for the Dendron team has over &lt;strong&gt;400k lines&lt;/strong&gt; of markdown. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w5aMfxoq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://org-dendron-public-assets.s3.amazonaws.com/images/upyp4ow9fkpwvu50n8wsvnp-dendron-private.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w5aMfxoq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://org-dendron-public-assets.s3.amazonaws.com/images/upyp4ow9fkpwvu50n8wsvnp-dendron-private.png" alt="Dendron workspace" width="880" height="788"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The illustartion is generated using a fork of github's &lt;a href="https://github.com/kevinslin/repo-visualizer"&gt;repo-visualization&lt;/a&gt; code, first described &lt;a href="https://githubnext.com/projects/repo-visualization/"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Running &lt;code&gt;cloc&lt;/code&gt; returns the following output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cloc --vcs=git .
github.com/AlDanial/cloc v 1.92  T=7.82 s (1472.4 files/s, 65739.6 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Markdown                     11494         108500             19         404711
JSON                             3              5              0            369
YAML                            14              1              0            351
-------------------------------------------------------------------------------
SUM:                         11511         108506             19         405431
-------------------------------------------------------------------------------
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Given the shared syntactical properties and problems of scale between programming languages and markdown, it makes sense that the same tooling can work for both.&lt;/p&gt;

&lt;p&gt;VSCode, and IDEs more broadly, help developers manage large code bases by making available tools to leverage and manipulate the &lt;strong&gt;syntax&lt;/strong&gt; of programming languages. By shifting some of this tooling to markdown, can we do the same for large markdown repositories?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.dendron.so/notes/N9VxT7G5SovmncezBAGO2"&gt;Our bet&lt;/a&gt; at &lt;a href="https://www.dendron.so/"&gt;Dendron&lt;/a&gt; is a resounding &lt;strong&gt;yes!&lt;/strong&gt; This is why we built our knowledge management platform inside of VSCode. By leveraging the paradigms from IDEs and applying them to &lt;a href="https://wiki.dendron.so/notes/c5e5adde-5459-409b-b34d-a0d75cbb1052"&gt;structured&lt;/a&gt; markdown, our mission is to help &lt;strong&gt;humans&lt;/strong&gt; &lt;a href="https://www.kevinslin.com/notes/e1455752-b052-4212-ac6e-cc054659f2bb"&gt;manage any amount of information&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>markdown</category>
      <category>pkm</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Plaintext Task Management with Dendron and VSCode</title>
      <dc:creator>John Knowles</dc:creator>
      <pubDate>Wed, 20 Apr 2022 16:11:27 +0000</pubDate>
      <link>https://dev.to/dendron/plaintext-task-management-with-dendron-and-vscode-3gb4</link>
      <guid>https://dev.to/dendron/plaintext-task-management-with-dendron-and-vscode-3gb4</guid>
      <description>&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Tasks come in all &lt;strong&gt;shapes&lt;/strong&gt; and &lt;strong&gt;sizes&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Sometimes, we simply need a checkbox and a bullet to know what's complete and what's left to-do. Other times, we need to track more complex attributes of our tasks like deadlines, priorities, statuses, assignments, dependencies and more. &lt;/p&gt;

&lt;p&gt;In this tutorial, we'll explore a &lt;strong&gt;simple&lt;/strong&gt; and &lt;strong&gt;scalable&lt;/strong&gt; solution to task management with &lt;a href="https://www.dendron.so/" rel="noopener noreferrer"&gt;Dendron&lt;/a&gt;. Dendron is a developer-focused note taking tool for that is open source, local-first, and integrated with Visual Studio Code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Concepts
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Task Notes
&lt;/h3&gt;

&lt;p&gt;Task Notes are a &lt;strong&gt;special note&lt;/strong&gt; in Dendron, like &lt;a href="https://wiki.dendron.so/notes/5c213aa6-e4ba-49e8-85c5-1bdcb33ce202" rel="noopener noreferrer"&gt;Scratch Notes&lt;/a&gt; or &lt;a href="https://wiki.dendron.so/notes/5c213aa6-e4ba-49e8-85c5-1bdcb33ce202" rel="noopener noreferrer"&gt;Daily Journal Notes&lt;/a&gt;. Task Notes use metadata in their frontmatter to help track and display task-related information. &lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;If you'd like to follow along, make sure you've read &lt;a href="https://wiki.dendron.so/notes/678c77d9-ef2c-4537-97b5-64556d6337f1" rel="noopener noreferrer"&gt;Getting Started&lt;/a&gt;, and are able to open a workspace. &lt;/p&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;p&gt;Let's imagine a friend is having a birthday, and we want to bake some cookies to help celebrate. The party is in a few hours, so we'll need to act fast!&lt;/p&gt;

&lt;p&gt;To show up to the party with cookies, we'll need to complete three tasks: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;go to the store and buy the ingredients&lt;/li&gt;
&lt;li&gt;mix the ingredients and bake the cookies&lt;/li&gt;
&lt;li&gt;bring the freshly-baked cookies to the party &lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Create bullet tasks
&lt;/h3&gt;

&lt;p&gt;We can begin with the simplest form of task management: &lt;strong&gt;a bullet list of checkmarks&lt;/strong&gt;. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open &lt;a href="https://wiki.dendron.so/notes/a7c3a810-28c8-4b47-96a6-8156b1524af3" rel="noopener noreferrer"&gt;lookup&lt;/a&gt; (&lt;code&gt;Ctrl+L&lt;/code&gt; / &lt;code&gt;Cmd+L&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Type &lt;code&gt;birthday-cookies&lt;/code&gt; in the text prompt and hit enter to create a note&lt;/li&gt;
&lt;li&gt;Copy the following into the &lt;code&gt;birthday-cookies&lt;/code&gt; note:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; [ ] buy ingredients
&lt;span class="p"&gt;-&lt;/span&gt; [ ] bake cookies
&lt;span class="p"&gt;-&lt;/span&gt; [ ] bring cookies to party
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Check off a bullet task
&lt;/h3&gt;

&lt;p&gt;After writing down our list, we make a quick trip to the store and return, ingredients in hand. We have completed our first task! Let's mark it off our list. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type &lt;code&gt;x&lt;/code&gt; into the brackets next to &lt;code&gt;buy ingredients&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; [x] buy ingredients
&lt;span class="p"&gt;-&lt;/span&gt; [ ] bake cookies
&lt;span class="p"&gt;-&lt;/span&gt; [ ] bring cookies to party
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your bullet list should now render Markdown checkboxes in &lt;a href="https://wiki.dendron.so/notes/Lnp1URddmWEWweyf" rel="noopener noreferrer"&gt;Preview&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Ftutorial-task-checklist.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Ftutorial-task-checklist.png" alt="bullet list of tasks with "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a task note
&lt;/h3&gt;

&lt;p&gt;Not that we have the ingredients, it's time to bake. Looking at our &lt;code&gt;bake cookies&lt;/code&gt; task, something feels missing...we don't know the steps involved in baking! Let's fix that...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delete the bracket next to &lt;code&gt;bake cookies&lt;/code&gt;. Your note should look like the following:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; [x] buy ingredients
&lt;span class="p"&gt;-&lt;/span&gt; bake cookies
&lt;span class="p"&gt;-&lt;/span&gt; [ ] bring cookies to party
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Select the text &lt;code&gt;bake cookies&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Open the command palette (&lt;code&gt;Ctrl+Shift+P&lt;/code&gt; / &lt;code&gt;Cmd+Shift+P&lt;/code&gt;) and type &lt;code&gt;task&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Select the &lt;code&gt;Dendron: Create Task Note&lt;/code&gt; command and hit &lt;code&gt;Enter&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;You should see the text &lt;code&gt;birthday-cookies.bake-cookies&lt;/code&gt;. If not, correct the text. Hit  &lt;code&gt;Enter&lt;/code&gt; again. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For reference, we are using the following configuration for this tutorial (the default in Dendron):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;    &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;task&lt;/span&gt;
        &lt;span class="na"&gt;dateFormat&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;y.MM.dd&lt;/span&gt;
        &lt;span class="na"&gt;addBehavior&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;asOwnDomain&lt;/span&gt;
        &lt;span class="na"&gt;statusSymbols&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'p&lt;/span&gt;
            &lt;span class="s"&gt;wip&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;w&lt;/span&gt;
            &lt;span class="s"&gt;done&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;x&lt;/span&gt;
            &lt;span class="s"&gt;assigned&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;a&lt;/span&gt;
            &lt;span class="s"&gt;moved&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;m&lt;/span&gt;
            &lt;span class="s"&gt;blocked&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;b&lt;/span&gt;
            &lt;span class="s"&gt;delegated&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;l&lt;/span&gt;
            &lt;span class="s"&gt;dropped&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;d&lt;/span&gt;
            &lt;span class="s"&gt;pending&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;y'&lt;/span&gt;
        &lt;span class="na"&gt;prioritySymbols&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;H&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;high&lt;/span&gt;
            &lt;span class="na"&gt;M&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;medium&lt;/span&gt;
            &lt;span class="na"&gt;L&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;low&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visit here for more information on &lt;a href="https://wiki.dendron.so/notes/5c213aa6-e4ba-49e8-85c5-1bdcb33ce202" rel="noopener noreferrer"&gt;the configuration of special notes like task notes&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check off a task note
&lt;/h3&gt;

&lt;p&gt;Congrats, you've created a task note! You may notice something strange with this new note. There's something extra in the &lt;a href="https://wiki.dendron.so/notes/ffec2853-c0e0-4165-a368-339db12c8e4b" rel="noopener noreferrer"&gt;frontmatter&lt;/a&gt; (the &lt;code&gt;YAML&lt;/code&gt; text at the top of the file). &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🗒 &lt;strong&gt;Note&lt;/strong&gt;: Frontmatter is hidden by default in task notes. To expand, click the arrow next to the top line.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Add an &lt;code&gt;'x'&lt;/code&gt; next to &lt;code&gt;status&lt;/code&gt; so it reads:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;status: 'x'
due: ''
priority: ''
owner: ''
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Navigate back to the &lt;code&gt;birthday-cookies&lt;/code&gt; note. &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip&lt;/strong&gt;: To quickly go back to the previous note, use the &lt;code&gt;Alt-Tab&lt;/code&gt; shortcut&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You should see that the &lt;code&gt;bake-cookies&lt;/code&gt; note has a filled checkbox.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; [x] buy ingredients
&lt;span class="p"&gt;-&lt;/span&gt; [x] [[bake cookies|birthday-cookies.bake-cookies]]
&lt;span class="p"&gt;-&lt;/span&gt; [ ] bring cookies to party
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Task notes give we get an up-to-date view of the task's status any place it is linked to. But let's not get ahead of ourselves, we haven't done any baking yet!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Return to &lt;code&gt;birthday-cookies.bake-cookies&lt;/code&gt; and remove the &lt;code&gt;x&lt;/code&gt; next to &lt;code&gt;status&lt;/code&gt; so that it reads: &lt;code&gt;status: ''&lt;/code&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;🚧 &lt;strong&gt;Under Construction&lt;/strong&gt;: We appreciate your patience as we develop new features like task notes. Currently, checkboxes are under construction, and are not rendering correctly in Preview.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Break into subtasks
&lt;/h3&gt;

&lt;p&gt;Let's make a task for each step:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;prepare the oven and ingredients&lt;/li&gt;
&lt;li&gt;mix the ingredients&lt;/li&gt;
&lt;li&gt;form dough balls and bake in the oven&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Copy the following into &lt;code&gt;birthday-cookies.bake-cookies&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; prepare oven and ingredients
&lt;span class="p"&gt;-&lt;/span&gt; mix ingredients
&lt;span class="p"&gt;-&lt;/span&gt; form balls and bake
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the &lt;code&gt;mix ingredients&lt;/code&gt; and &lt;code&gt;form balls and bake&lt;/code&gt; subtasks, create a task note as you did above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the text for the new task&lt;/li&gt;
&lt;li&gt;Open the &lt;code&gt;Command Palette&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Run the &lt;code&gt;Dendron: Create Task Note&lt;/code&gt; command&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your &lt;code&gt;bake-cookies&lt;/code&gt; task should now look as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; [ ] [[prepare oven and ingredients|bake-cookies.prepare-oven-and-ingredients]]
&lt;span class="p"&gt;-&lt;/span&gt; [ ] [[mix ingredients|bake-cookies.mix-ingredients]]
&lt;span class="p"&gt;-&lt;/span&gt; [ ] [[form balls and bake|bake-cookies.form-balls-and-bake]]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Navigate to &lt;code&gt;bake-cookies.prepare-oven-and-ingredients&lt;/code&gt; and check out at the backlinks of the note&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Ftutorial-task-backlink.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Ftutorial-task-backlink.png" alt="Backlinks window with a backlink to the "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip&lt;/strong&gt;: By nesting our tasks notes (linking to a task inside another task), we can monitor which tasks are dependent on others using backlinks.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Return to your &lt;code&gt;birthday-cookies&lt;/code&gt; note and hover your mouse above the link to the &lt;code&gt;bake-cookies&lt;/code&gt; note. You should see the newly created tasks in Quick Preview. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Ftutorial-task-preview.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Ftutorial-task-preview.png" alt="Quick Preview window showing links in "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip&lt;/strong&gt;: Try clicking on one of the tasks in the Quick Preview. Look, it's a link!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Look at you go, you've created subtasks! &lt;/p&gt;

&lt;p&gt;Now, you can track your progress at a more granular level through the different baking steps. Soon, the smell of cookies will be in the air, and it will be time to party! 🥳&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrap-up
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Takeaways
&lt;/h3&gt;

&lt;p&gt;Upon completing this tutorial, you've learned about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;creating a simple tasks using &lt;code&gt;[ ]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;creating a task note&lt;/li&gt;
&lt;li&gt;adding subtasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Task management in Dendron is flexible. Through task-specific features like bullet tasks, task notes, subtasks and configs, as well as familiar features like &lt;a href="https://wiki.dendron.so/notes/f3a41725-c5e5-4851-a6ed-5f541054d409" rel="noopener noreferrer"&gt;hierarchies&lt;/a&gt; and &lt;a href="https://wiki.dendron.so/notes/3472226a-ff3c-432d-bf5d-10926f39f6c2" rel="noopener noreferrer"&gt;bidirectional links&lt;/a&gt;, Dendron gives you the tools to tackle tasks at any scale. &lt;/p&gt;

&lt;h3&gt;
  
  
  Next Steps
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Customize your task notes with a &lt;a href="https://wiki.dendron.so/notes/SEASewZSteDK7ry1AshNG" rel="noopener noreferrer"&gt;custom configuration&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Learn about the process of starting simple and reshaping with the &lt;a href="https://wiki.dendron.so/notes/e780000d-c784-4945-8e42-35218a3ecf10" rel="noopener noreferrer"&gt;Amoeba Pattern&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Learn more about how Dendron supports other workflows, like &lt;a href="https://wiki.dendron.so/notes/e65dfe53-41f7-4b16-b870-dadec1775497" rel="noopener noreferrer"&gt;Bullet Journaling&lt;/a&gt; and &lt;a href="https://wiki.dendron.so/notes/593206ea-5658-4874-bafd-18a138870f91" rel="noopener noreferrer"&gt;Todos&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Read through the proposal for &lt;a href="https://wiki.dendron.so/notes/716e2699-42e1-44bd-9b97-124f03173ddc" rel="noopener noreferrer"&gt;task notes&lt;/a&gt; and give your feedback on tasks in Dendron &lt;/li&gt;
&lt;li&gt;See how other Dendrologist manage tasks from a &lt;a href="https://wiki.dendron.so/notes/ordz7r99w1v099v14hrwgnp" rel="noopener noreferrer"&gt;live demonstration&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Learn how Dendron manages tasks as a team in our &lt;a href="https://handbook.dendron.so/notes/nvv2jssywd0e3wvqg6jem8j" rel="noopener noreferrer"&gt;organization handbook&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>dendron</category>
      <category>plaintext</category>
      <category>vscode</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>2021 Dendron New User Survey Results</title>
      <dc:creator>Derek Ardolf</dc:creator>
      <pubDate>Tue, 08 Feb 2022 20:51:32 +0000</pubDate>
      <link>https://dev.to/dendron/2021-dendron-new-user-survey-results-1736</link>
      <guid>https://dev.to/dendron/2021-dendron-new-user-survey-results-1736</guid>
      <description>&lt;p&gt;The new user survey was open for several months in 2021, where we were prompting new Dendron users within VS Code itself. We had a few thousand respondents take the opportunity to give us feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  What backgrounds do our users have?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2F2021-survey-primary-background.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2F2021-survey-primary-background.png" alt="Bar graph displaying different backgrounds of users" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Users were asked about their backgrounds. Just over half of respondents had a background as &lt;strong&gt;Software Developers&lt;/strong&gt; (53%), while the next largest group were &lt;strong&gt;Students&lt;/strong&gt; (14%).&lt;/p&gt;

&lt;p&gt;Approximations of remaining background options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Researcher&lt;/strong&gt; (7%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manager&lt;/strong&gt; (7%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevOps&lt;/strong&gt; (7%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical Writer&lt;/strong&gt; (4%)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;Other&lt;/strong&gt; (8%) were spread across the following groups:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The percentages are in relation to the total number of respondents in &lt;strong&gt;Other&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Systems/Infrastructure/IT/InfoSec Administrators/Engineers (13%)

&lt;ul&gt;
&lt;li&gt;Solutions Architects&lt;/li&gt;
&lt;li&gt;InfoSec / CyberSecurity&lt;/li&gt;
&lt;li&gt;Systems Engineers/Administrators&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;General Hobbyist/Multipotentialite/Polymath (8%)&lt;/li&gt;

&lt;li&gt;Data Scientist (6%)&lt;/li&gt;

&lt;li&gt;Artist (Designer/Musician/etc.) (5%)&lt;/li&gt;

&lt;li&gt;Author/Writer/Blogger (3%)&lt;/li&gt;

&lt;li&gt;Teacher/Professor (3%)&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;There were some smaller groups that stood out in the &lt;strong&gt;Other&lt;/strong&gt; category, having one to three respondents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Therapists&lt;/li&gt;
&lt;li&gt;Legal (Lawyers/Law Graduates)&lt;/li&gt;
&lt;li&gt;GeoChemistry &lt;/li&gt;
&lt;li&gt;Pharmacist&lt;/li&gt;
&lt;li&gt;Biologist&lt;/li&gt;
&lt;li&gt;D&amp;amp;D Player&lt;/li&gt;
&lt;li&gt;Dentist&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What are people using Dendron for?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2F2021-survey-purpose-of-dendron.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2F2021-survey-purpose-of-dendron.png" alt="Bar graph displaying different uses users have for Dendron" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;New users were able to select all that applied. A majority of users are coming to Dendron, first and foremost, for a &lt;strong&gt;Personal Knowledge Base&lt;/strong&gt; (80%) solution.&lt;/p&gt;

&lt;p&gt;Approximations of remaining uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Todos and Agenda&lt;/strong&gt; (57%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Research&lt;/strong&gt; (47%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Meeting notes&lt;/strong&gt; (45%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team knowledge base&lt;/strong&gt; (29%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publishing&lt;/strong&gt; (22%)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;Other&lt;/strong&gt; (18%) included the following groups:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The percentages are in relation to the total number of respondents in &lt;strong&gt;Other&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Student/Learning/Class/Academia Notes (4%)&lt;/li&gt;
&lt;li&gt;Journaling (4%)&lt;/li&gt;
&lt;li&gt;Content Creation and Non-fiction/Fiction Writing (3%)&lt;/li&gt;
&lt;li&gt;Project / Software Documentation (2%)&lt;/li&gt;
&lt;li&gt;System/Product Configuration and Design (2%)&lt;/li&gt;
&lt;li&gt;CRM (1%)&lt;/li&gt;
&lt;li&gt;Second Brain (1%)&lt;/li&gt;
&lt;li&gt;Gaming Notes (D&amp;amp;D, RPGs, General) (1%)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There were some smaller groups that stood out in the &lt;strong&gt;Other&lt;/strong&gt; category, having one to three respondents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scripted/Automated documentation creation&lt;/li&gt;
&lt;li&gt;Tracking, Reading, and Taking Notes on Books&lt;/li&gt;
&lt;li&gt;Recipes / Cookbook&lt;/li&gt;
&lt;li&gt;Drafting GitHub issues/MRs&lt;/li&gt;
&lt;li&gt;Event planning&lt;/li&gt;
&lt;li&gt;Presentations&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Are users coming from any existing tools?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2F2021-survey-previous-tools.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2F2021-survey-previous-tools.png" alt="Bar graph displaying different tools used before or with Dendron" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;New users were able to select all that applied. More users said they were coming from &lt;strong&gt;No Previous Tool&lt;/strong&gt; (26%) than users who found themselves looking at Dendron after something else, with &lt;strong&gt;OneNote&lt;/strong&gt; (25%) coming in a close second.&lt;/p&gt;

&lt;p&gt;Approximations of remaining previous (or parallel) tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Notion&lt;/strong&gt; (23%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Keep&lt;/strong&gt; (19%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Obsidian&lt;/strong&gt; (18%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evernote&lt;/strong&gt; (14%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Roam&lt;/strong&gt; (5%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logseq&lt;/strong&gt; (5%)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Foam&lt;/strong&gt; (5%)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;15% of respondents provided additional information under &lt;strong&gt;Other&lt;/strong&gt;, providing a total of over &lt;strong&gt;70 different tools and workflows.&lt;/strong&gt; Here are the top &lt;strong&gt;Other&lt;/strong&gt; tools listed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The percentages are in relation to the total number of respondents in &lt;strong&gt;Other&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Joplin (9%)&lt;/li&gt;
&lt;li&gt;org-mode / org-roam / emacs (6%)&lt;/li&gt;
&lt;li&gt;Bear (6%)&lt;/li&gt;
&lt;li&gt;Apple Notes (4%)&lt;/li&gt;
&lt;li&gt;Plain Markdown or text files (4%)&lt;/li&gt;
&lt;li&gt;Trello / Confluence / Jira (4%)&lt;/li&gt;
&lt;li&gt;Typora (3%)&lt;/li&gt;
&lt;li&gt;Physical notes (2%)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Do users have plans on publishing their notes?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2F2021-survey-publishing-interest.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2F2021-survey-publishing-interest.png" alt="Bar graph displaying levels of interest in publishing with Dendron" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;New users were only able to select a single response, if they were to respond to this question at all. A majority of users were &lt;strong&gt;Curious&lt;/strong&gt; (39%) about publishing, or otherwise already saying &lt;strong&gt;Yes&lt;/strong&gt; (36%) to planning publishing. The remaining respondents said &lt;strong&gt;No&lt;/strong&gt; (25%) and were not interested.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;We've set aside the majority of this quarter, and the last, to iterate on the feedback you've given us (specific details to come in a future blog post).&lt;br&gt;
We are committed to making Dendron the absolute best tool and community for thought in 2022 and beyond!&lt;/p&gt;

&lt;p&gt;If you like to be part of the effort, please take part in the &lt;a href="https://link.dendron.so/74EI" rel="noopener noreferrer"&gt;2022 Dendron User Survey&lt;/a&gt; and help us build a better tool for thought 🌱&lt;/p&gt;




&lt;p&gt;Enjoy the blog? &lt;a href="https://link.dendron.so/newsletter" rel="noopener noreferrer"&gt;Subscribe to our newsletter!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Newsletters not your thing? You can also follow us elsewhere on the interwebs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Join &lt;a href="https://link.dendron.so/discord" rel="noopener noreferrer"&gt;Dendron on Discord&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Register for &lt;a href="https://link.dendron.so/luma" rel="noopener noreferrer"&gt;Dendron Events on Luma&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Follow &lt;a href="https://link.dendron.so/twitter" rel="noopener noreferrer"&gt;Dendron on Twitter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Checkout &lt;a href="https://link.dendron.so/github" rel="noopener noreferrer"&gt;Dendron on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Interested in creating your own knowledge base using markdown, git, and VSCode? Get started with &lt;a href="https://wiki.dendron.so/notes/678c77d9-ef2c-4537-97b5-64556d6337f1/" rel="noopener noreferrer"&gt;Dendron&lt;/a&gt; today.&lt;/p&gt;

</description>
      <category>news</category>
      <category>opensource</category>
      <category>startup</category>
    </item>
    <item>
      <title>The Five Minute Journal with Dendron and Visual Studio Code</title>
      <dc:creator>Derek Ardolf</dc:creator>
      <pubDate>Thu, 06 Jan 2022 16:39:05 +0000</pubDate>
      <link>https://dev.to/dendron/the-five-minute-journal-with-dendron-and-visual-studio-code-6nc</link>
      <guid>https://dev.to/dendron/the-five-minute-journal-with-dendron-and-visual-studio-code-6nc</guid>
      <description>&lt;p&gt;It's 2022 and you're looking to start off the year right by keeping a journal. Where to start? &lt;em&gt;The Five Minute Journal&lt;/em&gt; (5MJ)&lt;sup id="fnref1"&gt;1&lt;/sup&gt; is a simple but effective way to get started with note taking.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Five Minute Journal
&lt;/h2&gt;

&lt;p&gt;Tim Ferriss,&lt;sup id="fnref2"&gt;2&lt;/sup&gt; world-famous entrepreneur and author of books such as &lt;em&gt;Tribe of Mentors&lt;/em&gt;,&lt;sup id="fnref3"&gt;3&lt;/sup&gt; uploaded a video in 2020 all about his approach to note taking with physical notebooks.&lt;sup id="fnref4"&gt;4&lt;/sup&gt; 5MJ helps him express gratitude, make days better, and focus on mindfulness.&lt;/p&gt;

&lt;p&gt;In this post, we'll be going over how to create your own 5MJ using &lt;a href="https://www.dendron.so/" rel="noopener noreferrer"&gt;Dendron&lt;/a&gt;. Dendron is a structured note taking tool for developers that is open source, local first, and integrated with Visual Studio Code (VS Code).&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;This post expects that you've gone through the &lt;a href="https://wiki.dendron.so/notes/678c77d9-ef2c-4537-97b5-64556d6337f1/" rel="noopener noreferrer"&gt;Dendron Getting Started Guide&lt;/a&gt; and have a workspace opened to work with. If you're new to Dendron, make sure to take a look.&lt;/p&gt;

&lt;h2&gt;
  
  
  Concepts
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Daily journal notes
&lt;/h3&gt;

&lt;p&gt;Daily journal notes are special notes meant to easily track your everyday life. Dendron also has a built-in &lt;a href="https://wiki.dendron.so/notes/25287595-96bb-410b-ab46-eb9a26b0e259/#calendar-view" rel="noopener noreferrer"&gt;Calendar View&lt;/a&gt; that helps you visually navigate and create new journal entries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Templates
&lt;/h3&gt;

&lt;p&gt;Templates are notes with pre-outlined content meant for reuse. Templates can either be inserted into an open note with the &lt;code&gt;Dendron: Insert Note&lt;/code&gt; command, or automatically applied at note creation with &lt;a href="https://wiki.dendron.so/notes/c5e5adde-5459-409b-b34d-a0d75cbb1052/" rel="noopener noreferrer"&gt;Schemas&lt;/a&gt;. These are meant to reduce friction in the creation of new content, providing standardized outlines to your notes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Schemas
&lt;/h3&gt;

&lt;p&gt;As you end up creating more notes, it can be hard to keep track of them all. This is why Dendron has &lt;strong&gt;schemas&lt;/strong&gt; to help you manage your notes at scale. Think of schemas as an &lt;strong&gt;optional type system&lt;/strong&gt; for your notes. They describe the hierarchy of your data and are themselves, represented as a hierarchy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create 5MJ template
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Open &lt;a href="https://wiki.dendron.so/notes/a7c3a810-28c8-4b47-96a6-8156b1524af3.html" rel="noopener noreferrer"&gt;lookup&lt;/a&gt; (&lt;code&gt;Ctrl+L&lt;/code&gt; / &lt;code&gt;Cmd+L&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type &lt;code&gt;templates.daily-5mj&lt;/code&gt; in the text prompt and hit enter to create the template&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy and paste the following markdown:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&amp;lt;!--
Based on the journaling method created by Intelligent Change:
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Intelligent Change: Our Story&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://www.intelligentchange.com/pages/our-story&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;The Five Minute Journal&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://www.intelligentchange.com/products/the-five-minute-journal&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
--&amp;gt;

&lt;span class="gu"&gt;## Morning&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- Fill out this section after waking up --&amp;gt;&lt;/span&gt;

&lt;span class="gu"&gt;### Gratitude&lt;/span&gt;

I am grateful for:
&lt;span class="p"&gt;
1.&lt;/span&gt;
&lt;span class="p"&gt;2.&lt;/span&gt;
&lt;span class="p"&gt;3.&lt;/span&gt;

&lt;span class="gu"&gt;### What would make today great?&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt;
&lt;span class="p"&gt;2.&lt;/span&gt;
&lt;span class="p"&gt;3.&lt;/span&gt;

&lt;span class="gu"&gt;### Daily affirmations&lt;/span&gt;

I am...

&lt;span class="gu"&gt;## Evening&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- Fill out this section before going to sleep, reflecting on your day --&amp;gt;&lt;/span&gt;

&lt;span class="gu"&gt;### Amazing things that happened today&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt;
&lt;span class="p"&gt;2.&lt;/span&gt;
&lt;span class="p"&gt;3.&lt;/span&gt;

&lt;span class="gu"&gt;### How could I have made today even better?&lt;/span&gt;

I could have made today better by
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Save the file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You now have a new template with the 5MJ outline.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create 5MJ schema
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Templates can be used with or without schemas. Run &lt;a href="https://wiki.dendron.so/notes/eea2b078-1acc-4071-a14e-18299fc28f47.html#insert-note" rel="noopener noreferrer"&gt;Insert Note&lt;/a&gt; to insert a template into a currently opened note.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Open &lt;a href="https://wiki.dendron.so/notes/60c03500-98e4-4a02-a31e-2702b4068a88.html" rel="noopener noreferrer"&gt;schema lookup&lt;/a&gt; (&lt;code&gt;Ctrl+Shift+L&lt;/code&gt; / &lt;code&gt;Cmd+Shift+L&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Type &lt;code&gt;5mj&lt;/code&gt; in the text prompt and hit enter to create the schema, which should look like the following:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="na"&gt;imports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;span class="na"&gt;schemas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5mj&lt;/span&gt;
    &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5mj&lt;/span&gt;
    &lt;span class="na"&gt;parent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;root&lt;/span&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Update 5MJ schema contents
&lt;/h3&gt;

&lt;p&gt;We are going to use &lt;a href="https://wiki.dendron.so/notes/c5e5adde-5459-409b-b34d-a0d75cbb1052.html#inline-schema-anatomy" rel="noopener noreferrer"&gt;Inline Schema&lt;/a&gt;, a simpler schema format that takes less lines and uses indentation for visual understanding.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace the content of &lt;code&gt;5mj.schema.yml&lt;/code&gt; with the following:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="na"&gt;schemas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="c1"&gt;# Daily is the top most schema since its parent is 'root' it must have an identifier&lt;/span&gt;
&lt;span class="c1"&gt;# this identifier 'daily' will be used when using 'Lookup (schema)' command.&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;daily&lt;/span&gt;
  &lt;span class="na"&gt;parent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;root&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;daily&lt;/span&gt;
  &lt;span class="na"&gt;desc&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
  &lt;span class="c1"&gt;# Children of the top most schema do not need to contain identifier and just &lt;/span&gt;
  &lt;span class="c1"&gt;# require a 'pattern' to be set to match the hierarchy of notes.&lt;/span&gt;
  &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;journal&lt;/span&gt;
      &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="c1"&gt;# This pattern matches the YYYY (year) child hierarchy&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[0-2][0-9][0-9][0-9]"&lt;/span&gt;
          &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="c1"&gt;# This pattern matches the MM (month) child hierarchy&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[0-1][0-9]"&lt;/span&gt;
              &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                  &lt;span class="c1"&gt;# This pattern matches the DD (day) child hierarchy&lt;/span&gt;
                &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[0-3][0-9]"&lt;/span&gt;
                  &lt;span class="c1"&gt;# As with regular schema we can set the template to be used with&lt;/span&gt;
                  &lt;span class="c1"&gt;# the match of our notes. Below is an example usage of shorthand template&lt;/span&gt;
                  &lt;span class="c1"&gt;# definition (which defaults to type: note). &lt;/span&gt;
                  &lt;span class="na"&gt;desc&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Five Minute Journal&lt;/span&gt;
                  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;templates.daily-5mj&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;pattern&lt;/code&gt; attribute is using a &lt;a href="https://wiki.dendron.so/notes/c6fd6bc4-7f75-4cbb-8f34-f7b99bfe2d50.html#glob-pattern" rel="noopener noreferrer"&gt;Glob Pattern&lt;/a&gt;, which is an expression used to match ranges and combinations of characters.&lt;/p&gt;

&lt;p&gt;To match with the daily journal structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: &lt;code&gt;daily.journal.2021.12.31&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Patterns:

&lt;ul&gt;
&lt;li&gt;Year: &lt;code&gt;[0-2][0-9][0-9][0-9]&lt;/code&gt; means match the range &lt;code&gt;0000 - 2999&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Month: &lt;code&gt;[0-1][0-9]&lt;/code&gt; means match the range &lt;code&gt;00 - 19&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Day: &lt;code&gt;[0-3][0-9]&lt;/code&gt; means match the range &lt;code&gt;00 - 39&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;This means all new daily journal notes are within pattern ranges.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a new daily journal
&lt;/h3&gt;

&lt;p&gt;Creating a daily journal entry results in the &lt;code&gt;templates.daily-5mj&lt;/code&gt; template automatically inserted.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;Create Daily Journal Note&lt;/code&gt; (&lt;code&gt;Ctrl+Shift+I&lt;/code&gt; / &lt;code&gt;Cmd+Shift+I&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You should see a new daily journal note with the 5MJ template inserted.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2F5mj-new-daily-journal.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2F5mj-new-daily-journal.gif" alt="Create 5MJ Daily Journal from Schema and Template" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Congratulations!
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Key takeaways
&lt;/h3&gt;

&lt;p&gt;After doing this, you've now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created a 5MJ template&lt;/li&gt;
&lt;li&gt;Created a 5MJ schema&lt;/li&gt;
&lt;li&gt;Created your first daily journal with the 5MJ template applied via schema&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Next steps
&lt;/h3&gt;

&lt;p&gt;Now what? You have daily journals using templates, but Dendron can do much more. It's an open source, local-first knowledge management solution that scales as you do.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn to &lt;a href="https://wiki.dendron.so/notes/gHERCRoEXzASfXorBgZN0.html" rel="noopener noreferrer"&gt;swiftly create schema by targeting existing note hierarchies&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Learn to level-up your daily life with &lt;a href="https://wiki.dendron.so/notes/e65dfe53-41f7-4b16-b870-dadec1775497.html" rel="noopener noreferrer"&gt;the bullet journaling workflow&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Learn to explore your schema visually using the &lt;a href="https://wiki.dendron.so/notes/587e6d62-3c5b-49b0-aedc-02f62f0448e6.html#schema-graph" rel="noopener noreferrer"&gt;schema graph&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Check out an end-to-end workstyle, managing 20k notes, using schemas and daily journals from &lt;a href="https://wiki.dendron.so/notes/fzHazEFWTpUVexmv/" rel="noopener noreferrer"&gt;A Day in Dendron&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.dendron.so/notes/683740e3-70ce-4a47-a1f4-1f140e80b558/" rel="noopener noreferrer"&gt;Dendron FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.dendron.so/notes/c6fd6bc4-7f75-4cbb-8f34-f7b99bfe2d50/" rel="noopener noreferrer"&gt;Dendron Concepts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Enjoy the blog? &lt;a href="https://link.dendron.so/newsletter" rel="noopener noreferrer"&gt;Subscribe to our newsletter!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Newsletters not your thing? You can also follow us elsewhere on the interwebs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Join &lt;a href="https://link.dendron.so/discord" rel="noopener noreferrer"&gt;Dendron on Discord&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Register for &lt;a href="https://link.dendron.so/luma" rel="noopener noreferrer"&gt;Dendron Events on Luma&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Follow &lt;a href="https://link.dendron.so/twitter" rel="noopener noreferrer"&gt;Dendron on Twitter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Checkout &lt;a href="https://link.dendron.so/github" rel="noopener noreferrer"&gt;Dendron on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;&lt;a href="https://www.intelligentchange.com/pages/customers#journal" rel="noopener noreferrer"&gt;&lt;em&gt;The Five Minute Journal&lt;/em&gt;&lt;/a&gt;, by &lt;a href="https://www.intelligentchange.com/pages/our-story" rel="noopener noreferrer"&gt;Intelligent Change&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;It's hard to use one sentence to describe all the things Tim Ferris does. He has one of the most popular podcasts in the world, and has authored several books from all of his notes and interview content. He seems shorter in person. Anyway, learn more &lt;a href="https://tim.blog/" rel="noopener noreferrer"&gt;at his website&lt;/a&gt;! ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;For a list of books, see &lt;a href="https://tim.blog/tim-ferriss-books" rel="noopener noreferrer"&gt;Books by Tim Ferriss&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn4"&gt;
&lt;p&gt;The video: &lt;a href="https://youtu.be/UFdR8w_R1HA" rel="noopener noreferrer"&gt;How I Journal and Take Notes: Brainstorming + Focusing + Reducing Anxiety&lt;/a&gt;. For a companion guide to the video, take a look at &lt;em&gt;&lt;a href="https://www.intelligentchange.com/blogs/read/how-tim-ferriss-uses-the-five-minute-journal-6-tips-for-new-journalers" rel="noopener noreferrer"&gt;How Tim Ferriss Uses The Five Minute Journal: 6 Tips For New Journalers&lt;/a&gt;.&lt;/em&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>vscode</category>
      <category>gratitude</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Share Your Notes Online: Publish Dendron with Netlify and GitHub</title>
      <dc:creator>Derek Ardolf</dc:creator>
      <pubDate>Fri, 10 Dec 2021 19:29:06 +0000</pubDate>
      <link>https://dev.to/dendron/share-your-notes-online-publish-dendron-with-netlify-and-github-mkc</link>
      <guid>https://dev.to/dendron/share-your-notes-online-publish-dendron-with-netlify-and-github-mkc</guid>
      <description>&lt;p&gt;&lt;a href="https://dendron.so" rel="noopener noreferrer"&gt;Dendron&lt;/a&gt; helps people and products organize with notes, docs, and knowledge of all the things. Let's see how easy it is to publish and have a static site hosted on &lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;You'll learn how to publish your Dendron notes using Netlify and GitHub, which looks like &lt;a href="https://link.dendron.so/netlify-demo" rel="noopener noreferrer"&gt;this demo website&lt;/a&gt;. This tutorial assumes that you have basic knowledge of GitHub and Visual Studio Code (VSCode).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/join" rel="noopener noreferrer"&gt;Join GitHub&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/GitHub" rel="noopener noreferrer"&gt;Learn: Git and GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;a href="https://app.netlify.com/signup" rel="noopener noreferrer"&gt;Join Netlify&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Download Visual Studio Code&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;This uses a brand new Dendron Workspace you can later configure to work with your own vaults. Do you already have a workspace you'd prefer using? Reference the Dendron docs for in-depth details on how the template, and other workspaces, can publish to Netlify: &lt;a href="https://wiki.dendron.so/notes/yetuum6o9wZi6eVJQBbQb/" rel="noopener noreferrer"&gt;Publishing with Netlify&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Part 1: GitHub
&lt;/h2&gt;

&lt;p&gt;When logged into GitHub, &lt;a href="https://link.dendron.so/6WuJ" rel="noopener noreferrer"&gt;click here&lt;/a&gt; to generate a new Dendron Workspace pre-configured for Netlify publishing. If you're wondering, we're using &lt;a href="https://link.dendron.so/6WuI" rel="noopener noreferrer"&gt;this template&lt;/a&gt; on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fgithub-create-workspace-netlify.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fgithub-create-workspace-netlify.gif" alt="Generating a new GitHub repo from the Dendron Netlify template" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nice! That's all we need to do for this minimal Dendron setup. To understand what is going on behind the scenes, you can read the &lt;a href="https://link.dendron.so/6WuI" rel="noopener noreferrer"&gt;template README&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note that this tutorial will work with both private and public repositories.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Part 2: Netlify
&lt;/h2&gt;

&lt;p&gt;The rest of the steps are done in the Netlify portal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Import your repository
&lt;/h3&gt;

&lt;p&gt;When logged into Netlify, you start on your &lt;code&gt;Team Overview&lt;/code&gt; page.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;code&gt;New site from Git&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Under &lt;code&gt;Connect to Git provider&lt;/code&gt;, select &lt;code&gt;GitHub&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;You'll be asked configure Dendron for permissions. It's best practice to go with &lt;code&gt;Only select repositories&lt;/code&gt;, and selecting the repository you made from the template&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Once permissions are configured, select the repository in Netlify. There is no need to change any of default values, since the GitHub template is providing them from &lt;a href="https://link.dendron.so/6WuS" rel="noopener noreferrer"&gt;&lt;code&gt;netlify.toml&lt;/code&gt;&lt;/a&gt;. Scroll to the bottom, and click &lt;code&gt;Deploy site&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fnetlify-import-git-repo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fnetlify-import-git-repo.gif" alt="Selecting the GitHub repository in the Netlify import wizard" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your website should now be building!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For more information on Netlify app permissions, to GitHub, refer to &lt;a href="https://docs.netlify.com/configure-builds/repo-permissions-linking/#authentication-with-the-netlify-github-app" rel="noopener noreferrer"&gt;Netlify Docs: Authentication with the Netlify GitHub App&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Step 2: Configure your website name
&lt;/h3&gt;

&lt;p&gt;By default, Netlify generates a random combination of strings. In the example so far, the website is named &lt;code&gt;elastic-hugle-37bfd5.netlify.app&lt;/code&gt;. If you don't want to own your own domain name, you can at least change the &lt;code&gt;elastic-hugle-37bfd5&lt;/code&gt; section.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Site settings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Under &lt;code&gt;Site information&lt;/code&gt;, click &lt;code&gt;Change site name&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Enter new name, and if it is available, click &lt;code&gt;Save&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fnetlify-change-site-name.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fnetlify-change-site-name.gif" alt="Changing the Netlify App subdomain name" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For more information on custom domains, beyond the above, refer to &lt;a href="https://docs.netlify.com/domains-https/custom-domains/" rel="noopener noreferrer"&gt;Netlify Docs: Custom domains&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Step 3: View deploy status
&lt;/h3&gt;

&lt;p&gt;Under the &lt;code&gt;Deploys&lt;/code&gt; tab, in Netlify, you can view the status of your website. This is where build information will be posted whenever new commits are posted to the &lt;code&gt;main&lt;/code&gt; branch of your repository on GitHub.&lt;/p&gt;

&lt;p&gt;This is a great way to check whether build have failed, or are still in progress. If you run into any errors, and aren't sure what to do next, jump into the &lt;a href="https://link.dendron.so/discord" rel="noopener noreferrer"&gt;Dendron Discord&lt;/a&gt; where we have a &lt;code&gt;#questions&lt;/code&gt; channel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;You're done! From now on, all new commits you make to your repository on GitHub will trigger a new publishing update to your website.&lt;/p&gt;

&lt;p&gt;In this tutorial, you learned how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a pre-configured, minimal Dendron Workspace from a template&lt;/li&gt;
&lt;li&gt;Import a repository into Netlify&lt;/li&gt;
&lt;li&gt;Create a custom name for your Netlify website&lt;/li&gt;
&lt;li&gt;View deploy status in Netlify&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;Now what? Publishing is set, but Dendron isn't just for what you want to share with the world. It's an open source, local-first knowledge management solution that scales as you do.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://wiki.dendron.so/notes/678c77d9-ef2c-4537-97b5-64556d6337f1/" rel="noopener noreferrer"&gt;Dendron Getting Started Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.dendron.so/notes/4ushYTDoX0TYQ1FDtGQSg/" rel="noopener noreferrer"&gt;Dendron Publishing Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.dendron.so/notes/683740e3-70ce-4a47-a1f4-1f140e80b558/" rel="noopener noreferrer"&gt;Dendron FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.dendron.so/notes/c6fd6bc4-7f75-4cbb-8f34-f7b99bfe2d50/" rel="noopener noreferrer"&gt;Dendron Concepts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.netlify.com/" rel="noopener noreferrer"&gt;Netlify Docs Home Page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Enjoy the blog? &lt;a href="https://buttondown.email/dendron" rel="noopener noreferrer"&gt;Subscribe to our newsletter!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Newsletters not your thing? You can also follow us elsewhere on the interwebs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Join &lt;a href="https://link.dendron.so/discord" rel="noopener noreferrer"&gt;Dendron on Discord&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Follow &lt;a href="https://link.dendron.so/twitter" rel="noopener noreferrer"&gt;Dendron on Twitter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Checkout &lt;a href="https://link.dendron.so/github" rel="noopener noreferrer"&gt;Dendron on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>netlify</category>
      <category>dendron</category>
      <category>opensource</category>
      <category>writing</category>
    </item>
    <item>
      <title>Highlights from VSCode 1.62</title>
      <dc:creator>Derek Ardolf</dc:creator>
      <pubDate>Tue, 23 Nov 2021 22:33:29 +0000</pubDate>
      <link>https://dev.to/dendron/highlights-from-vscode-162-12od</link>
      <guid>https://dev.to/dendron/highlights-from-vscode-162-12od</guid>
      <description>&lt;p&gt;The open source VSCode project, along with VSCodium&lt;sup id="fnref1"&gt;1&lt;/sup&gt;, completed their latest monthly release with v1.62&lt;sup id="fnref2"&gt;2&lt;/sup&gt;. For those of us that haven't been using the Insider's Build,&lt;sup id="fnref3"&gt;3&lt;/sup&gt; it's time to look at what's new.&lt;/p&gt;

&lt;p&gt;Make sure to checkout the &lt;a href="https://www.youtube.com/watch?v=IKvtYHfzE3g" rel="noopener noreferrer"&gt;VSCode 1.62 Release Party&lt;/a&gt; on YouTube!&lt;/p&gt;

&lt;h2&gt;
  
  
  Live Share session sharing in Virtual Workspaces
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-vscode-liveshare.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-vscode-liveshare.gif" alt="Live Share in Visual Studio Code" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Virtual Workspaces&lt;/em&gt;&lt;sup id="fnref4"&gt;4&lt;/sup&gt;, such as &lt;a href="https://vscode.dev/" rel="noopener noreferrer"&gt;vscode.dev&lt;/a&gt; and &lt;a href="https://github.dev/" rel="noopener noreferrer"&gt;github.dev&lt;/a&gt;, now support this superpower: sharing a session directly from the browser.&lt;/p&gt;

&lt;p&gt;Haven't used Live Share before? Many people are attracted to Google Docs due to how easy it is to collaborate, comment, and highlight sections in order to give each other scathing reviews. Introducing &lt;a href="https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare-pack" rel="noopener noreferrer"&gt;Live Share&lt;/a&gt;: instead of waiting for the PR review, you can provide non-constructive feedback to your peers!&lt;/p&gt;

&lt;p&gt;Take note: if you are a VSCodium user, sharing/joining sessions won't work. I learned this after spending too much time confused. Be aware of the &lt;a href="https://marketplace.visualstudio.com/items/MS-vsliveshare.vsliveshare/license" rel="noopener noreferrer"&gt;live-share license agreement&lt;/a&gt;, including the information about data collection, which may be part of the incompatibility with VSCodium. There are alternatives, though, such as &lt;a href="https://www.codetogether.com/" rel="noopener noreferrer"&gt;CodeTogether&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Release Party: &lt;a href="https://youtu.be/IKvtYHfzE3g?t=170" rel="noopener noreferrer"&gt;Live Share (in vscode.dev)&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Bracket pairs
&lt;/h2&gt;

&lt;p&gt;I enjoy whenever features lessen confusion for my eyeballs. I never bought a pair of Google Glass, even as men everywhere were accidentally taking photos while using urinals in pubic restrooms. &lt;a href="https://code.visualstudio.com/updates/v1_62#_improved-bracket-pair-guides" rel="noopener noreferrer"&gt;Bracket pair highlighting&lt;/a&gt;, though, to show where I am in the russian dolls of nested loops? Yes, please.&lt;/p&gt;

&lt;p&gt;Settings of interest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;"editor.guides.bracketPairs": "active"&lt;/code&gt;: Only show guides for &lt;strong&gt;only the active&lt;/strong&gt; bracket pair.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-vscode-active-bracketpairs.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-vscode-active-bracketpairs.gif" alt="Active bracket pairs in Visual Studio Code" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;"editor.guides.bracketPairs": "true"&lt;/code&gt;: Show guides for &lt;strong&gt;all&lt;/strong&gt; bracket pairs, with different colors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-vscode-always-bracketpairs.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-vscode-always-bracketpairs.gif" alt="All bracket pairs in Visual Studio Code" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Release Party: &lt;a href="https://youtu.be/IKvtYHfzE3g?t=857" rel="noopener noreferrer"&gt;Bracket pair colorization&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Verified publishers
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-vscode-verified-publishers.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-vscode-verified-publishers.gif" alt="Verified publishers of extensions in the Marketplace" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When installing extensions, it's nice knowing you're installing the real deal. Microsoft could have gone the whimsically difficult route that Twitter has taken with their blue checkmarks, but instead they have made it an easy process. This was how I learned GitLens was acquired by GitKraken: &lt;a href="https://www.gitkraken.com/blog/gitkraken-acquires-gitlens-for-visual-studio-code" rel="noopener noreferrer"&gt;the truth is out there&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Found a duplicate extension? Check whether one is from a verified publisher by jumping into the Marketplace.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Release Party: &lt;a href="https://youtu.be/IKvtYHfzE3g?t=1384" rel="noopener noreferrer"&gt;Verification for extensions publishers&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Other notables
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;General tip: Wondering what shortcuts are configured in VSCode? One shortcut to rule them all: &lt;code&gt;Ctrl+K Ctrl+S&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Or &lt;code&gt;Ctrl+Shift+P&lt;/code&gt; -&amp;gt; &lt;strong&gt;Preferences: Open Keyboard Shortcuts&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://code.visualstudio.com/updates/v1_62#_unicode-directional-formatting-characters" rel="noopener noreferrer"&gt;CVE was addressed&lt;/a&gt; involving characters that became invisible, leading to code that could compile differently than visually expected.&lt;/li&gt;
&lt;li&gt;Extension note: &lt;a href="https://code.visualstudio.com/updates/v1_62#_github-pull-requests-and-issues" rel="noopener noreferrer"&gt;GitHub PRs and Issues&lt;/a&gt; brings issue and PR interaction directly into VSCode. Have you taken a look yet?

&lt;ul&gt;
&lt;li&gt;Latest updates can be seen in the &lt;a href="https://github.com/microsoft/vscode-pull-request-github/blob/main/CHANGELOG.md#0320" rel="noopener noreferrer"&gt;extension changelog&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Issues resolved in point releases, referred to as "Recovery" releases, can be found on GitHub: &lt;a href="https://github.com/microsoft/vscode/issues?q=is%3Aissue+milestone%3A%22October+2021+Recovery%22+is%3Aclosed" rel="noopener noreferrer"&gt;&lt;code&gt;1.62.1&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://github.com/microsoft/vscode/issues?q=is%3Aissue+milestone%3A%22October+2021+Recovery+2%22+is%3Aclosed" rel="noopener noreferrer"&gt;&lt;code&gt;1.62.2&lt;/code&gt;&lt;/a&gt;, and &lt;a href="https://github.com/microsoft/vscode/issues?q=is%3Aissue+milestone%3A%22October+2021+Recovery+3%22+is%3Aclosed" rel="noopener noreferrer"&gt;&lt;code&gt;1.62.3&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;

&lt;/ul&gt;




&lt;p&gt;Enjoy the blog? &lt;a href="https://buttondown.email/dendron" rel="noopener noreferrer"&gt;Subscribe to our newsletter!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Newsletters not your thing? You can also follow us elsewhere on the interwebs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Join &lt;a href="https://discord.com/invite/xrKTUStHNZ" rel="noopener noreferrer"&gt;Dendron on Discord&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Follow &lt;a href="https://twitter.com/dendronhq" rel="noopener noreferrer"&gt;Dendron on Twitter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Checkout &lt;a href="https://github.com/dendronhq" rel="noopener noreferrer"&gt;Dendron on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Interested in creating your own knowledge base using markdown, git, and VSCode? Get started with &lt;a href="https://wiki.dendron.so/notes/678c77d9-ef2c-4537-97b5-64556d6337f1/" rel="noopener noreferrer"&gt;Dendron&lt;/a&gt; today.&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;&lt;a href="https://vscodium.com/" rel="noopener noreferrer"&gt;Checkout VSCodium&lt;/a&gt;, for the truly MIT-licensed version of the VSCode IDE (with telemetry/tracking disabled). ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;&lt;a href="https://code.visualstudio.com/updates/v1_62" rel="noopener noreferrer"&gt;VSCode release notes for 1.62&lt;/a&gt;, along with release notes for previous monthly releases. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;The &lt;a href="https://code.visualstudio.com/insiders" rel="noopener noreferrer"&gt;VSCode Insiders Build&lt;/a&gt; allows users to get VSCode with new features as soon as they are available, rather than at the monthly cadence. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn4"&gt;
&lt;p&gt;Reference the &lt;a href="https://code.visualstudio.com/blogs/2021/10/20/vscode-dev" rel="noopener noreferrer"&gt;VSCode Blog Post on vscode.dev&lt;/a&gt; for a full rundown on Virtual Workspaces and bringing VSCode to the browser. Last month, there was a livestream all about it! Watch &lt;a href="https://www.youtube.com/watch?v=sy3TUb_iVJM" rel="noopener noreferrer"&gt;VS Code for the Web: vscode.dev on YouTube&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>vscode</category>
      <category>codenewbie</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Highlights from VSCode 1.61</title>
      <dc:creator>Derek Ardolf</dc:creator>
      <pubDate>Fri, 29 Oct 2021 14:45:36 +0000</pubDate>
      <link>https://dev.to/dendron/highlights-from-vscode-161-25ij</link>
      <guid>https://dev.to/dendron/highlights-from-vscode-161-25ij</guid>
      <description>&lt;p&gt;The open source VSCode project, along with VSCodium&lt;sup id="fnref1"&gt;1&lt;/sup&gt;, completed their latest monthly release with v1.61&lt;sup id="fnref2"&gt;2&lt;/sup&gt;. For those of us that haven't been using the Insider's Build,&lt;sup id="fnref3"&gt;3&lt;/sup&gt; it's time to look at what's new.&lt;/p&gt;

&lt;p&gt;As a bonus for this release, Microsoft held a little &lt;a href="https://www.youtube.com/watch?v=G4jjCN8uQAg" rel="noopener noreferrer"&gt;VSCode 1.61 Release Party&lt;/a&gt; on YouTube. Watch the recording, see the devs show off features, and feel like you were actually invited to a party!&lt;/p&gt;

&lt;h2&gt;
  
  
  Locked editor groups
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fvscode-lock-groups.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fvscode-lock-groups.gif" alt="Locked editor groups in Visual Studio Code" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: this is an &lt;strong&gt;experimental feature&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Don't lose track of a file or terminal you are bouncing back-and-forth between in your gigantic list of editor tabs: use &lt;a href="https://code.visualstudio.com/updates/v1_61#_locked-editor-groups" rel="noopener noreferrer"&gt;locked editor groups&lt;/a&gt;. These prevent VSCode from opening more editor tabs in a group (a collection of tabs).&lt;/p&gt;

&lt;p&gt;I like this feature, as I'm often opening new files in the wrong area of the screen. I want those side-by-side, computer!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Release Party: &lt;a href="https://www.youtube.com/watch?v=G4jjCN8uQAg&amp;amp;t=1985s" rel="noopener noreferrer"&gt;Editor and workspace improvements demo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Split an editor without creating a new group
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fvscode-split-in-group.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fvscode-split-in-group.gif" alt="Split editors in groups in Visual Studio Code" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do you find yourself looking at large files, and wish you could scroll down while staying in place elsewhere? Now you can, by doing the splits &lt;a href="https://code.visualstudio.com/updates/v1_61#_split-an-editor-without-creating-a-new-group" rel="noopener noreferrer"&gt;without creating a new group&lt;/a&gt;. Test it out with &lt;code&gt;View: Split Editor in Group&lt;/code&gt; in the command palette (&lt;code&gt;Ctrl+Shift+P&lt;/code&gt;) or with the keybinding shortcut: &lt;code&gt;Ctrl+K Ctrl+Shift+\&lt;/code&gt;. This is useful when converting pieces of code into functions, trimming fat, copy/pasting comment blocks, and whatever else your heart desires.&lt;/p&gt;

&lt;p&gt;No new group means not having yet another tab open in your editor!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Release Party: &lt;a href="https://www.youtube.com/watch?v=G4jjCN8uQAg&amp;amp;t=1985s" rel="noopener noreferrer"&gt;Editor and workspace improvements demo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Webview UI Toolkit for Visual Studio Code
&lt;/h2&gt;

&lt;p&gt;For extension authors making use of the &lt;a href="https://code.visualstudio.com/api/extension-guides/webview" rel="noopener noreferrer"&gt;webview API&lt;/a&gt; for customizable views in the editor, life is about to become easier: say hello to the &lt;a href="https://code.visualstudio.com/updates/v1_61#_webview-ui-toolkit-for-visual-studio-code" rel="noopener noreferrer"&gt;Webview UI Toolkit&lt;/a&gt;. This is an open-source component library, providing Visual Studio Code design language, which matches the look and feel of VSCode/VSCodium. This is compatible with your tech stack of choice, bet it React, Vue, or OMGNewJSFramework!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/api/extension-guides/webview" rel="noopener noreferrer"&gt;Webview UI Toolkit Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/vscode-webview-ui-toolkit" rel="noopener noreferrer"&gt;Webview UI Toolkit repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Release Party: &lt;a href="https://www.youtube.com/watch?v=G4jjCN8uQAg&amp;amp;t=858s" rel="noopener noreferrer"&gt;Webview UI Toolkit Demo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Other notables
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;General tip: Wondering what shortcuts are configured in VSCode? One shortcut to rule them all: &lt;code&gt;Ctrl+K Ctrl+S&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Or &lt;code&gt;Ctrl+Shift+P&lt;/code&gt; -&amp;gt; &lt;strong&gt;Preferences: Open Keyboard Shortcuts&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Confusion was caused by a new telemetry config option, &lt;code&gt;telemetry.telemetryLevel&lt;/code&gt;, which would display that telemetry was enabled (even if it was previously disabled). The &lt;a href="https://github.com/microsoft/vscode/issues/134660" rel="noopener noreferrer"&gt;full discussion can be found on GitHub&lt;/a&gt;, which led to improvements being implemented in the &lt;code&gt;1.61.1&lt;/code&gt; update.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=G4jjCN8uQAg&amp;amp;t=170s" rel="noopener noreferrer"&gt;Platform-specific extensions&lt;/a&gt;: no longer try installing a MacOS-only extension on your Windows system, or vice-versa. That is, if the extension developer specifies the supported OS targets. This was previewed at the release party.&lt;/li&gt;
&lt;li&gt;I often came back to my laptop to find that &lt;a href="https://github.com/microsoft/vscode/issues/69665" rel="noopener noreferrer"&gt;my terminal was having a stroke in the VSCode editor&lt;/a&gt;. This seems to be resolved!&lt;/li&gt;
&lt;li&gt;The latest point releases&lt;sup id="fnref4"&gt;4&lt;/sup&gt; include fixes for other problems, such as &lt;a href="https://github.com/microsoft/vscode/issues/134757" rel="noopener noreferrer"&gt;high CPU consumption&lt;/a&gt;. Make sure to keep up-to-date!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I can't forget: want to take a look at VSCode in your web browser, without installing a thing? These are called &lt;em&gt;Virtual Workspaces&lt;/em&gt;, such as &lt;a href="https://vscode.dev/" rel="noopener noreferrer"&gt;vscode.dev&lt;/a&gt; and &lt;a href="https://github.dev/" rel="noopener noreferrer"&gt;github.dev&lt;/a&gt;. Reference the &lt;a href="https://code.visualstudio.com/blogs/2021/10/20/vscode-dev" rel="noopener noreferrer"&gt;VSCode Blog Post on vscode.dev&lt;/a&gt; for a full rundown on bringing VSCode to the browser.&lt;/p&gt;




&lt;p&gt;Enjoy the blog? &lt;a href="https://buttondown.email/dendron" rel="noopener noreferrer"&gt;Subscribe to our newsletter!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Newsletters not your thing? You can also follow us elsewhere on the interwebs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Join &lt;a href="https://discord.com/invite/xrKTUStHNZ" rel="noopener noreferrer"&gt;Dendron on Discord&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Follow &lt;a href="https://twitter.com/dendronhq" rel="noopener noreferrer"&gt;Dendron on Twitter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Checkout &lt;a href="https://github.com/dendronhq" rel="noopener noreferrer"&gt;Dendron on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Interested in creating your own knowledge base using markdown, git, and VSCode? Get started with &lt;a href="https://wiki.dendron.so/notes/678c77d9-ef2c-4537-97b5-64556d6337f1/" rel="noopener noreferrer"&gt;Dendron&lt;/a&gt; today.&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;&lt;a href="https://vscodium.com/" rel="noopener noreferrer"&gt;Checkout VSCodium&lt;/a&gt;, for the truly MIT-licensed version of the VSCode IDE (with telemetry/tracking disabled). ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;&lt;a href="https://code.visualstudio.com/updates/v1_61" rel="noopener noreferrer"&gt;VSCode release notes for 1.61&lt;/a&gt;, along with release notes for previous monthly releases. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;The &lt;a href="https://code.visualstudio.com/insiders" rel="noopener noreferrer"&gt;VSCode Insiders Build&lt;/a&gt; allows users to get VSCode with new features as soon as they are available, rather than at the monthly cadence. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn4"&gt;
&lt;p&gt;Issues resolved in point releases, referred to as "Recovery" releases, can be found on GitHub: &lt;a href="https://github.com/microsoft/vscode/issues?q=is%3Aissue+milestone%3A%22September+2021+Recovery%22+is%3Aclosed" rel="noopener noreferrer"&gt;&lt;code&gt;1.61.1&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://github.com/microsoft/vscode/issues?q=is%3Aissue+milestone%3A%22September+2021+Recovery+2%22+is%3Aclosed" rel="noopener noreferrer"&gt;&lt;code&gt;1.61.2&lt;/code&gt;&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>vscode</category>
      <category>tooling</category>
      <category>codenewbie</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Best Mobile Note-Taking Apps for Markdown</title>
      <dc:creator>Derek Ardolf</dc:creator>
      <pubDate>Mon, 25 Oct 2021 19:25:00 +0000</pubDate>
      <link>https://dev.to/dendron/best-mobile-note-taking-apps-for-markdown-21ln</link>
      <guid>https://dev.to/dendron/best-mobile-note-taking-apps-for-markdown-21ln</guid>
      <description>&lt;p&gt;On the desktop, markdown-based notes can be taken in any plain-text editor of choice. If you're using &lt;a href="https://www.dendron.so/" rel="noopener noreferrer"&gt;Dendron&lt;/a&gt;, you can use VSCode/VSCodium as well as a suite of &lt;a href="https://wiki.dendron.so/notes/eea2b078-1acc-4071-a14e-18299fc28f47.html" rel="noopener noreferrer"&gt;powerful commands&lt;/a&gt; to manage your notes. Though, what happens when you walk out the door? It turns out that your phone can work with markdown, too!&lt;/p&gt;

&lt;p&gt;What we're looking at today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Obsidian&lt;/li&gt;
&lt;li&gt;GitJournal&lt;/li&gt;
&lt;li&gt;Markor&lt;/li&gt;
&lt;li&gt;iA Writer&lt;/li&gt;
&lt;li&gt;
Other apps of interest

&lt;ul&gt;
&lt;li&gt;Markdown notes&lt;/li&gt;
&lt;li&gt;Git clients&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Last thoughts&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Obsidian
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-obsidian-screenshots.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-obsidian-screenshots.png" alt="Editor and markdown-preview screenshots, on Android, for Obsidian" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Obsidian is a powerful knowledge base on top of a local folder of plain text Markdown files."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; Free for personal use (or &lt;a href="https://obsidian.md/pricing" rel="noopener noreferrer"&gt;paid options&lt;/a&gt; for business use and other features)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OS:&lt;/strong&gt; Android, iOS / iPad / Mac, Windows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Source:&lt;/strong&gt; No&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in git integration:&lt;/strong&gt; No&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://obsidian.md/mobile" rel="noopener noreferrer"&gt;Obsidian&lt;/a&gt;&lt;/em&gt; is a PKM (Personal Knowledge Management) tool that provides a sleek UI to Markdown files. It had the best mobile experience, for me, out of the apps I tested. Though it doesn't have git support built-in, other mobile apps can assist in providing that backend. I recommend &lt;a href="https://manichord.com/projects/mgit.html" rel="noopener noreferrer"&gt;MGit (Android)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Obsidian uses &lt;a href="https://wiki.dendron.so/notes/9MZBqhrijEM4QpZRa5t08/" rel="noopener noreferrer"&gt;wikilink style links&lt;/a&gt; (ex. &lt;code&gt;[[my.other.note]]&lt;/code&gt;), like Dendron, which is a nice plus.&lt;/p&gt;

&lt;p&gt;Paid options can assist note-takers with automatic syncing, publishing of notes, and other perks. Note that obsidian is free for personal use but requires at least a &lt;a href="https://help.obsidian.md/Licenses+%26+add-on+services/Commercial+license" rel="noopener noreferrer"&gt;paid commercial license for business use&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitJournal
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-gitjournal-screenshots.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-gitjournal-screenshots.png" alt="Editor and markdown-preview screenshots, on Android, for GitJournal" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Mobile first Markdown Notes integrated with Git."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; Free (or a &lt;a href="https://gitjournal.io/pricing/" rel="noopener noreferrer"&gt;paid Pro option&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OS:&lt;/strong&gt; Android, iOS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Source:&lt;/strong&gt; Yes (&lt;a href="https://github.com/GitJournal/GitJournal/blob/master/LICENSE" rel="noopener noreferrer"&gt;AGPL-3.0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in git integration:&lt;/strong&gt; Yes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://gitjournal.io/" rel="noopener noreferrer"&gt;GitJournal&lt;/a&gt;&lt;/em&gt; has gained quite a bit of interest: it works on your mobile device of choice, free to jump into, open to contributions, and can sync notes to a repo (or multiple repos with the Pro version). The project is built with &lt;a href="https://flutter.dev/" rel="noopener noreferrer"&gt;Flutter&lt;/a&gt;, making life easier when it comes to multiple-platforms as target exports.&lt;/p&gt;

&lt;p&gt;GitJournal also supports wikilinks and can therefore be used with Dendron and Obsidian.&lt;/p&gt;

&lt;p&gt;I'm really interested in seeing where GitJournal goes. I couldn't find other mobile apps that covered both notes in Markdown and git-integration, without needing to juggle multiple apps. With my &lt;a href="https://wiki.dendron.so/notes/6682fca0-65ed-402c-8634-94cd51463cc4.html" rel="noopener noreferrer"&gt;Dendron vaults&lt;/a&gt;, I mostly take &lt;a href="https://wiki.dendron.so/notes/5c213aa6-e4ba-49e8-85c5-1bdcb33ce202.html#scratch-note" rel="noopener noreferrer"&gt;scratch notes&lt;/a&gt; or edit already-existing notes when using my phone. For more extensive usage, I hop on the laptop.&lt;/p&gt;

&lt;p&gt;I will say, though, that I ran into so many problems in trying to get my first demo repository setup that I stopped using GitJournal. Other users are running into issues at the moment having to do with syncing and setup, some of which might be tied to &lt;a href="https://github.com/GitJournal/GitJournal/issues/546" rel="noopener noreferrer"&gt;a hardcoded expectation of branch names&lt;/a&gt; (such as &lt;code&gt;master&lt;/code&gt;). I now use &lt;code&gt;mgit&lt;/code&gt; for managing my repos, and Obsidian for managing notes.&lt;/p&gt;

&lt;h2&gt;
  
  
  iA Writer
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-iawriter-screenshots.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-iawriter-screenshots.png" alt="Editor and markdown-preview screenshots, on Android, for iA Writer" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"iA Writer offers a unique writing experience that lets you concentrate and clarify your message. Used by half a million people worldwide, its powerful interface is crafted to cut out noise, let you focus on what you want to say, and help you structure and trim your text."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; &lt;a href="https://ia.net/downloads#apps" rel="noopener noreferrer"&gt;$29.99&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OS:&lt;/strong&gt; Android, iOS / iPad / Mac, Windows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Source:&lt;/strong&gt; No&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in git integration:&lt;/strong&gt; No&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://ia.net/writer" rel="noopener noreferrer"&gt;iA Writer&lt;/a&gt;&lt;/em&gt; was initially released 10 years ago, and has since evolved to work on multiple platforms. Though it doesn't have git integration, other apps like &lt;strong&gt;GitJournal&lt;/strong&gt; or &lt;strong&gt;MGit (Android)&lt;/strong&gt; can be used for that.&lt;/p&gt;

&lt;p&gt;Want to feel like a designer, in a sleek interface with minimalist and Apple-like branding? This is made for you. The editor can work across all devices: phones, tablets, and desktops.&lt;/p&gt;

&lt;p&gt;Being a feature-full piece of software, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Style-checking to help improve note quality&lt;/li&gt;
&lt;li&gt;Can export to Word&lt;/li&gt;
&lt;li&gt;A larger list of all-the-things can be found on their &lt;a href="https://ia.net/writer" rel="noopener noreferrer"&gt;main landing page&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Markor
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-markor-screenshots.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fblog-markor-screenshots.png" alt="Editor and markdown-preview screenshots, on Android, for Markor" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Markor is a TextEditor for Android. This project aims to make an editor that is versatile, flexible, and lightweight. Markor utilizes simple markup formats like Markdown and todo.txt for note-taking and list management."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; Free&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OS:&lt;/strong&gt; Android&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Source:&lt;/strong&gt; Yes (&lt;a href="https://github.com/gsantner/markor/blob/master/LICENSE.txt" rel="noopener noreferrer"&gt;Apache 2.0, w/ special note on commercial license&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in git integration:&lt;/strong&gt; No&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://gsantner.net/project/markor.html" rel="noopener noreferrer"&gt;Markor&lt;/a&gt; is without git integration, but can be combined with an app like &lt;strong&gt;GitJournal&lt;/strong&gt; or &lt;a href="https://manichord.com/projects/mgit.html" rel="noopener noreferrer"&gt;MGit (Android)&lt;/a&gt; for syncing to a source repo.&lt;/p&gt;

&lt;p&gt;I liked both the &lt;em&gt;editor&lt;/em&gt; and &lt;em&gt;preview&lt;/em&gt; rendering in Markor more than the other apps I tried. Syntax highlighting is a nice touch while editing, and the previews look cleaner than both iA Writer and GitJournal.&lt;/p&gt;

&lt;p&gt;Though, the cons here are that Markor only works on Android and needs another app to handle git integration. Outside of that, I can quickly see why thousands of ratings have led to nearly a 5/5 on the Google Play.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other apps of interest
&lt;/h2&gt;

&lt;p&gt;There are many mobile note-taking solutions that work with Markdown. Below are some additional tools that &lt;a href="https://wiki.dendron.so/notes/7c00d606-7b75-4d28-b563-d75f33f8e0d7.html#dendrologist" rel="noopener noreferrer"&gt;Dendrologists&lt;/a&gt; have used for markdown on the go.&lt;/p&gt;

&lt;h3&gt;
  
  
  Markdown notes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://workingcopyapp.com/" rel="noopener noreferrer"&gt;Working Copy (iOS)&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Git client, paid (free version can't push commits). This app comes up quite a bit for iOS users and within the &lt;a href="https://discord.com/invite/xrKTUStHNZ" rel="noopener noreferrer"&gt;Dendron Discord&lt;/a&gt; in our &lt;code&gt;#mobile&lt;/code&gt; channel, so I'm listing it at the top.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/redsolver/noteless" rel="noopener noreferrer"&gt;Noteless (Android)&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Open source, free, includes AsciiMath, KaTeX, mermaidjs&lt;/li&gt;
&lt;li&gt;An experimental feature option supports Dendron formatted wiki links&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://appml.github.io/nano/" rel="noopener noreferrer"&gt;Neutrinote (Android)&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Open source, free, includes LaTeX / math rendering support&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://omz-software.com/editorial/" rel="noopener noreferrer"&gt;Editorial (iOS)&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;iPad + iPhone, paid, integrated Python bonus&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://taio.app/" rel="noopener noreferrer"&gt;Taio (iOS)&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;iPad + iPhone + Mac, free (or paid option has perks, such as Javascript-supported actions)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://www.textasticapp.com/" rel="noopener noreferrer"&gt;Textastic (iOS)&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;iPad + iPhone + Mac, paid, code-highlighting, ssh/FTP/SFTP/Dropbox/Google Drive support&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Git clients
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://manichord.com/projects/mgit.html" rel="noopener noreferrer"&gt;MGit (Android)&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Git client, open source, free. There is a reason I repeatedly mention it in this article, when it comes to Android users, because it handles git repos well.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://workingcopyapp.com/" rel="noopener noreferrer"&gt;Working Copy (iOS)&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Git client, paid (free version can't push commits)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Users may also be interested in future development around the &lt;a href="https://github.com/mobile/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; mobile client, which currently does &lt;em&gt;not&lt;/em&gt; support being able to edit or contribute new files. For now, people can use the app to post "LGTM" to PRs, add thumbs-down emojis to issues, and get notified when your PRs are rejected.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git&lt;/code&gt; is not the only way to sync/backup your notes, since tools like Dropbox, Google Drive, iCloud, and Keybase can also help provide that functionality. I, and other Dendrologists, have a bias toward git due to a variety of reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Following the &lt;a href="https://www.writethedocs.org/guide/docs-as-code/" rel="noopener noreferrer"&gt;Docs as Code&lt;/a&gt; approach&lt;/li&gt;
&lt;li&gt;Treating all documentation as part of a distributed wiki system that can import docs, from any source, into a single workspace&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;git&lt;/code&gt; versioning&lt;/li&gt;
&lt;li&gt;Anyone that has used GitHub, GitLab, or other git-hosting solutions will have &lt;code&gt;git&lt;/code&gt; installed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I had to choose what combinations to use, on Android, I'd recommend &lt;strong&gt;Obsidian&lt;/strong&gt; with &lt;strong&gt;MGit (Android)&lt;/strong&gt;. The two, together, have worked very well for me. I'm also a fan of setting up SSH keys to have project/repo-limited permissions as &lt;a href="https://docs.github.com/en/developers/overview/managing-deploy-keys#deploy-keys" rel="noopener noreferrer"&gt;Deploy Keys&lt;/a&gt; on GitHub (with &lt;code&gt;Allow write access&lt;/code&gt; enabled). This prevents users from setting up SSH keys with user-wide permissions across GitHub.&lt;/p&gt;




&lt;p&gt;Enjoy the blog? &lt;a href="https://buttondown.email/dendron" rel="noopener noreferrer"&gt;Subscribe to our newsletter!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Newsletters not your thing? You can also follow us elsewhere on the interwebs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Join &lt;a href="https://discord.com/invite/xrKTUStHNZ" rel="noopener noreferrer"&gt;Dendron on Discord&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Follow &lt;a href="https://twitter.com/dendronhq" rel="noopener noreferrer"&gt;Dendron on Twitter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Checkout &lt;a href="https://github.com/dendronhq" rel="noopener noreferrer"&gt;Dendron on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Interested in creating your own knowledge base using markdown, git, and VSCode? Get started with &lt;a href="https://wiki.dendron.so/notes/678c77d9-ef2c-4537-97b5-64556d6337f1/" rel="noopener noreferrer"&gt;Dendron&lt;/a&gt; today.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>markdown</category>
      <category>android</category>
      <category>ios</category>
    </item>
    <item>
      <title>Writing a Visual Studio Code Completion Provider</title>
      <dc:creator>Kevin Lin</dc:creator>
      <pubDate>Thu, 23 Sep 2021 16:43:43 +0000</pubDate>
      <link>https://dev.to/dendron/writing-a-visual-studio-code-completion-provider-198f</link>
      <guid>https://dev.to/dendron/writing-a-visual-studio-code-completion-provider-198f</guid>
      <description>&lt;p&gt;Visual Studio Code (VSCode) provides many powerful features for extension developers. Autocomplete, warnings, tasks, and many more features are included out-of-the-box and are available for extension developers to take advantage of. However, figuring out how you can take advantage of these features as an extension developer can require digging through API documentation to learn the exact behavior. Using the API incorrectly can lead to issues that are hard to debug, as I learned working on the block autocomplete feature for Dendron.&lt;/p&gt;

&lt;p&gt;This post is an overview of VSCode autocomplete —also called intellisense— feature from the viewpoint of an extension developer. I especially want to highlight a few pitfalls: VSCode provides defaults for many of the options around autocomplete, but the behavior of these defaults can be confusing if you don't know what they are.&lt;/p&gt;

&lt;h3&gt;
  
  
  Entry point
&lt;/h3&gt;

&lt;p&gt;Your entry point into adding an autocomplete feature is &lt;code&gt;languages.registerCompletionItemProvider&lt;/code&gt;. This allows you to attach a function that will generate the options when requested.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;languages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;registerCompletionItemProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;markdown&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;provideCompletionItems&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;provideBlockCompletionItems&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;^&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Above is how Dendron attaches the completion provider for blocks. This part is straightforward, although note the symbols at the end. These are the symbols that when written will trigger your completion provider automatically. While you can define multiple symbols, each symbol has to be a single character. If An overview &amp;amp; tutorial of writing VSCode completion providers (intellisense) as an extension developer&lt;/p&gt;

&lt;p&gt;Next, let's take a look at the completion function. Here is the function signature for Dendron:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;provideBlockCompletionItems&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TextDocument&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Position&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;CancellationToken&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;CompletionItem&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;document&lt;/code&gt; and &lt;code&gt;position&lt;/code&gt; are straightforward. &lt;code&gt;token&lt;/code&gt; is used to cancel completions, for example if the user hits cancel while waiting for the completions. Key thing about the token is to remember that javascript is single-threaded: the token won't suddenly get cancelled in the middle of your function. The only point where it can become cancelled is if you &lt;code&gt;await&lt;/code&gt; for something and yield the execution. This means you don't have to check if the token is cancelled everywhere in your code, just check after any &lt;code&gt;await&lt;/code&gt;ed operation that might take a significant amount of time. Checking the token is easy, &lt;code&gt;if (token?.isCancellationRequested) return;&lt;/code&gt; is enough.&lt;/p&gt;

&lt;p&gt;The more important thing here is how the function gets called. One way the function will get called is if the user types one of the trigger symbols you registered. Another way is if the user hits the key for "Trigger Suggest" (&lt;code&gt;Ctrl+Space&lt;/code&gt; by default), &lt;em&gt;all&lt;/em&gt; registered completion providers for this language will run. Crucially, this means your completion provider may be activated at any point in the document, with or without your trigger key.&lt;br&gt;
It's up to your implementation to check if the current &lt;code&gt;position&lt;/code&gt; is somewhere that this completion is appropriate for, and &lt;code&gt;return;&lt;/code&gt; if not. Let's look at a simplified version of how Dendron handles this for the autocomplete:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;found&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;RegExpMatchArray&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;line&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lineAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;line&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// There may be multiple links within this line&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;matches&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;matchAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;LINK_WITH_BLOCK_REGEX&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isUndefined&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;groups&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isUndefined&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;entireLink&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;groups&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// If the current position is within this link, then we are trying to complete it&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
      &lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;entireLink&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;found&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isUndefined&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;found&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The gist of it is that we get the text for the current line, and check if the current position is inside a link with a block that we can complete.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;CompletionItem&lt;/code&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;label&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;A key part of the completion item is the label. The label is not only displayed for the completion items, but it's also used as a default for many of the options in a &lt;code&gt;CompletionItem&lt;/code&gt;. The text that gets inserted when the user selects something, deciding the order in which these items are displayed, and how these options are narrowed when the user types are all based on the label by default.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FQu2LPJR.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FQu2LPJR.png" alt="A screen shot displaying several completion items. "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;range&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;The range is the most confusing part of the &lt;code&gt;CompletionItem&lt;/code&gt; in my opinion. The range determines 2 things: where the selected item will be inserted, and also what counts as "stuff that the user typed to narrow the items".&lt;/p&gt;

&lt;p&gt;For the first use of range, whatever range you provide will be replaced with the &lt;code&gt;insertText&lt;/code&gt; (or missing that, &lt;code&gt;label&lt;/code&gt;) of the completion item. If you have nothing to replace, the range can have &lt;code&gt;start === end&lt;/code&gt; in which case the text is just inserted at that point.&lt;/p&gt;

&lt;p&gt;The second use of range makes things a bit more tricky. Because the range determines what counts as "stuff the user typed", you have to be careful about what you include in the range. For example, Dendron's autocomplete allows users to type &lt;code&gt;[[^&lt;/code&gt; to get all blocks within a text as autocomplete options.&lt;/p&gt;

&lt;p&gt;The problem? The user needs to type &lt;code&gt;^&lt;/code&gt; to activate the completion, but &lt;code&gt;^&lt;/code&gt; is not part of any completion item, and also &lt;code&gt;^&lt;/code&gt; needs to be removed once an item is selected because the text is supposed to look like &lt;code&gt;[[#^something]]&lt;/code&gt; after the completion. &lt;/p&gt;

&lt;p&gt;While it would be convenient to just set the range to anything within the brackets, this will result in all completion items being narrowed out because &lt;code&gt;^&lt;/code&gt; will also count as "stuff the user typed to narrow the items".&lt;/p&gt;

&lt;p&gt;Something important to bring up here is the default for &lt;code&gt;range&lt;/code&gt;. If you look&lt;br&gt;
into the docs, you'll see that the default is the "range of the current word",&lt;br&gt;
effectively the output of &lt;code&gt;TextDocument.getWordRangeAtPosition&lt;/code&gt; function.&lt;br&gt;
&lt;code&gt;getWordRangeAtPosition&lt;/code&gt; allows you to set a custom regex to select what&lt;br&gt;
"current word" means, so this might sound like a good way to calculate the&lt;br&gt;
range. While this would work in some cases, I found that&lt;br&gt;
&lt;code&gt;getWordRangeAtPosition&lt;/code&gt; is extremely inefficient if your regex is more complex&lt;br&gt;
than &lt;code&gt;[...]+&lt;/code&gt;. Especially using lookaheads or lookbehinds causes VSCode to&lt;br&gt;
completely hang. I'd recommend avoiding this function unless the default mostly&lt;br&gt;
works for you.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;code&gt;sortText&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;This field is used to determine in what order the completion items are &lt;em&gt;initially&lt;/em&gt; ordered. Initially is important here, as VSCode may move the items around once the user starts typing if it decides some items match the text better.&lt;/p&gt;

&lt;p&gt;The annoying part about &lt;code&gt;sortText&lt;/code&gt;: it simply sorts the items using basic string sorting. Issue here being that if you have a loop to generate your completion items, you can't just use the index to sort the items.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;blocks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// These won't sort right, because "11" &amp;lt; "9" in string sort&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;sortText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The fix is to pad your &lt;code&gt;sortText&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;sortText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not a perfect fix of course, but it's unlikely that you'll have over 99999 completion items.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;insertText&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;This is the text to be inserted when the user selects a completion. By default&lt;br&gt;
it's set to the label, but you'll want to set this if you are using the label to&lt;br&gt;
display something more informative to the user. For example, when completing&lt;br&gt;
blocks, Dendron uses the label to display the actual line the user is selecting.&lt;br&gt;
But the text we need to insert into the wikilink is not the same as the line&lt;br&gt;
itself, so we set this to get it to link to the right place.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;insertText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`#&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;AnchorUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;anchor2string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;anchor&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;code&gt;additionalTextEdits&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;insertText&lt;/code&gt; replaces the part of the text that is selected by the &lt;code&gt;range&lt;/code&gt;. This&lt;br&gt;
is actually quite limiting: As I mentioned before, &lt;code&gt;range&lt;/code&gt; not only selects the&lt;br&gt;
what will be replaced but also what VSCode considers "typed by the user to&lt;br&gt;
narrow options". What if you want something to be replaced along with what the&lt;br&gt;
user typed, but you don't want it to be used in narrowing?&lt;/p&gt;

&lt;p&gt;For example, when autocompleting for blocks in Dendron the user might type&lt;br&gt;
&lt;code&gt;[[^some-header&lt;/code&gt;, but the resulting link will look like&lt;br&gt;
&lt;code&gt;[[#some-header-text-here]]&lt;/code&gt;. We need to remove &lt;code&gt;^&lt;/code&gt; along with whatever the user&lt;br&gt;
typed, but if we set the &lt;code&gt;range&lt;/code&gt; to include it then the narrowing would be&lt;br&gt;
thrown off because it would look for options where the label includes &lt;code&gt;^&lt;/code&gt;.&lt;br&gt;
To get around this, we use the &lt;code&gt;additionalTextEdits&lt;/code&gt; to automatically remove the&lt;br&gt;
&lt;code&gt;^&lt;/code&gt; part.&lt;/p&gt;

&lt;p&gt;Another use for &lt;code&gt;additionalTextEdits&lt;/code&gt; is to insert text somewhere completely&lt;br&gt;
different in the document. Think of auto-imports for some languages, where you&lt;br&gt;
type something and the language automatically adds &lt;code&gt;import ...&lt;/code&gt;. Or in Dendron,&lt;br&gt;
if the user selects a block that doesn't already have a block anchor when&lt;br&gt;
completing blocks, we need to insert a block anchor there. &lt;code&gt;additionalTextEdits&lt;/code&gt;&lt;br&gt;
have no limits to where they can put the text, as long as it's within the same&lt;br&gt;
document. In any case, let's see what this code looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;edits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TextEdit&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;found&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;groups&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;edits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TextEdit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;line&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;found&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;line&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;found&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;found&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;groups&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="dl"&gt;""&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isUndefined&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;anchor&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;anchor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;block&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;genUUIDInsecure&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blockPosition&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;VSCodeUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;point2VSCodePosition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;end&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;edits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TextEdit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;blockPosition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blockPosition&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="s2"&gt;` &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;AnchorUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;anchor2string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;anchor&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first part adds a text edit to remove the &lt;code&gt;^&lt;/code&gt; part the user typed by&lt;br&gt;
calculating the range from a regex match, then replacing it with &lt;code&gt;""&lt;/code&gt;. The&lt;br&gt;
second part adds the &lt;code&gt;^...&lt;/code&gt; part to a block by calculating the range from the&lt;br&gt;
parsed document.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Autocomplete is a ubiquitous feature in text editing today, both for writing&lt;br&gt;
natural languages and coding. It is an incredibly easy-to-use yet powerful&lt;br&gt;
feature for your users, and it enables unmatched user experiences when done&lt;br&gt;
right. But when done wrong, it can cause a disconnect and confusion around your&lt;br&gt;
product. At Dendron, we strive for the former and hope that the learnings from&lt;br&gt;
our experience will help you do the same.&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>typescript</category>
      <category>tooling</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Highlights from VSCode 1.59</title>
      <dc:creator>Derek Ardolf</dc:creator>
      <pubDate>Thu, 02 Sep 2021 18:25:57 +0000</pubDate>
      <link>https://dev.to/dendron/highlights-from-vscode-1-59-16mj</link>
      <guid>https://dev.to/dendron/highlights-from-vscode-1-59-16mj</guid>
      <description>&lt;p&gt;The open source VSCode project, along with VSCodium&lt;sup id="fnref1"&gt;1&lt;/sup&gt;, completed their latest monthly release with v1.59&lt;sup id="fnref2"&gt;2&lt;/sup&gt;. Let's take a look at some features that the insiders build&lt;sup id="fnref3"&gt;3&lt;/sup&gt; had their impatient, bleeding-edge hands on (before we all forget what 1.59 brought before the upcoming August 2021 release).&lt;/p&gt;

&lt;h2&gt;
  
  
  Share view state
&lt;/h2&gt;

&lt;p&gt;VSCode users are often bouncing around different files in their workspaces. By default, if you close out a file tab, VSCode doesn't track where you were in that file. This can be annoying if you didn't mean to close out the file, or because you were playing whack a mole with the new new workspace trust popups.&lt;/p&gt;

&lt;p&gt;Say hello to shared view states across editor groups&lt;sup id="fnref4"&gt;4&lt;/sup&gt;. Editor groups are the windows of tab collections within the VSCode editor&lt;sup id="fnref5"&gt;5&lt;/sup&gt; that grow whenever &lt;strong&gt;Split Editor/Open to the Side&lt;/strong&gt; commands are used. These groups can remember your past so that your rampant mind doesn't need to.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fvscode-share-view-state.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fvscode-share-view-state.gif" alt="GIF showing the share view state feature with The House on The Borderland, by William Hope Hodgson" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ah yes, that's right, I left off at the pig people.&lt;sup id="fnref6"&gt;6&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Terminal magic tricks
&lt;/h2&gt;

&lt;p&gt;By default, a new terminal can be created with &lt;code&gt;Ctrl+Tilde(~)&lt;/code&gt;, where it pops up in the bottom as an entryway into the powerful, dark underbelly of shells. VSCode 1.59 highlights some wizardry alternatives.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create terminals to the side
&lt;/h3&gt;

&lt;p&gt;Are you one of those people who spins a monitor into portrait mode, because of some insatiable love for 90&lt;sup&gt;o&lt;/sup&gt; angles? Maybe you simply prefer tall terminals? &lt;code&gt;Ctrl+Shift+P&lt;/code&gt; and &lt;code&gt;Terminal: Create Terminal in Editor Area to the Side&lt;/code&gt;&lt;sup id="fnref7"&gt;7&lt;/sup&gt;, will be exactly what you're looking for.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fvscode-side-terminals.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fvscode-side-terminals.gif" alt="GIF showing the creation of terminals to the side, instead of defaulting to the bottom" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Drag and drop terminals across windows
&lt;/h3&gt;

&lt;p&gt;How many VSCode windows are sitting open on your desktop? Are you taking notes in one workspace, while continuing your commands in a separate VSCode window? Make your life easier, retain all your in-shell variables, and drag the active terminal from one window to another.&lt;/p&gt;

&lt;p&gt;This can be helpful when improving the documentation in one window as active development is happening in another.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fvscode-drag-drop-terminals.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Forg-dendron-public-assets.s3.amazonaws.com%2Fimages%2Fvscode-drag-drop-terminals.gif" alt="GIF showing the drag-and-drop feature of terminals into different VSCode windows" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An excellent bonus: remember when typos were just typos? The worst thing that could happen was other people making fun of your lack of oxford comma's. Now, with terminal editors, your typo can shutdown your production database! Fun!&lt;/p&gt;

&lt;h2&gt;
  
  
  Live preview
&lt;/h2&gt;

&lt;p&gt;The &lt;em&gt;Live Preview&lt;/em&gt; extension&lt;sup id="fnref8"&gt;8&lt;/sup&gt;, originally released in June, has continued along. For users working in JavaScript land, &lt;strong&gt;Live Preview: Show Debug Preview&lt;/strong&gt; ensures a built-in JavaScript debugger&lt;sup id="fnref9"&gt;9&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Note that this extension has the warning:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;WARNING: this is extension is still under development!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For the brave javascripters among you all, who want the beautiful reflections of instant-progress within the editor, take it for a test drive. Report any issues to the &lt;a href="https://github.com/microsoft/vscode-livepreview" rel="noopener noreferrer"&gt;microsoft/vscode-livepreview&lt;/a&gt; repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other notables
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;General tip: Wondering what shortcuts are configured in VSCode? One shortcut to rule them all: &lt;code&gt;Ctrl+K Ctrl+S&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Or &lt;code&gt;Ctrl+Shift+P&lt;/code&gt; -&amp;gt; &lt;strong&gt;Preferences: Open Keyboard Shortcuts&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;If you're using an M1 Mac, you should get the latest VSCode 1.59.1&lt;sup id="fnref10"&gt;10&lt;/sup&gt; point release, as it addresses a bug where VSCode may crash.&lt;/li&gt;
&lt;li&gt;A &lt;em&gt;preview feature&lt;/em&gt;&lt;sup id="fnref11"&gt;11&lt;/sup&gt; has been added for automatic language detection in unsaved/untitled files. &lt;code&gt;experimentalLanguageDetection&lt;/code&gt;&lt;sup id="fnref12"&gt;12&lt;/sup&gt; (search against settings via &lt;code&gt;Ctrl+Comma&lt;/code&gt;) can be set to &lt;code&gt;true&lt;/code&gt;, which uses an ML model from &lt;code&gt;yoeo/Guesslang&lt;/code&gt;&lt;sup id="fnref13"&gt;13&lt;/sup&gt; with the open-source ML library &lt;code&gt;Tensorflow.js&lt;/code&gt;&lt;sup id="fnref14"&gt;14&lt;/sup&gt;. VSCode is planning for this feature to be &lt;code&gt;true&lt;/code&gt; by default in the future, so that code is recognized out-of-box, instead of always relying on the file extension or force &lt;strong&gt;Change Language Mode&lt;/strong&gt; (&lt;code&gt;Ctrl+K M&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Enjoy the blog? &lt;a href="https://buttondown.email/dendron" rel="noopener noreferrer"&gt;Subscribe to our newsletter!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Newsletters not your thing? You can also follow us elsewhere on the interwebs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Join &lt;a href="https://discord.com/invite/xrKTUStHNZ" rel="noopener noreferrer"&gt;Dendron on Discord&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Follow &lt;a href="https://twitter.com/dendronhq" rel="noopener noreferrer"&gt;Dendron on Twitter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Checkout &lt;a href="https://github.com/dendronhq" rel="noopener noreferrer"&gt;Dendron on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Interested in creating your own knowledge base using markdown, git, and VSCode? Get started with &lt;a href="https://wiki.dendron.so/notes/678c77d9-ef2c-4537-97b5-64556d6337f1/" rel="noopener noreferrer"&gt;Dendron&lt;/a&gt; today.&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;&lt;a href="https://vscodium.com/" rel="noopener noreferrer"&gt;Checkout VSCodium&lt;/a&gt;, for the truly MIT-licensed version of the VSCode IDE (with telemetry/tracking disabled). ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;&lt;a href="https://code.visualstudio.com/updates/v1_59" rel="noopener noreferrer"&gt;VSCode release notes for 1.59&lt;/a&gt;, along with release notes for previous monthly releases. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;The &lt;a href="https://code.visualstudio.com/insiders" rel="noopener noreferrer"&gt;VSCode Insiders Build&lt;/a&gt; allows users to get VSCode with new features as soon as they are available, rather than at the monthly cadence. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn4"&gt;
&lt;p&gt;Read about &lt;a href="https://code.visualstudio.com/updates/v1_59#_share-view-state-across-editor-groups" rel="noopener noreferrer"&gt;Shared View State Across Editor Groups&lt;/a&gt; in the release notes. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn5"&gt;
&lt;p&gt;Read about &lt;a href="https://code.visualstudio.com/docs/getstarted/userinterface#_editor-groups" rel="noopener noreferrer"&gt;Editor Groups&lt;/a&gt; in the VSCode docs. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn6"&gt;
&lt;p&gt;&lt;a href="https://www.gutenberg.org/ebooks/10002" rel="noopener noreferrer"&gt;The House on the Borderland, by William Hope Hodgson&lt;/a&gt;, is a freely available novel via &lt;a href="https://www.gutenberg.org/about/" rel="noopener noreferrer"&gt;Project Gutenberg&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn7"&gt;
&lt;p&gt;&lt;code&gt;workbench.action.createTerminalEditorSide&lt;/code&gt; provides this functionality, and is an alternative that can be entered after &lt;code&gt;Ctrl+Shift+P&lt;/code&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn8"&gt;
&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.live-server" rel="noopener noreferrer"&gt;Live Preview&lt;/a&gt; is developed by Microsoft, and can be installed via &lt;code&gt;Ctrl+P&lt;/code&gt; and &lt;code&gt;ext install ms-vscode.live-server&lt;/code&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn9"&gt;
&lt;p&gt;For more information, see &lt;a href="https://code.visualstudio.com/updates/v1_59#_live-preview" rel="noopener noreferrer"&gt;latest highlights around &lt;em&gt;Live Preview&lt;/em&gt;&lt;/a&gt;. Observe the animated bunny stuck waving in an infinite loop, trapped in a simulation. More in-depth information (on the extension, not the bunny) can be found directly within the &lt;a href="https://github.com/microsoft/vscode-livepreview/blob/main/release_notes/july-2021.md" rel="noopener noreferrer"&gt;extension release notes&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn10"&gt;
&lt;p&gt;See all &lt;a href="https://github.com/microsoft/vscode/issues?q=is%3Aissue+milestone%3A%22July+2021+Recovery%22+is%3Aclosed" rel="noopener noreferrer"&gt;issues addressed in VSCode 1.59.1 on GitHub&lt;/a&gt;. For the macOS bug fix, see &lt;a href="https://github.com/microsoft/vscode/issues/130222" rel="noopener noreferrer"&gt;Perma-hang/crash on M1 MBP with universal build&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn11"&gt;
&lt;p&gt;Normally, release notes include this snippet about &lt;a href="https://code.visualstudio.com/updates/v1_41#_preview-features" rel="noopener noreferrer"&gt;preview features and what they are&lt;/a&gt;: &lt;em&gt;"&lt;strong&gt;Preview features&lt;/strong&gt; are not ready for release but are functional enough to use. We welcome your early feedback while they are under development."&lt;/em&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn12"&gt;
&lt;p&gt;Read about &lt;a href="https://code.visualstudio.com/updates/v1_59#_automatic-language-detection-of-untitled-files" rel="noopener noreferrer"&gt;Automatic Language Detection of Untitled Files&lt;/a&gt; in the release notes. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn13"&gt;
&lt;p&gt;&lt;a href="https://github.com/yoeo/guesslang" rel="noopener noreferrer"&gt;Guesslang&lt;/a&gt;, by GitHub user &lt;a href="https://github.com/yoeo" rel="noopener noreferrer"&gt;yoeo&lt;/a&gt;, is an MIT-licensed ML model and Python package that can help detect the programming language of source code. It's been trained on over a million source code files. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn14"&gt;
&lt;p&gt;&lt;a href="https://www.tensorflow.org/js/" rel="noopener noreferrer"&gt;Tensorflow.js&lt;/a&gt; makes development and useage of ML available within the browser or &lt;a href="https://nodejs.org/en/" rel="noopener noreferrer"&gt;Node.js&lt;/a&gt;. For more about Tensorflow, checkout the &lt;a href="https://www.tensorflow.org/about" rel="noopener noreferrer"&gt;&lt;em&gt;Why TensorFlow&lt;/em&gt; page&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>vscode</category>
      <category>tooling</category>
      <category>codenewbie</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
