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.
- 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).
- 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 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 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
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
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.
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.
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.
- "Blog" icon by Ayub Irawan.
- "Resume" a composite of icons by Delwar Hossain and Gregor Cresnar.
- "Following" icon by Gregor Cresnar.
- "Main menu" icon by Weltenraser.
- "Chronological" icon by Kris Brauer.
- "Updated" icon by designvector.
- "Categories" icon by Ben Davis.
- "Threads" icon by BomSymbols.
- "Feed" icon by Alex Berkowitz.
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.