add blog post about tech stack
This commit is contained in:
parent
c457b44a73
commit
285a626e76
|
@ -0,0 +1,78 @@
|
|||
This Site's Tech Stack
|
||||
======================
|
||||
|
||||
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!
|
Loading…
Reference in New Issue