<?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: Trev</title>
    <description>The latest articles on DEV Community by Trev (@trevdev).</description>
    <link>https://dev.to/trevdev</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%2F86410%2Feb37ec7e-1d14-4b71-9d51-e3c700cce309.jpg</url>
      <title>DEV Community: Trev</title>
      <link>https://dev.to/trevdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/trevdev"/>
    <language>en</language>
    <item>
      <title>Jitsi Rocks</title>
      <dc:creator>Trev</dc:creator>
      <pubDate>Sat, 28 Mar 2020 18:53:00 +0000</pubDate>
      <link>https://dev.to/trevdev/jitsi-rocks-4ml7</link>
      <guid>https://dev.to/trevdev/jitsi-rocks-4ml7</guid>
      <description>&lt;p&gt;Video conferencing is a hot topic right now. Several proprietary solutions have grown in popularity with the unfortunate help of COVID-19. Since the "iron is hot", I'd like to write a bit about &lt;a href="https://jitsi.org/" rel="noopener noreferrer"&gt;Jitsi&lt;/a&gt;, but more specifically &lt;a href="https://jitsi.org/jitsi-meet/" rel="noopener noreferrer"&gt;Jitsi-Meet&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Jitsi?
&lt;/h2&gt;

&lt;p&gt;There are many reasons why you may want to consider using Jitsi, outside of the fact that it's Free/Open Source Software:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anyone who can run a Chromium based browser can use it.&lt;/li&gt;
&lt;li&gt;Meetings are dead simple to set up.&lt;/li&gt;
&lt;li&gt;There are no login requirements.&lt;/li&gt;
&lt;li&gt;No data is stored on the host server.&lt;/li&gt;
&lt;li&gt;Everything sent back and fourth is encrypted.&lt;/li&gt;
&lt;li&gt;There are Android/Apple applications for mobile devices.&lt;/li&gt;
&lt;li&gt;There is an Electron-based &lt;a href="https://github.com/jitsi/jitsi-meet-electron" rel="noopener noreferrer"&gt;desktop application&lt;/a&gt; with remote-desktop support.&lt;/li&gt;
&lt;li&gt;The server technology relies mostly on bandwidth and is very scalable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to use Jitsi
&lt;/h2&gt;

&lt;p&gt;If you're the sort of person who doesn't want/care to run your own instance of Jitsi, you're in luck! There's a &lt;a href="https://meet.jit.si" rel="noopener noreferrer"&gt;public server&lt;/a&gt; that is free for all to use. The easiest way to get your friends/family on-board is to have everyone use Google Chrome.&lt;/p&gt;

&lt;p&gt;Here are your easy on-boarding steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Google Chrome (or your Chromium based browser of choice) and head to &lt;code&gt;meet.jit.si&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Pick a unique name for your meeting room.&lt;/li&gt;
&lt;li&gt;Click the "Go" button.&lt;/li&gt;
&lt;li&gt;Make sure your microphone/camera permissions are allowed. &lt;/li&gt;
&lt;li&gt;Set an optional password.&lt;/li&gt;
&lt;li&gt;Share the web address to your meeting room with your friends/co-workers/family to open in Chrome/Chromium.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Deploy your own Jitsi
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://jitsi.org/jitsi-videobridge/" rel="noopener noreferrer"&gt;Jitsi-Videobridge&lt;/a&gt; is the technology used to deploy a video server for conferencing. There are a few other moving parts that you can add/customize for your deployment, such as a SIP server that allows you to call in by phone. You can follow &lt;a href="https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md" rel="noopener noreferrer"&gt;these deployment instructions&lt;/a&gt; to set up your own server.&lt;/p&gt;

&lt;p&gt;If you're like me and you want a simpler/easier way to tear down and re-deploy, their maintained &lt;a href="https://github.com/jitsi/docker-jitsi-meet" rel="noopener noreferrer"&gt;docker-compose&lt;/a&gt; repository is really nice. You can easily clone it, set up your own custom &lt;code&gt;.env&lt;/code&gt; file from their &lt;code&gt;env.example&lt;/code&gt; file, commit your local changes, and pull in their updates whenever you want.&lt;/p&gt;

&lt;p&gt;All I had to do from here is set up one of Digital Oceans floating IP addresses, point a subdomain at it and then fire up a Digital Ocean droplet with docker pre-installed. Within seconds I could ssh into the droplet, clone my custom version of docker-jitsi-meet onto the server and run &lt;code&gt;docker-compose up -d&lt;/code&gt;. Within 10 minutes I had my own video conferencing service.&lt;/p&gt;

&lt;p&gt;I didn't dig too deep into it, but docker-jitsi-meet also has documentation/config options for running Jitsi on your LAN, so if you don't want to pay for a droplet, or fuss with re-provisioning at all, you can just self-host at home.&lt;/p&gt;

&lt;h2&gt;
  
  
  How well does it work?
&lt;/h2&gt;

&lt;p&gt;I've used just about every video conferencing app out there. I'm happy to say that it performs just as well as some of the major players like Google Hangouts and Zoom. When using it in the browser your mileage may vary: sometimes participants have a hard time figuring out/understanding how to troubleshoot webapps, sometimes they use the "wrong" browser, or perhaps have one too many plugins. These aren't problems that are unique to Jitsi and there are desktop/mobile apps to help make up for them.&lt;/p&gt;

&lt;p&gt;You also have the benefit of using a service that you can control and isn't out to make a product out of you, or perhaps &lt;a href="https://www.forbes.com/sites/zakdoffman/2019/07/09/warning-as-millions-of-zoom-users-risk-webcam-hijack-change-your-settings-now/#1f8c2f8942d9" rel="noopener noreferrer"&gt;fail to be accountable on their own&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Give Jitsi a try! Free software gets better the more people use it :)&lt;/p&gt;

</description>
      <category>blog</category>
      <category>opensource</category>
    </item>
    <item>
      <title>A Very Nice CSS Parallax Video</title>
      <dc:creator>Trev</dc:creator>
      <pubDate>Mon, 25 Nov 2019 16:52:30 +0000</pubDate>
      <link>https://dev.to/trevdev/a-very-nice-css-parallax-video-45j5</link>
      <guid>https://dev.to/trevdev/a-very-nice-css-parallax-video-45j5</guid>
      <description>&lt;h1&gt;
  
  
  This is not my video
&lt;/h1&gt;

&lt;p&gt;I just thought it was really helpful so I thought I would share it here.&lt;/p&gt;

&lt;p&gt;The props go to &lt;a href="https://redstapler.co/css-parallax-scrolling-effect/" rel="noopener noreferrer"&gt;Red Stapler&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ln5BWnYMSQA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  The code involved
&lt;/h2&gt;

&lt;p&gt;This CSS wrapper is dead simple and the video explains it well so I won't go into too much detail here - but if you just want to see the code involved, here it is:&lt;/p&gt;

&lt;h3&gt;
  
  
  HTML
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;span&amp;gt;&lt;/span&gt;CSS Parallax Scrolling Tutorial&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;  
            &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"parallax-wrapper"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.
                       ....
                       .... 
                       Donec in justo eu ligula semper consequat sed a risus.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"regular-wrapper"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.
                       ....
                       .... 
                       Donec in justo eu ligula semper consequat sed a risus.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CSS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;    &lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;hidden&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;26px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'Franklin Gothic Medium'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;'Arial Narrow'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Arial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#ffffff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;perspective&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;transform-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;preserve-3d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;overflow-x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;hidden&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;overflow-y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nc"&gt;.parallax-wrapper&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vw&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;padding-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;20vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;transform-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;preserve-3d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nc"&gt;.parallax-wrapper&lt;/span&gt;&lt;span class="nd"&gt;::before&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s1"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vw&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;background-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url("/trianglify.png")&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;z-index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;translateZ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-1px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nc"&gt;.regular-wrapper&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vw&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;padding-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;20vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;background-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url("/trianglify2.png")&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;z-index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;relative&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#aaa&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;What I like about this method is that it's pure CSS and it's easy to replicate. I'm currently building a Vue component that will use this method nicely.&lt;/p&gt;

</description>
      <category>css</category>
    </item>
    <item>
      <title>Why I decided to go with Pelican</title>
      <dc:creator>Trev</dc:creator>
      <pubDate>Mon, 17 Jun 2019 16:05:00 +0000</pubDate>
      <link>https://dev.to/trevdev/why-i-decided-to-go-with-pelican-5i2</link>
      <guid>https://dev.to/trevdev/why-i-decided-to-go-with-pelican-5i2</guid>
      <description>&lt;p&gt;I tend to get excited when I explore something new and I've gotten into the habit of making &lt;a href="https://trevdev.ca" rel="noopener noreferrer"&gt;this website&lt;/a&gt; the focus of a new obsession.&lt;/p&gt;

&lt;p&gt;When I first wrote this website, it was with the brand new HTML/CSS/JavaScript skills that I had learned. Then I learned Python and re-wrote this website to be more dynamic with the use of &lt;a href="http://flask.pocoo.org/" rel="noopener noreferrer"&gt;Flask&lt;/a&gt;. Months later I started learning reactive JavaScript front-ends and ended up re-working my porfolio into a single-page React application. I was mostly happy with it at that point, but I felt like I was still missing a couple of things.&lt;/p&gt;

&lt;p&gt;I wanted a blog and didn't want to write one in JSX or do some sort of hacky markup rendering. The SEO wasn't quite up to snuff and I wanted something that would render really well in older/less accessible browsers. I also wanted something low maintenance and felt like React may have been overkill for a portfolio or a blog. Needless to say, it's easy to get carried away with new things.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Static site generators are fast, simple and secure&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I had heard about &lt;a href="https://www.sitepoint.com/static-site-generators/" rel="noopener noreferrer"&gt;static site generators&lt;/a&gt; while reading about them on Twitter and Mastodon. It ocurred to me that that static sites in general are wonderful and there are many reasons to use a static site generator:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They provide content management (like WordPress), but without &lt;em&gt;any of the bloat&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;They make it easy to write pages and posts in simple document formats (like Markdown).&lt;/li&gt;
&lt;li&gt;They generate &lt;em&gt;very secure&lt;/em&gt; websites. It's just static content. There are no databases or backends to exploit outside of the web server itself.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After reading a few articles about the various static site generators out there, I decided to go with &lt;em&gt;Pelican&lt;/em&gt; for a few reasons. Pelican is very mature, written in Python , highly customizable/configurable and has many features included. For example, it generates pages based on category, date, author and tag. You can also leverage custom post/page metadata and pass it to jinja powered templates that are very clear and easy to reason with. To deploy them, all you need is FTP or shell access to a shared host provider. You could also easily deploy a static website for &lt;em&gt;free&lt;/em&gt; using something like &lt;em&gt;Netlify&lt;/em&gt; or &lt;em&gt;Github Pages&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;To boot, there are &lt;a href="https://github.com/getpelican/pelican-plugins" rel="noopener noreferrer"&gt;dozens&lt;/a&gt; of plugins for Pelican. Since I enjoy Python, it wasn't all that challenging for me to write my own plugin for a niche situation like my VueJS powered &lt;a href="https://github.com/trev-dev/pcs-serializer" rel="noopener noreferrer"&gt;comment system&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Pelican is also really &lt;a href="https://docs.getpelican.com/en/stable/" rel="noopener noreferrer"&gt;well documented&lt;/a&gt;. This came in super handy while figuring out how to properly write a new theme and create special page templates like my home page and my portfolio category page.&lt;/p&gt;

&lt;p&gt;The only drawback that I can think of is that Python is slower than some of the newer static site generators like Hugo. That being said, I'm still able to render this website in under half a second, and that's fast enough for me.&lt;/p&gt;

&lt;p&gt;I'm super happy with what I've created with Pelican and am excited to share some of the tips &amp;amp; tricks I learned along the way. I don't think I'll be switching my website up any time soon.&lt;/p&gt;

</description>
      <category>pelican</category>
      <category>python</category>
    </item>
  </channel>
</rss>
