Add blog
This commit is contained in:
parent
fa3142ca31
commit
a63f68504a
|
@ -3,3 +3,4 @@ FROM xena/lapis:1.7.7.2
|
||||||
ADD init/oleg /seed/oleg
|
ADD init/oleg /seed/oleg
|
||||||
RUN mv /seed/oleg/olegdb.conf /oleg/db.conf
|
RUN mv /seed/oleg/olegdb.conf /oleg/db.conf
|
||||||
ADD init/oleg/runit/ /etc/service
|
ADD init/oleg/runit/ /etc/service
|
||||||
|
ADD init/startup/ /etc/my_init.d
|
||||||
|
|
1
app.moon
1
app.moon
|
@ -8,6 +8,7 @@ class extends lapis.Application
|
||||||
@include "controllers.go"
|
@include "controllers.go"
|
||||||
@include "controllers.resume"
|
@include "controllers.resume"
|
||||||
@include "controllers.index"
|
@include "controllers.index"
|
||||||
|
@include "controllers.blog"
|
||||||
|
|
||||||
[contact: "/contact"]: =>
|
[contact: "/contact"]: =>
|
||||||
@title = "Contact"
|
@title = "Contact"
|
||||||
|
|
|
@ -0,0 +1,143 @@
|
||||||
|
Getting Started with Go
|
||||||
|
=======================
|
||||||
|
|
||||||
|
Go is an exciting language made by Google for systems programming. This article
|
||||||
|
will help you get up and running with the Go compiler tools.
|
||||||
|
|
||||||
|
System Setup
|
||||||
|
------------
|
||||||
|
|
||||||
|
First you need to install the compilers.
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ sudo apt-get install golang golang-go.tools
|
||||||
|
```
|
||||||
|
|
||||||
|
`golang-go.tools` contains some useful tools that aren't part of the standard
|
||||||
|
Go distribution.
|
||||||
|
|
||||||
|
Shell Setup
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Create a folder in your home directory for your Go code to live in. I use
|
||||||
|
`~/go`.
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ mkdir -p ~/go/{bin,pkg,src}
|
||||||
|
```
|
||||||
|
|
||||||
|
`bin` contains go binaries that are created from `go get` or `go install`.
|
||||||
|
`pkg` contains static (`.a`) compiled versions of go packages that are not go
|
||||||
|
programs. `src` contains go source code.
|
||||||
|
|
||||||
|
After you create this, add
|
||||||
|
[this](https://github.com/Xe/dotfiles/blob/master/.zsh/go-completion.zsh) and
|
||||||
|
the following to your zsh config:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
export GOPATH=$HOME/go
|
||||||
|
export PATH=$PATH:/usr/lib/go/bin:$GOPATH/bin
|
||||||
|
```
|
||||||
|
|
||||||
|
This will add the go compilers to your `$PATH` as well as programs you install.
|
||||||
|
|
||||||
|
Rehash your shell config (I use
|
||||||
|
a [`resource`](https://github.com/Xe/dotfiles/blob/master/.zsh/resource.zsh#L3)
|
||||||
|
command for this) and then run:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ go env
|
||||||
|
GOARCH="amd64"
|
||||||
|
GOBIN=""
|
||||||
|
GOCHAR="6"
|
||||||
|
GOEXE=""
|
||||||
|
GOHOSTARCH="amd64"
|
||||||
|
GOHOSTOS="linux"
|
||||||
|
GOOS="linux"
|
||||||
|
GOPATH="/home/xena/go"
|
||||||
|
GORACE=""
|
||||||
|
GOROOT="/usr/lib/go"
|
||||||
|
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
|
||||||
|
TERM="dumb"
|
||||||
|
CC="gcc"
|
||||||
|
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
|
||||||
|
CXX="g++"
|
||||||
|
CGO_ENABLED="1"
|
||||||
|
```
|
||||||
|
|
||||||
|
This will verify that the go toolchain knows where the go compilers are as well
|
||||||
|
as where your `$GOPATH` is.
|
||||||
|
|
||||||
|
Testing
|
||||||
|
-------
|
||||||
|
|
||||||
|
To test the go compilers with a simple
|
||||||
|
[todo command](http://github,com/mattn/todo), run this:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ go get github.com/mattn/todo
|
||||||
|
$ todo add foo
|
||||||
|
$ todo list
|
||||||
|
☐ 001: foo
|
||||||
|
```
|
||||||
|
|
||||||
|
Vim Setup
|
||||||
|
---------
|
||||||
|
|
||||||
|
For Vim integration, I suggest using the
|
||||||
|
[vim-go](https://github.com/fatih/vim-go) plugin. This plugin used to be part
|
||||||
|
of the standard Go distribution.
|
||||||
|
|
||||||
|
To install:
|
||||||
|
|
||||||
|
1. Add `Plugin 'fatih/vim-go'` to the plugins part of your vimrc.
|
||||||
|
2. Run these commands:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ vim +PluginInstall +qall
|
||||||
|
$ vim +GoInstallBinaries +qall
|
||||||
|
```
|
||||||
|
|
||||||
|
This will install the go oracle and the go autocompletion daemon gocode as well
|
||||||
|
as some other useful tools that will integrate seamlessly into vim. This will
|
||||||
|
also run `gofmt` on save to style your code to the standard way to write Go
|
||||||
|
code.
|
||||||
|
|
||||||
|
Resources
|
||||||
|
---------
|
||||||
|
|
||||||
|
[Effective Go](https://golang.org/doc/effective_go.html) and the
|
||||||
|
[language spec](https://golang.org/ref/spec) provide a nice overview of the
|
||||||
|
syntax.
|
||||||
|
|
||||||
|
The Go [blog](http://blog.golang.org) contains a lot of detailed articles
|
||||||
|
covering advanced and simple Go topics.
|
||||||
|
[This page](https://golang.org/doc/#articles) has a list of past articles that
|
||||||
|
you may find useful.
|
||||||
|
|
||||||
|
The Go standard library is a fantastic collection of Go code for solving many
|
||||||
|
problems. In some cases you can even write entire programs using only the
|
||||||
|
standard library. This includes things like web application support, tarfile
|
||||||
|
support, sql drivers, support for most kinds of commonly used crypto, command
|
||||||
|
line flag parsing, html templating, and regular expressions. A full list of
|
||||||
|
the standard library packages can be found [here](http://godoc.org/-/go).
|
||||||
|
|
||||||
|
Variable type declarations will look backwards. It takes a bit to get used to
|
||||||
|
but makes a lot of sense once you realize it reads better left to right.
|
||||||
|
|
||||||
|
For a nice primer on building web apps with Go, codegangsta is writing a book
|
||||||
|
on the common first steps, starting from the standard library and working up.
|
||||||
|
You can find his work in progress book
|
||||||
|
[here](http://codegangsta.gitbooks.io/building-web-apps-with-go/).
|
||||||
|
|
||||||
|
Go has support for unit testing baked into the core language tools. You can
|
||||||
|
find information about writing unit tests [here](http://golang.org/pkg/testing/).
|
||||||
|
|
||||||
|
When creating a new go project, please resist the urge to make the folder in your
|
||||||
|
normal code folder. Drink the `$GOPATH` koolaid. Yes it's annoying, yes it's the
|
||||||
|
language forcing you to use its standard. Just try it. It's an amazingly useful
|
||||||
|
thing once you get used to it.
|
||||||
|
|
||||||
|
Learn to love godoc. Godoc lets you document code like
|
||||||
|
[this](https://gist.github.com/Xe/b973e30d81280899955d). This also includes an
|
||||||
|
example of the builtin unit testing support.
|
|
@ -0,0 +1,31 @@
|
||||||
|
discount = require "discount"
|
||||||
|
lapis = require "lapis"
|
||||||
|
file = require "pl.file"
|
||||||
|
http = require "lapis.nginx.http"
|
||||||
|
oleg = require "lib/oleg"
|
||||||
|
util = require "lapis.util"
|
||||||
|
dir = require "pl.dir"
|
||||||
|
|
||||||
|
import render_html from require "lapis.html"
|
||||||
|
split = require "util"
|
||||||
|
|
||||||
|
class Blog extends lapis.Application
|
||||||
|
["blog.index": "/blog"]: =>
|
||||||
|
@doc = oleg.cache "caches", "blog-index", ->
|
||||||
|
local data
|
||||||
|
with io.open "static/markdown/blog.html", "r"
|
||||||
|
data = \read "*a"
|
||||||
|
data
|
||||||
|
|
||||||
|
render: true
|
||||||
|
|
||||||
|
["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"
|
||||||
|
|
||||||
|
render: true
|
|
@ -0,0 +1,18 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
cd /app/src/blog
|
||||||
|
|
||||||
|
IFS='
|
||||||
|
'
|
||||||
|
|
||||||
|
for file in *
|
||||||
|
do
|
||||||
|
title=$(head -n1 $file)
|
||||||
|
line=$(head -n4 $file | tail -n1)
|
||||||
|
linkname=$(echo $file | awk -F "." '{print $1}')
|
||||||
|
|
||||||
|
echo '<div class="post"><h2>'"$title"'</h2><p>'"$line"'...</p><a href="/blog/'"$linkname"'">Read More</a></div>' >> /app/src/static/markdown/blog.html
|
||||||
|
echo "generated info for $file"
|
||||||
|
done
|
|
@ -0,0 +1,5 @@
|
||||||
|
split = (s, delimiter) ->
|
||||||
|
result = {}
|
||||||
|
for match in (s..delimiter)\gmatch "(.-)"..delimiter
|
||||||
|
table.insert result, match
|
||||||
|
result
|
|
@ -0,0 +1,5 @@
|
||||||
|
import Widget from require "lapis.html"
|
||||||
|
|
||||||
|
class UserInfo extends Widget
|
||||||
|
content: =>
|
||||||
|
raw @doc
|
Loading…
Reference in New Issue