Add some older blogposts
This commit is contained in:
parent
285a626e76
commit
57a5782463
|
@ -0,0 +1,111 @@
|
|||
Pursuit of a DSL
|
||||
================
|
||||
|
||||
A project we have been working on is [Tetra](http://github.com/Xe/Tetra). It is
|
||||
an extended services package in Go with Lua and Moonscript extensions. While
|
||||
writing Tetra, I have found out how to create a Domain Specific Language, and
|
||||
I would like to recommend Moonscript as a toolkit for creating DSL's.
|
||||
|
||||
[Moonscript](http://moonscript.org) is a high level wrapper around Lua designed
|
||||
to make programming easier. We have used Moonscript heavily in Tetra because of
|
||||
how easy it is to make very idiomatic code in it.
|
||||
|
||||
Here is some example code from the Tetra codebase for making a command:
|
||||
|
||||
```moonscript
|
||||
require "lib/elfs"
|
||||
|
||||
Command "NAMEGEN", ->
|
||||
"> #{elfs.GenName!\upper!}"
|
||||
```
|
||||
|
||||
That's it. That creates a command named `NAMEGEN` that uses `lib/elfs` to
|
||||
generate goofy heroku-like application names based on names from [Pokemon Vietnamese Crystal](http://tvtropes.org/pmwiki/pmwiki.php/JustForFun/PokemonVietnameseCrystal).
|
||||
|
||||
In fact, because this is so simple and elegant, you can document code like this
|
||||
inline.
|
||||
|
||||
## Command Tutorial
|
||||
|
||||
In this file we describe an example command `TEST`. `TEST` will return some
|
||||
information about the place the command is used as well as explain the
|
||||
arguments involved.
|
||||
|
||||
Because Tetra is a polyglot of Lua, Moonscript and Go, the relevant Go objects
|
||||
will have their type definitions linked to on [godoc](http://godoc.org)
|
||||
|
||||
Declaring commands is done with the `Command` macro. It takes in two arguments.
|
||||
|
||||
1. The command verb
|
||||
2. The command function
|
||||
|
||||
It also can take in 3 arguments if the command needs to be restricted to IRCops
|
||||
only.
|
||||
|
||||
1. The command verb
|
||||
2. `true`
|
||||
3. The command function
|
||||
|
||||
The command function can have up to 3 arguments set when it is called. These
|
||||
are:
|
||||
|
||||
1. The [Client](https://godoc.org/github.com/Xe/Tetra/bot#Client) that
|
||||
originated the command call.
|
||||
2. The [Destination](https://godoc.org/github.com/Xe/Tetra/bot#Targeter) or
|
||||
where the command was sent to. This will be a Client if the target is an
|
||||
internal client or
|
||||
a [Channel](https://godoc.org/github.com/Xe/Tetra/bot#Channel) if the target
|
||||
is a channel.
|
||||
3. The command arguments as a string array.
|
||||
|
||||
```moonscript
|
||||
Command "TEST", (source, destination, args) ->
|
||||
```
|
||||
|
||||
All scripts have `client` pointing to the pseudoclient that the script is
|
||||
spawned in. If the script name is `chatbot/8ball`, the value of `client` will
|
||||
point to the `chatbot` pseudoclient.
|
||||
|
||||
```moonscript
|
||||
client.Notice source, "Hello there!"
|
||||
```
|
||||
|
||||
This will send a `NOTICE` to the source of the command saying "Hello there!".
|
||||
|
||||
```moonscript
|
||||
client.Notice source, "You are #{source.Nick} sending this to #{destination.Target!} with #{#args} arguments"
|
||||
```
|
||||
|
||||
All command must return a string with a message to the user. This is a good
|
||||
place to do things like summarize the output of the command or if it worked or
|
||||
not. If the command is oper-only, this will be the message logged to the
|
||||
services snoop channel.
|
||||
|
||||
```moonscript
|
||||
"End of TEST output"
|
||||
```
|
||||
|
||||
See? That easy.
|
||||
|
||||
```moonscript
|
||||
Command "TEST", ->
|
||||
"Hello!"
|
||||
```
|
||||
|
||||
This is much better than Cod's
|
||||
|
||||
```python
|
||||
#All modules have a name and description
|
||||
NAME="Test module"
|
||||
DESC="Small example to help you get started"
|
||||
|
||||
def initModule(cod):
|
||||
cod.addBotCommand("TEST", testbotCommand)
|
||||
|
||||
def destroyModule(cod):
|
||||
cod.delBotCommand("TEST")
|
||||
|
||||
def testbotCommand(cod, line, splitline, source, destination):
|
||||
"A simple test command"
|
||||
return "Hello!"
|
||||
```
|
|
@ -0,0 +1,94 @@
|
|||
Thoughts on Community Management
|
||||
================================
|
||||
|
||||
Many open source community projects lack proper management. They can put too
|
||||
much of their resources in too few places. When that one person falls out of
|
||||
contact or goes rogue on everyone, it can have huge effects on everyone
|
||||
involved in the project. Users, Contributors and Admins.
|
||||
|
||||
Here, I propose an alternative management structure based on what works.
|
||||
|
||||
## Organization
|
||||
|
||||
Contributors and Project Administrators are there to take input/feedback from
|
||||
Users, rectify the situation or explain why doing so is counterproductive.
|
||||
Doing so will be done kindly and will be ran through at least another person
|
||||
before it is posted publicly. This includes (but is not limited to) email, IRC,
|
||||
forums, anything. A person involved in the project is a representative of it.
|
||||
They are the face of it. If they are rude it taints the image of everyone
|
||||
involved.
|
||||
|
||||
## Access
|
||||
|
||||
Project Administrators will have full, unfiltered access to anything the
|
||||
project has. This includes root access, billing access, everything. There will
|
||||
be no reason to hide things. Operational conversations will be shared. All
|
||||
group decisions will be voted on with a simple Yes/No/Abstain process. As such
|
||||
this team should be kept small.
|
||||
|
||||
## Contributions
|
||||
|
||||
Contributors will have to make pull requests, as will Administrators. There
|
||||
will be review on all changes made. No commits will be pushed to master by
|
||||
themselves unless there is approval. This will allow for the proper review and
|
||||
testing procedures to be done to all code contributed.
|
||||
|
||||
Additionally, for ease of scripts scraping the commits when something is
|
||||
released, a commit style should be enforced.
|
||||
|
||||
### Commit Style
|
||||
|
||||
The following section is borrowed from [Deis' commit
|
||||
guidelines](https://github.com/deis/deis/blob/master/CONTRIBUTING.md).
|
||||
|
||||
---
|
||||
|
||||
We follow a rough convention for commit messages borrowed from CoreOS, who borrowed theirs
|
||||
from AngularJS. This is an example of a commit:
|
||||
|
||||
feat(scripts/test-cluster): add a cluster test command
|
||||
|
||||
this uses tmux to setup a test cluster that you can easily kill and
|
||||
start for debugging.
|
||||
|
||||
To make it more formal, it looks something like this:
|
||||
|
||||
|
||||
{type}({scope}): {subject}
|
||||
<BLANK LINE>
|
||||
{body}
|
||||
<BLANK LINE>
|
||||
{footer}
|
||||
|
||||
The {scope} can be anything specifying place of the commit change.
|
||||
|
||||
The {subject} needs to use imperative, present tense: “change”, not “changed”
|
||||
nor “changes”. The first letter should not be capitalized, and there is no dot
|
||||
(.) at the end.
|
||||
|
||||
Just like the {subject}, the message {body} needs to be in the present tense,
|
||||
and includes the motivation for the change, as well as a contrast with the
|
||||
previous behavior. The first letter in a paragraph must be capitalized.
|
||||
|
||||
All breaking changes need to be mentioned in the {footer} with the description
|
||||
of the change, the justification behind the change and any migration notes
|
||||
required.
|
||||
|
||||
Any line of the commit message cannot be longer than 72 characters, with the
|
||||
subject line limited to 50 characters. This allows the message to be easier to
|
||||
read on github as well as in various git tools.
|
||||
|
||||
The allowed {types} are as follows:
|
||||
|
||||
feat -> feature
|
||||
fix -> bug fix
|
||||
docs -> documentation
|
||||
style -> formatting
|
||||
ref -> refactoring code
|
||||
test -> adding missing tests
|
||||
chore -> maintenance
|
||||
|
||||
---
|
||||
|
||||
I believe that these guidelines would lead towards a harmonious community.
|
||||
|
Loading…
Reference in New Issue