<?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: John Allsup</title>
    <description>The latest articles on DEV Community by John Allsup (@johnallsup).</description>
    <link>https://dev.to/johnallsup</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1083087%2Ff10fc1ad-65d2-4d36-908f-73cb6ab5ad55.jpeg</url>
      <title>DEV Community: John Allsup</title>
      <link>https://dev.to/johnallsup</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/johnallsup"/>
    <language>en</language>
    <item>
      <title>Purple Tree 3 - A Personal Wiki</title>
      <dc:creator>John Allsup</dc:creator>
      <pubDate>Sat, 16 May 2026 04:29:50 +0000</pubDate>
      <link>https://dev.to/johnallsup/purple-tree-3-a-personal-wiki-4o8</link>
      <guid>https://dev.to/johnallsup/purple-tree-3-a-personal-wiki-4o8</guid>
      <description>&lt;p&gt;I want to explain the ideas of my personal Wiki, Purple Tree 3 (see johnallsup on github). It was written largely from the ground up, with no frameworks, in PHP (backend) and Javascript (frontend). It uses Parsedown to turn markdown into HTML. It wraps Parsedown in a preprocessor, and a postprocessor to turn 'computational poohsticks' (random strings that Parsedown passes through verbatim, usually generated via a hash of the input) back into whatever was hashed into that poohstick. (Basically you form a PHP array where the hash is the key and the protected content is the value.)&lt;/p&gt;

&lt;p&gt;Anybody interested. Source on Github.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/johnallsup" rel="noopener noreferrer"&gt;
        johnallsup
      &lt;/a&gt; / &lt;a href="https://github.com/johnallsup/purple-tree-3" rel="noopener noreferrer"&gt;
        purple-tree-3
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Purple Tree 3, a Wiki system with hierarchical directory structure, capable of managing many subdomains with a single instance.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Purple Tree 3&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;by John D. Allsup&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Purple Tree 3 is the third iteration of the wiki system I use to
organise much of my notes and online presence. It is relatively
simple, under 10,000 lines of PHP and a under 10,000 lines
of Javascript. It uses no frameworks, and a small amount
of third party code. The only &lt;em&gt;necessary&lt;/em&gt; third party dependency
is Parsedown, which converts Markdown into HTML
The wiki then uses a wrapper class called PTMD which
turns WikiWords into links, and also allows fenced blocks
to be given special interpretations, something of which
I make copious use.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;History&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The first Wiki system I used was called WabiSabi, which
I used to build my first Wiki, called TheWikiMan. Over
a time, I hacked more and more features into it, until
it became cumbersome.&lt;/p&gt;
&lt;p&gt;Sometime in July 2021 I decided to try my hand at making
Youtube coding…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/johnallsup/purple-tree-3" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>php</category>
      <category>javascript</category>
      <category>wiki</category>
    </item>
  </channel>
</rss>
