noah.is/content/skills.html

286 lines
13 KiB
HTML

---
title: "Skills"
date: 2023-09-13T15:08:12-07:00
draft: false
---
<section class="content">
<h1>Skills</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 (having learned HTML and created my first website at 12 years old), and
then 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="#web-development">Web Development</a></li>
<li><a href="#technical">Technical Skills</a></li>
<li><a href="#examples">Example Projects</a></li>
</ul>
<h2 id="web-development" class="anchor">Web Development</h2>
<p>
I call myself a "full stack" web developer and have a varied skillset to tackle both front-end
and back-end concerns of web applications. I am most at home on the back-end side (everything
from developing the app itself to getting it deployed on a server or cloud provider) but have
also been known to create a nice front-end web design or Single Page App (SPA) from time to time.
</p>
</section>
<div class="columns">
<div class="column">
<div class="card">
<div class="card-header has-background-info">
<p class="card-header-title has-text-light">
<i class="fa fa-server mr-2"></i> Back-end (server side)
</p>
</div>
<div class="card-content content">
<h6>Languages</h6>
<p>
<i class="fab fa-golang"></i> Go,
<i class="fab fa-python"></i> Python,
<i class="fab fa-node-js"></i> JavaScript,
<img src="/images/perl.png" width="16" height="16"> Perl
</p>
<h6>Frameworks</h6>
<p>
<i class="fab fa-golang"></i> <a href="https://gorm.io" target="_blank">GORM</a>,
<a href="https://github.com/urfave/negroni" target="_blank">Negroni</a>,
<a href="https://github.com/gin-gonic/gin" target="_blank">Gin</a><br>
<i class="fab fa-python"></i> <a href="https://flask.palletsprojects.com/en/2.3.x/" target="_blank">Flask</a>,
<a href="https://www.tornadoweb.org/en/stable/" target="_blank">Tornado</a>,
<a href="https://www.sqlalchemy.org/" target="_blank">SQLAlchemy</a><br>
<i class="fab fa-node-js"></i> <a href="https://expressjs.com/" target="_blank">Express.js</a>
</p>
<h6>Technologies</h6>
<p>
<i class="fab fa-docker"></i> Docker, <i class="fab fa-github"></i> GitHub, <i class="fab fa-linux"></i> Linux,
RESTful API, server-side templates,
DevOps/systems administration, Amazon AWS <small>(EC2, S3, SQS, SES, EKS, Elastic Beanstalk)</small>
</p>
</div>
</div>
</div>
<div class="column">
<div class="card">
<div class="card-header has-background-info">
<p class="card-header-title has-text-light">
<i class="fa fa-brush mr-2"></i> Front-end (web design)
</p>
</div>
<div class="card-content content">
<h6>Languages</h6>
<p>
<i class="fab fa-html5"></i> HTML,
<i class="fab fa-css3"></i> CSS,
<i class="fab fa-node-js"></i> JavaScript
</p>
<h6>Frameworks</h6>
<p>
<i class="fab fa-node-js"></i> Vue.js, Angular, React, Knockout, vanilla<br>
<i class="fab fa-css3"></i> Bootstrap, Bulma, Tailwind
</p>
<h6>Technologies</h6>
<p>
Ajax, WebSockets, WebRTC, responsive design (mobile friendly), Progressive
Web Apps (PWAs), Single Page Apps (SPAs), localStorage, Cross Origin Resource Sharing (CORS)
</p>
</div>
</div>
</div>
</div>
<section class="content">
<h2 id="technical" 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>