--- title: "Skills" date: 2023-09-13T15:08:12-07:00 draft: false ---

# Skills

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.

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 LinkedIn).

For the most part I have worked for small startup companies (as I love 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.

- Web Development
- Technical Skills
- Example Projects

## Web Development

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.

Back-end (server side)

###### Languages

Go, Python, JavaScript, Perl

###### Frameworks

GORM, Negroni, Gin
Flask, Tornado, SQLAlchemy
Express.js

###### Technologies

Docker, GitHub, Linux, RESTful API, server-side templates, DevOps/systems administration, Amazon AWS (EC2, S3, SQS, SES, EKS, Elastic Beanstalk)

Front-end (web design)

###### Languages

HTML, CSS, JavaScript

###### Frameworks

Vue.js, Angular, React, Knockout, vanilla
Bootstrap, Bulma, Tailwind

###### Technologies

Ajax, WebSockets, WebRTC, responsive design (mobile friendly), Progressive Web Apps (PWAs), Single Page Apps (SPAs), localStorage, Cross Origin Resource Sharing (CORS)

## Technical Skills

- Programming languages:
  - I can program proficiently in Go, Python 3 and JavaScript (npm and web) and use these languages regularly for work and side projects.
  - I also once knew Perl 5 well (13 years straight!) but may be a bit rusty now!
  - Also can be dangerous in bash, SQL, Windows batch files, AutoIt, PHP
- Project domains I have dabbled in:
  - Web development (back-end, RESTful API, server-side rendered templates) and front-end (HTML/JavaScript, web design, single page apps)
  - Writing! I always say if I wasn't a developer I would be a writer, and I love to document the shit out of the code I write. See my RiveScript and Sketchy Maze docs for example.
  - Operations (managing Linux servers, deploying apps, Docker, nginx, Amazon AWS)
  - Chatbots (I built my own scripting language, can also author chatbot personalities)
  - Desktop applications (native UIs or web app wrappers)
  - Game development (I have one I wrote from scratch! Go/SDL2)
- Web Frameworks I know well:
  - Python: Flask, Jinja, SQLAlchemy
  - Go: Standard net/http, gorm, urfave/negroni
  - JavaScript: Node.js, Vue, jQuery, vanilla JS
  - HTML/CSS: Twitter Bootstrap, Bulma (or all from scratch)

## Example Projects

See my Portfolio page for some of my biggest and actively maintained projects. I also have a variety of stuff on my GitHub page but here are some interesting projects in particular:

- RiveScript: a chatbot scripting language, rivescript.com.
  - A good example of my documentation writing skills! Just check out that website, or the RiveScript Working Draft, the specification for RiveScript written from an agnostic point of view to any particular implementation of it (Python, JavaScript, Go, etc.) -- and check out those implementation repos for lots of docs and examples!
- Sketchy Maze: my open source drawing-based maze game, sketchymaze.com.
  - The game engine is open source with a mirror on GitHub.
  - It also spawned off an open source Go User Interface toolkit 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.
  - A ton of documentation I wrote in the Guidebook that ships with the game.
- BareRTC: a webcam enabled chat room, github.com/kirsle/BareRTC
  - 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.
  - The front-end uses Vue.js and vanilla WebSocket and WebRTC calls (no framework like socket.io needed in 2023)
  - 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).
- Miscellaneous cool things on my GitHub:
  - go-website-template: 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.
  - flask-multi-upload: 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).
  - Perl CyanChat Client: unfortunately CyanChat no longer exists but this was one of my bigger Perl/Tk graphical desktop applications. Using my Perl module, Net::CyanChat you can run a CyanChat compatible server that PCCC can be configured to log into.