meeting-minds.org 6.4 KB

Meeting of the Minds

COMMENT Export

  (save-buffer)
  (let ((org-confirm-babel-evaluate
         (lambda (lang body)
           (declare (ignorable lang body))
           nil)))
    (org-latex-export-to-pdf))

COMMENT Tangle

  (save-buffer)
  (let ((python-indent-offset 4))
    (org-babel-tangle))

Introduction   nonum

CLOSED: [2016-04-02 Sat 21:24]

As time has gone on, I've started seeing the "Slack" chat platform become more and more popular. I see this as both a good thing, in that it promotes communication within teams, and a bad thing, in that it's not controlled by the company that actually subscribes to it, and it isn't free software. Because of the benefit, and as a response to the issues, I've decided to build this application, "Meeting of the Minds", built on standards and free software so it's likely to stay around for a long time. Thus, the goal is to produce an application that gives the following features:

  • Archival

  • Group Messaging

  • Easily Defined Groups

  • User-to-user Messaging

  • Simple Management

  • Freedom

To accomplish this task, I've decided to build using the following tools and suites:

IRC

The Internet Relay Chat protocol. I've chosen this as the transport protocol as it's been around for quite some time, and is well supported.

PostgreSQL

An SQL storage backend. This will be a way to store metadata about conversations, topics, users and projects, allowing for data archival. I've chosen PostgreSQL as it has many advanced features and is very space efficient.

Common Lisp

The server implementation language. I've chosen to use Common Lisp to implement Meeting of the Minds for the following reasons:

  • Familiarity

  • Flexibility

  • Library availability

TOC   ignore

WORKING Architecture [0/3]

Protocol Design

Data Storage Requirements

Interaction Design

WORKING Database Design [0/5]

Users Table

Conversations Table

Topics Table

Archives Table

Decisions Table

Management Interface

Protocol Implementation

WORKING Packaging [1/2]

WORKING The packages file

This file describes and defines that packages, or namespaces used in the application. These include the following:

meeting-minds

The main package, this is used to tie all of the other packages together, and can be used to produce a callable daemon.

  (defpackage #:meeting-minds
    (:use #:cl))

The ASDF System Definition

CLOSED: [2016-04-02 Sat 21:57]

The definition of a system, or in Lisp terms, a set of connected and related software, either libraries or applications is what allows this to be put together and built. This is done using ASDF, or the "Another System Definition Facility".

This defines the system itself, #:meeting-minds, and it depends on the following other systems:

ningle

A smart, simple web framework for the management/browsing interface.

clack-errors

An error handling library for the clack/ningle framework.

clsql

An SQL interface library that works extremely well with PostgreSQL.

stefil

A testing framework

ironclad

Encryption and hashing.

cl-who

HTML Generation.

commonqt, qtools, & qtools-ui

A GUI library for the user interface.

daemon

A daemonization system for the server.

babel

Byte string manipulation.

uiop

A utilities collection.

cl-mustache

A templating framework based on the popular "Mustache" system.

birch

An IRC bot framework.

irc-logger

To provide IRC logging functionality.

  (asdf:defsystem #:meeting-minds
      :description "Describe meeting-minds here"
      :author "Samuel W. Flint <swflint@flintfam.org>"
      :license "GNU GPLv3 or Later"
      :depends-on (#:ningle
                   #:clack-errors
                   #:clsql
                   #:stefil
                   #:ironclad
                   #:cl-who
                   #:commonqt
                   #:qtools
                   #:qtools-ui
                   #:daemon
                   #:babel
                   #:uiop
                   #:cl-mustache
                   #:birch
                   #:irc-logger)
      :serial t
      :components ((:file "package")
                   (:file "meeting-minds")))