83 lines
2.7 KiB
Markdown
83 lines
2.7 KiB
Markdown
|
---
|
||
|
title: This Site's Tech Stack
|
||
|
date: 2015-02-14
|
||
|
---
|
||
|
|
||
|
> Note: this is out of date as this site now uses [PureScript](http://www.purescript.org/) and [Go](https://golang.org).
|
||
|
|
||
|
As some of my close friends can vouch, I am known for sometimes setting up and
|
||
|
using seemingly bizarre tech stacks for my personal sites. As such I thought it
|
||
|
would be interesting to go in and explain the stack I made for this one.
|
||
|
|
||
|
The Major Players
|
||
|
-----------------
|
||
|
|
||
|
### Markdown
|
||
|
|
||
|
This is a markdown file that gets rendered to HTML and sent to you via the lua
|
||
|
discount library. As I couldn't get the vanilla version from LuaRocks to work,
|
||
|
I use Debian's version.
|
||
|
|
||
|
I like Markdown for thigns like this as it is not only simple, but easy for
|
||
|
people to read, even if they don't know markdown or haven't worked with any
|
||
|
other document system than Office or other wisywig document processors.
|
||
|
|
||
|
### Lapis
|
||
|
|
||
|
Lapis is the middleware between Lua and Nginx that allows me to write pages
|
||
|
simply. Here is some of the code that powers this page:
|
||
|
|
||
|
```
|
||
|
-- controllers/blog.moon
|
||
|
class Blog extends lapis.Application
|
||
|
["blog.post": "/blog/:name"]: =>
|
||
|
@name = util.slugify @params.name
|
||
|
@doc = oleg.cache "blogposts", @name, ->
|
||
|
local data
|
||
|
with io.open "blog/#{@name}.markdown", "r"
|
||
|
data = \read "*a"
|
||
|
|
||
|
discount data, "toc", "nopants", "autolink"
|
||
|
|
||
|
with io.open "blog/#{@name}.markdown", "r"
|
||
|
@title = \read "*l"
|
||
|
|
||
|
render: true
|
||
|
```
|
||
|
|
||
|
And the view behind this page:
|
||
|
|
||
|
```
|
||
|
-- views/blog/post.moon
|
||
|
import Widget from require "lapis.html"
|
||
|
class Post extends Widget
|
||
|
content: =>
|
||
|
raw @doc
|
||
|
```
|
||
|
|
||
|
That's it. That even includes the extra overhead of caching the markdown as
|
||
|
HTML in a key->value store called OlegDB (I will get into more detail about it
|
||
|
below). With Lapis I can code faster and be much more expressive with a lot
|
||
|
less code. I get the syntactic beauty that is Moonscript with the speed and raw
|
||
|
power of luajit on top of nginx.
|
||
|
|
||
|
### OlegDB
|
||
|
|
||
|
OlegDB is a joke about mayonnaise that has gone too far. It has turned into
|
||
|
a full fledged key->value store and I think it is lovely.
|
||
|
|
||
|
### Container Abuse
|
||
|
|
||
|
I have OlegDB running as an in-container service. This means that OlegDB does
|
||
|
hold some state, but only for things that are worth maintaining the stats of
|
||
|
(in my eyes). Having a cache server right there that you can use to speed
|
||
|
things up with is a brilliant abuse of the fact that I run a container that
|
||
|
allows me to do that. I have Oleg hold the very HTML you are reading right now!
|
||
|
When it renders a markdown file for the first time it caches it into Oleg, and
|
||
|
then reuses that cached version when anyone after the first person reads the
|
||
|
page. I do the same thing in a lot of places in the codebase for this site.
|
||
|
|
||
|
---
|
||
|
|
||
|
I hope this look into my blog's tech stack was interesting!
|