{% extends "layout/base.html" %}
{% block title %}Software Development{% endblock %}
{% block content %}
<section class="first content">
    <h1>Software Development</h1>

    <p>
        For pretty much all of my career (apart from some retail jobs early on while I went to college)
        I've worked as a software engineer (professionally since 2008). I taught myself to program since
        I was a young teenager, and my first 'real' language was Perl which I first learned because I
        wanted to build my own chatbots for AOL Instant Messenger.
    </p>

    <p>
        I soon found out Perl could be used for server-side website scripting (and would greatly empower
        my personal websites, which were limited to HTML and JavaScript so far) and was already building
        my own whole web apps (such as blogs, custom forums and MySpace-style social networking sites!)
        all before I even graduated high school. After not even a year into college, I got my first software
        development job (at a Perl shop) and the rest is history (and a story for my
        <a href="https://www.linkedin.com/in/kirsle" target="_blank">LinkedIn</a>).
    </p>

    <p>
        For the most part I have worked for small startup companies (as I <em>love</em> to write new code
        and have a big impact on the product). I'm not currently looking for work, but in the future will
        plan to give freelance work a try.
    </p>

    <ul>
        <li><a href="#skills">Technical Skills</a></li>
        <li><a href="#examples">Example Projects</a></li>
    </ul>

    <h2 id="skills" class="anchor">Technical Skills</h2>

    <ul>
        <li>
            <strong>Programming languages:</strong>
            <ul>
                <li>
                    I can program proficiently in <i class="fab fa-golang"></i> <strong>Go</strong>,
                    <i class="fab fa-python"></i> <strong>Python 3</strong> and <i class="fab fa-node-js"></i> <strong>JavaScript</strong>
                    (npm and web) and use these languages regularly for work and side projects.
                </li>
                <li>
                    I also once knew <img src="/images/perl.png" width="16" height="16"> <strong>Perl 5</strong> well (13 years straight)
                    but may be a bit rusty now!
                </li>
                <li>
                    Also can be dangerous in bash, SQL, Windows batch files, AutoIt, PHP
                </li>
            </ul>
        </li>

        <li>
            <strong>Project domains I have dabbled in:</strong>
            <ul>
                <li>
                    Web development (back-end, RESTful API, server-side rendered templates) and front-end (HTML/JavaScript, web design, single page apps)
                </li>
                <li>
                    <strong>Writing!</strong> I always say if I wasn't a developer I would be a writer, and I love to
                    document <em>the shit</em> out of the code I write. See my
                    <a href="https://www.rivescript.com/">RiveScript</a> and <a href="https://www.sketchymaze.com/guidebook/">Sketchy Maze</a>
                    docs for example.
                </li>
                <li>
                    Operations (managing Linux servers, deploying apps, Docker, nginx, Amazon AWS)
                </li>
                <li>
                    Chatbots (I built my own scripting language, can also author chatbot personalities)
                </li>
                <li>
                    Desktop applications (native UIs or web app wrappers)
                </li>
                <li>
                    Game development (I have one I wrote from scratch! Go/SDL2)
                </li>
            </ul>
        </li>

        <li>
            <strong>Web Frameworks I know well:</strong>
            <ul>
                <li>
                    <i class="fab fa-python"></i>
                    <strong>Python:</strong>
                    Flask, Jinja, SQLAlchemy
                </li>
                <li>
                    <i class="fab fa-golang"></i>
                    <strong>Go:</strong>
                    Standard net/http, <a href="https://gorm.io">gorm</a>, <a href="https://github.com/urfave/negroni">urfave/negroni</a>
                </li>
                <li>
                    <i class="fab fa-node-js"></i>
                    <strong>JavaScript:</strong>
                    Node.js, Vue, jQuery, vanilla JS
                </li>
                <li>
                    <i class="fab fa-html5"></i>
                    <i class="fab fa-css3"></i>
                    <strong>HTML/CSS:</strong>
                    Twitter Bootstrap, Bulma (or all from scratch)
                </li>
            </ul>
        </li>
    </ul>

    <h2 id="examples" class="anchor">Example Projects</h2>

    <p>
        See my <a href="/portfolio">Portfolio</a> page for some of my biggest and actively
        maintained projects. I also have a variety of stuff on my
        <a href="https://github.com/kirsle" target="_blank">GitHub</a> page but here
        are some interesting projects in particular:
    </p>

    <ul>
        <li>
            <strong>RiveScript:</strong> a chatbot scripting language, <a href="https://www.rivescript.com" target="_blank">rivescript.com</a>.
            <ul>
                <li>
                    A good example of my documentation writing skills! Just check out that website,
                    or the <a href="https://github.com/aichaos/rivescript-wd" target="_blank">RiveScript Working Draft</a>,
                    the specification for RiveScript written from an agnostic point of view to any particular
                    implementation of it (<a href="https://github.com/aichaos/rivescript-python">Python</a>,
                    <a href="https://github.com/aichaos/rivescript-js">JavaScript</a>,
                    <a href="https://github.com/aichaos/rivescript-go">Go</a>,
                    etc.) -- and check out those implementation repos for lots of docs and examples!
                </li>
            </ul>
        </li>

        <li>
            <strong>Sketchy Maze:</strong> my open source drawing-based maze game, <a href="https://www.sketchymaze.com/" target="_blank">sketchymaze.com</a>.
            <ul>
                <li>
                    The game engine is open source with a mirror <a href="https://github.com/SketchyMaze/doodle" target="_blank">on GitHub</a>.
                </li>
                <li>
                    It also spawned off an open source Go <a href="https://github.com/SketchyMaze/ui" target="_blank">User Interface toolkit</a> that
                    implements all the windows, scrollbars, checkboxes and other UI widgets for the game. My UI toolkit can support building desktop
                    apps (anywhere SDL2 is supported) as well as compile to WebAssembly and work on a web page.
                </li>
                <li>
                    A ton of documentation I wrote in the <a href="https://www.sketchymaze.com/guidebook/">Guidebook</a>
                    that ships with the game.
                </li>
            </ul>
        </li>

        <li>
            <strong>BareRTC:</strong> a webcam enabled chat room, <a href="https://github.com/kirsle/BareRTC">github.com/kirsle/BareRTC</a>
            <ul>
                <li>
                    A back-end written in Go that uses WebSockets for the chat room protocol and supports WebRTC for peer-to-peer
                    webcam and microphone sharing between chatters.
                </li>
                <li>
                    The front-end uses Vue.js and vanilla WebSocket and WebRTC calls (no framework like socket.io needed in 2023)
                </li>
                <li>
                    It can plug in to any existing website's userbase via JWT tokens (optional) or it can run in open mode
                    where users pick any username they want (less recommended or tested -- I built it to plug in to one of
                    my sites with an established userbase).
                </li>
            </ul>
        </li>

        <li>
            Miscellaneous cool things on my GitHub:
            <ul>
                <li>
                    <a href="https://github.com/kirsle/go-website-template">go-website-template</a>: a good base for a
                    Go web app that uses only the standard library and has a start to a database, users table, session
                    cookies with log in/out and other useful basic features without a framework. It's pared down from
                    one of my personal projects where I gutted it to the basics to show as maybe a good example how to
                    start a Go web app.
                </li>
                <li>
                    <a href="https://github.com/kirsle/flask-multi-upload">flask-multi-upload</a>: a Python/Flask application
                    where I was exploring HTML 5 multi-file uploaders with progress bar using fairly easy to understand
                    JavaScript (with some jQuery).
                </li>
                <li>
                    <a href="https://github.com/kirsle/PCCC">Perl CyanChat Client</a>: unfortunately CyanChat no longer exists
                    but this was one of my bigger Perl/Tk graphical desktop applications. Using my Perl module,
                    <a href="https://github.com/kirsle/Net-CyanChat">Net::CyanChat</a> you can run a CyanChat compatible
                    server that PCCC can be configured to log into.
                </li>
            </ul>
        </li>
    </ul>
</section>
{% endblock %}
