About the Blog

I created this blog to share my insights about programming, web development, and programs I use, but this blog is not limited to just those topics.

The particular programming languages of interest to me are C, C++, JavaScript, SQL, Emacs Lisp, Scheme, Python, and the shell.

C and C++
C is an imperative programming language that compiles to binary code. It is praised for its speed and simplicity, and is the lingua franca of programming. C++ is one of a number of "successors" to C and is the most common among them. Modern C++ is basically C, plus object oriented programming abilities, some functional programming abilities, and type abstraction. Most operating systems and high performance programs are written in C or C++. C and C++ are more relevant than ever. Every platform natively supports C or C++: smartphones (Android and iPhone), any desktop operating system, embedded devices, web browsers (via WebAssembly).
JavaScript
JavaScript (or ECMAScript) is a scripting language, originally created to extend web browser functionality. JavaScript is about as ubiquitous as C and C++. Most every computer has a JavaScript capable browser or can run it outside the browser, such as with Node.js or Nashorn. I am also interested in exploring languages that transpile to JavaScript, especially ClojureScript and Elm.
SQL and NoSQL
SQL is the standard relational database query language, and most databases are relational. The field of databases has become more heterogeneous with non-SQL databases filling niches where relational databases are inappropriate or not optimal. This blog is an example of one, in this case, an XML document database.
Emacs Lisp
GNU Emacs is my editor of choice and its functionality is extended by using its own programming language, Emacs Lisp. Emacs Lisp was my first real exposure to programming. It is not just useful for extending Emacs, but also good for learning s-expression macro programming and quickly experimenting with most any language idea that is used in general purpose programming languages. Emacs is constantly being improved, people are creating add-on packages, and I desire to share and further my knowledge about it.
Scheme
Scheme is a Lisp-like language praised for its simplicity and expressiveness, and if it was more widely adopted, would be my preferred scripting language. However, scheme programming techniques are often applicable in other lisps such as Emacs Lisp, Clojure, and ClojureScript. My preferred scheme implementations are Chicken Scheme and Guile. I am also interested in Racket, which is a language ecosystem whose primary language is a Scheme derivative.
Python
Python is possibly the most common scripting language in the Unix ecosystem and it has an extensive library. Many programs are extensible with Python. The language is of interest to me for pragmatic reasons. Python is a fair scripting language, but I think that the language itself is similar but inferior to Scheme. It lacks a macro language. I think the language's forced indents were a mistake, and it cannot do thread level, high performance parallel programming.
Shell Scripting
This blog is created using the Unix tool kit, plus additional programs. In Unix, most programs can be used as functions in shell scripts, blurring the line between program and function. Bash is my primary shell scripting language. The Unix toolkit is a set of standard tools found on all Unix and Unix compliant systems.

Rolling My Own Static Site Generator

My blog was initially hosted on Blogger. While it was quick to setup, it was cumbersome to add programming blog posts, and the site's look was restricted to templates. I use Emacs Org Mode for taking notes and it has the ability to export to many formats, including XHTML, and can export more than one file at a time. I wanted the ability to export my Org notes as blog posts without post-export editing. With Blogger, this was impossible. I initially tried Pelican, which is a static site generator written in Python. However, I did not like the output HTML markup; it used too many div's and did not take advantage of HTML5 tags such as main and aside. I also wanted more control over navigation. I knew that XSLT (Extensible Stylesheet Language Transformations) would be perfect for this kind of task, converting XHTML Org output to HTML in the format that I wanted, with a consistent header, asides, and a footer; this is precisely the use case that it was designed for. The main challenge was creating a document database from Org's export, and then using that information to generate navigation content and pages. I also took this as an opportunity to modernize my HTML and CSS skills.

Why Blog

Every programmer should have a blog. At the very least, it serves as a platform to show your knowledge in an accessible format. In addition, every programmer is well served by having an account on a code sharing site such as GitHub, but I believe that the blog is more important. Non-trivial programs are difficult, time-consuming things to create and understand, so even if you post quality code on GitHub et. al., you are still relying on people taking time to read and understand the code. In a blog, you can show code excepts and explain them, reducing the reader's mental load and increasing inter-communication.

About Me

I grew up in Eagle River, Alaska, attending school at Birchwood ABC and then at Chugiak High School. I completed my Bachelors of Science in Computer Science at UAA in 2015. I originally pursued an Electrical Engineering degree at UAF; but, after taking a programming class, I found that I was better at and more passionate for programming.

I hold a 5th Dan Black Belt in Taekwondo. I also compete nationally and I am a USAT referee. I played house-level hockey as a member of the Mustang Hockey Association, playing defenseman. I also love to ski, hunt, and fish, and regularly go running and hiking.

Credits

This site was created with the Emacs editor. Blog posts were generated by Emacs Org Mode. The site is generated using GNU Parallel, GNU Make, Bash, Awk, Sed, libXSLT, and Graphviz; and is hosted on GitHub Pages.

Some of the icons used in the navigation bar are from the Noun Project and licensed under Creative Commons with Attribution.

The "Projects" icon is adapted form the Wikipedia page on Git. All other graphics and icons are original.

The site logo was created using HTML, CSS, and the Genoa Italic font.