<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://blog.carsonevans.ca</id>
    <title>Carson's Blog</title>
    <updated>2026-03-25T18:54:53.916Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <author>
        <name>Carson Evans</name>
        <uri>https://blog.carsonevans.ca/contact</uri>
    </author>
    <link rel="alternate" href="https://blog.carsonevans.ca"/>
    <link rel="self" href="https://blog.carsonevans.ca/feed.xml"/>
    <subtitle>Somewhat coherent tutorials about web stuff and things.</subtitle>
    <entry>
        <title type="html"><![CDATA[You Don't Need jQuery]]></title>
        <id>/2023/08/08/you-dont-need-jquery</id>
        <link href="/2023/08/08/you-dont-need-jquery"/>
        <updated>2023-08-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Even though modern JavaScript has rendered the need for a
  library such as jQuery unnecessary, I STILL see people (especially those who
  are very new to web development) using it for brand new projects. So I
  thought I would write a little post about how to do some of the most common
  jQuery things in lovely plain simple JavaScript.]]></summary>
        <author>
            <name>Carson Evans</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[How I Used Google reCaptcha In NextJS]]></title>
        <id>/2023/07/22/how-i-used-recaptcha-in-nextjs</id>
        <link href="/2023/07/22/how-i-used-recaptcha-in-nextjs"/>
        <updated>2023-07-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I recently migrated this website to NextJS and I ran in to a few hurdles along the way. Google reCaptcha gave me a few of those hurdles, and in this post I will explain how I overcame them.]]></summary>
        <author>
            <name>Carson Evans</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Bootstrap Modals Without jQuery]]></title>
        <id>/2020/08/08/bootstrap-modals-without-jquery</id>
        <link href="/2020/08/08/bootstrap-modals-without-jquery"/>
        <updated>2020-08-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In this post I'll be showing how you can pretty easily write your own vanilla JavaScript to replace jQuery when using bootstrap modals.]]></summary>
        <author>
            <name>Carson Evans</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Storing Passwords In Flask]]></title>
        <id>/2020/08/02/storing-passwords-in-flask</id>
        <link href="/2020/08/02/storing-passwords-in-flask"/>
        <updated>2020-08-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[There is a plethora of guides out there about how to securely store passwords, but there are not as many of those guides that apply to Flask specifically. I spend quite a bit of my free time on the Pallets discord helping people out with their Flask questions, and often enough we have people storing passwords as plain text. So I thought I would write about the different options one has for correctly storing passwords in a Flask app.]]></summary>
        <author>
            <name>Carson Evans</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Request Method Spoofing in Flask]]></title>
        <id>/2020/07/06/request-method-spoofing-in-flask</id>
        <link href="/2020/07/06/request-method-spoofing-in-flask"/>
        <updated>2020-07-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I recently found myself wanting to do method spoofing in flask. It turned out this isn't such a simple straight forward thing to do. So sit back while I take you down the rabbit hole that is method spoofing in flask.]]></summary>
        <author>
            <name>Carson Evans</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Stop. Being. Clever.]]></title>
        <id>/2020/06/27/stop-trying-to-be-clever</id>
        <link href="/2020/06/27/stop-trying-to-be-clever"/>
        <updated>2020-06-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This post is a little bit of a rant about trying to be too clever in code. The kind of code that you might have written 3 months ago and now you can't decipher, let alone other people.]]></summary>
        <author>
            <name>Carson Evans</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Validating Ajax Requests With WTForms in Flask]]></title>
        <id>/2019/08/20/validating-ajax-requests-with-wtforms-in-flask</id>
        <link href="/2019/08/20/validating-ajax-requests-with-wtforms-in-flask"/>
        <updated>2019-08-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I've been using Flask to build web applications for over a year now. I always use WTForms for my form validation Eventually I needed to create a more interactive form that submitted with AJAX instead of a more traditional form submit, but I wanted to continue to use WTForms for validation. Here I will demonstrate how I reused my existing WTForms validation with JSON/AJAX requests.]]></summary>
        <author>
            <name>Carson Evans</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Add Search Feature to a Jekyll Blog]]></title>
        <id>/2015/09/01/add-search-feature-to-a-jekyll-blog</id>
        <link href="/2015/09/01/add-search-feature-to-a-jekyll-blog"/>
        <updated>2015-09-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In this post we will be creating a dynamic(ish) JSON file that we read through an AJAX call to implement searching on a Jekyll blog.]]></summary>
        <author>
            <name>Carson Evans</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Install Nginx With PHP on FreeBSD 10.1]]></title>
        <id>/2015/01/15/install-nginx-with-php-on-freebsd-10-1</id>
        <link href="/2015/01/15/install-nginx-with-php-on-freebsd-10-1"/>
        <updated>2015-01-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[DigitalOcean has just launched their most requested feature, FreeBSD droplets. So here is how to install Nginx with PHP support on one of their FreeBSD droplets.]]></summary>
        <author>
            <name>Carson Evans</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Make a Responsive Grid Framework in Pure CSS]]></title>
        <id>/2014/07/30/make-a-responsive-grid-framework-in-pure-css-with-under-50-lines-of-code</id>
        <link href="/2014/07/30/make-a-responsive-grid-framework-in-pure-css-with-under-50-lines-of-code"/>
        <updated>2014-07-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[When developing a website it is much easier to create page layouts with a grid framework.  Especially if the framework is responsive.  The problem with most grid frameworks is that they either come as part of a larger framework, or require JavaScript.]]></summary>
        <author>
            <name>Carson Evans</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Create an Async Chat Server and Client With Dart]]></title>
        <id>/2014/07/25/create-an-async-chat-server-and-client-with-dart</id>
        <link href="/2014/07/25/create-an-async-chat-server-and-client-with-dart"/>
        <updated>2014-07-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Before starting this tutorial you should be familiar with my previous post about creating your first webapp in dart.  In this tutorial we are going to make two Dart projects.  The first one will be a command line application for the server, the second one will be a web application for the client.  We will be using WebSockets for communication between server and client.]]></summary>
        <author>
            <name>Carson Evans</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Create Your First Webapp With Google's Darn Language]]></title>
        <id>/2014/07/11/create-your-first-webapp-with-google's-dart-programming-language</id>
        <link href="/2014/07/11/create-your-first-webapp-with-google's-dart-programming-language"/>
        <updated>2014-07-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Dart is a structured programming language for the web created by Google. The goal of Dart is to replace JavaScript as the most popular language for web development. For now, due to lack of availability in mainstream browsers Dart is compiled to JavaScript. Dart syntax resembles that of Java and C# in that it has class-base objects with C-style syntax.]]></summary>
        <author>
            <name/>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Create a JSON Web Service With FlightPHP]]></title>
        <id>/2014/06/17/create-a-json-web-service-with-flight-php</id>
        <link href="/2014/06/17/create-a-json-web-service-with-flight-php"/>
        <updated>2014-06-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Flight PHP is a micro framework for web applications. Flight requires PHP 5.3 or greater, and is released under the MIT license. Flight takes care of some of the most common tasks a web application might need such as; routing, named parameters with friendly URL's, views/layouts, and errors handling. Flight is built to be extremely extensible to go beyond those features.]]></summary>
        <author>
            <name>Carson Evans</name>
        </author>
    </entry>
</feed>