<!DOCTYPE html>
<!-- ========================================== kroc camen of camen design ============================================= -->
<title>code · NoNonsense Forum</title>
<link rel="stylesheet" type="text/css" href="/design/design.css" />
<meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=no" />
<link rel="alternate" type="application/rss+xml" href="/code/rss" title="Just code" />
<link rel="canonical" href="/code/nononsense_forum" />
<!-- =================================================================================================================== -->
<header>
<h1><a href="/" rel="index">
Camen Design
</a></h1>
<nav><ul>
<li><a href="/">all</a></li>
<li><a href="/projects">projects</a></li>
<li><a href="http://forum.camendesign.com">forum</a></li>
</ul><ul>
<li><a href="/quote/">quote</a></li>
<li><a href="/blog/">blog</a></li>
<li><a href="/photo/">photo</a></li>
<li><a href="/writing/">writing</a></li>
<li><a href="/code/" rel="tag">code</a></li>
<li><a href="/art/">art</a></li>
<li><a href="/link/">link</a></li>
<li><a href="/poem/">poem</a></li>
<li><a href="/audio/">audio</a></li>
</ul><ul>
<li><a href="/web-dev/">web-dev</a></li>
<li><a href="/annoyances/">annoyances</a></li>
<li><a href="/code-is-art/">code-is-art</a></li>
<li><a href="/inspiration/">inspiration</a></li>
<li><a href="/windows/">windows</a></li>
<li><a href="/gaming/">gaming</a></li>
<li><a href="/mac/">mac</a></li>
<li><a href="/gift/">gift</a></li>
<li><a href="/osnews/">osnews</a></li>
<li><a href="/c64/">c64</a></li>
<li><a href="/linux/">linux</a></li>
</ul>
<a rel="previous" href="/code/splitscreen">
older article →
</a><a rel="next" href="/code/dom_templating">
← newer article
</a></nav>
</header>
<!-- =================================================================================================================== -->
<article><header>
<!-- date published or updated -->
<time pubdate datetime="2012-01-31T08:51:00+00:00">
<sup>8:51<abbr>am</abbr> • 2012</sup>
<abbr title="January">Jan</abbr> 31
</time>
<!-- categories -->
<ul>
<li><a href="/code/nononsense_forum" rel="bookmark tag">code</a></li>
<li><a href="/code-is-art/nononsense_forum">code-is-art</a></li>
<li><a href="/web-dev/nononsense_forum">web-dev</a></li>
</ul>
<!-- licence -->
<small>
<a rel="license" href="http://creativecommons.org/licenses/by/3.0/deed.en_GB">c</a>
share + remix
</small>
</header>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<p>
<strong>Note:</strong> Are you using NoNonsense Forum? I’d really like to hear from you about how to improve it
and make things easier for you! Contact me <a href="mailto:kroc@camendesign.com">by e-mail</a> or post on
<a href="http://forum.camendesign.com" rel="external">the forums</a>.
</p>
<section>
<h1>NoNonsense Forum</h1>
<ol>
<li><a href="#features">Features</a></li>
<li><a href="#limits">Limitations</a></li>
<li><a href="#help">Help Out</a></li>
</ol>
<aside>
<strong>Update:</strong> v16 released: Opera Speed Dial support
</aside>
<p>
<strong>NoNonsense Forum is a free, open source, PHP-based simple discussion forum.</strong> It favours removing
barriers to conversation rather than massaging egos.
</p><p>
It is ideal if you want a discussion platform you can throw up in seconds, is quick and easy to administer, simple
to use and works great as a private forum for a team working together.
</p>
<ul>
<li><a href="http://forum.camendesign.com" rel="external">See it in action</a></li>
<li><a href="https://github.com/Kroc/NoNonsenseForum/archives/master" rel="external">Download</a></li>
<li><a href="https://github.com/Kroc/NoNonsenseForum" rel="external">Source code</a> (GitHub)</li>
<li><a href="/code/forums">History & design goals</a></li>
</ul>
<h2 id="features">Features</h2>
<dl>
<dt>No Database</dt>
<dd>
All data is just RSS. Starting a new thread creates a new RSS feed. Replying adds an item to the feed.
</dd>
<dt>No hoops to jump through</dt>
<dd>
<p>
I just want to talk, I don’t want to go through registration and e-mail confirmation and logging
in each time.
</p><p>
NoNonsense Forum asks you for a name and password when you post. This name and password forms a
unique token, protecting the name from other people using it. Every time you want to post, just
use the same name and password to keep the same name.
</p>
<figure>
<a href="/code/nononsense_forum/add.png" type="image/png">
<img src="/code/nononsense_forum/add.jpg" alt="Add new thread input form in NoNonsense Forum" width="600" height="387" />
</a>
<figcaption>Add new thread input form — user name and password act as a unique token</figcaption>
</figure>
<p>
This is not the same as registration because you can have as many different names as you want, you
don’t have to pre-register a name and password, and you don’t have to go through e-mail
confirmation and a login screen before you can do anything.
</p><p>
If your web browser remembers your name and password and fills it in for you, then all you do is
type your message and submit. Nothing gets in your way.
</p>
</dd>
<dt>Mods and Rockers</dt>
<dd>
<p>
There is no “edit” ability. Instead users can append to their existing posts. This allows them
to note any corrections without the potential of changing facts, post-facto.
</p>
<figure>
<a href="/code/nononsense_forum/append.png" type="image/png">
<img src="/code/nononsense_forum/append.jpg" alt="Append" width="600" height="149" />
</a>
</figure>
<p>
Appending and deleting is done by clicking the relevant button on the post and providing the same
name and password as was used to create that post.
</p>
<img src="/code/nononsense_forum/delete.png" alt="Delete button" width="260" height="41" />
<p>
Despite no database, the forum does have the capability for moderators. Add names to a
‘mods.txt’ and they will be given the ability to append / delete any post or thread.
Moderators can be set a global level, or only within sub-forums by creating a ‘mods.txt’ in
sub-forums. (A sub-forum is just a folder)
</p>
<img src="/code/nononsense_forum/mods.png" alt="List of moderators" width="400" height="60" />
<p>
A sign-in is provided for moderators (via HTTP auth), they will have to suffer the woes of
logging-in <samp>:)</samp>
</p>
</dd>
<dt>Minimal Markup</dt>
<dd>
<p>
I wouldn’t have written NoNonsense Forum if I believed that other forum software was doing it
right, so likewise I did not opt for normal
<a href="http://en.wikipedia.org/wiki/BBCode" rel="external">bbcode</a>. There is no preview
function, and I believe that having one just adds hurdles to people posting. What comes out should
be exactly what you expect. There should be no black-box that you fear will screw up your text in
ways you don’t understand.
</p><p>
Want to insert a blockquote? There’s no quote button, just copy and paste and wrap in speech
marks.
</p>
<pre>"How now brown cow?"
Who knew pink moo?</pre>
<p>
Gives:
</p>
<figure>
<a href="code/nononsense_forum/quote.png" type="image/png">
<img src="/code/nononsense_forum/quote.jpg" alt="Screenshot of styled blockquote" width="600" height="105" />
</a>
</figure>
<p>
What’s more, the output blockquote includes quotes so that if you copy and paste this, the quote
is maintained. Even when nested.
</p><p>
Pre-formatted text / monospace / source-code is also supported in simple fashion:
</p>
<pre>% CSS
pre {overflow: auto; margin: 20px 0 0;}
pre, code {font: 12.5px/20px Monaco, Consolas, monospace, monospace;}
%</pre>
<p>
You can write anything after the first percent sign, it’s useful as a title or specifying the
programming language.
</p>
<figure>
<a href="code/nononsense_forum/code.png" type="image/png">
<img src="/code/nononsense_forum/code.jpg" alt="Screenshot of styled code block" width="600" height="149" />
</a>
</figure>
<p>
Again, this just copy + pastes back into the text area and will output the same thing.
</p>
</dd>
<dt>Access control</dt>
<dd>
<p>
You can set a forum or its sub-forums to be locked according to two different policies:
</p>
<dl>
<dt>Threads:</dt>
<dd>
Only moderators or members can start new threads, but anybody can reply. This could be
used as, for example, a kind of blog / news system where by only site staff can post the
news, but the public can comment on it.
</dd>
<dt>Posts:</dt>
<dd>
A read-only forum. Only moderators or members can start threads and replies, the public
can read only. This would be typical of an archive or announcements sub-forum.
</dd>
</dl>
<figure>
<a href="/code/nononsense_forum/locks.png" type="image/png">
<img src="/code/nononsense_forum/locks.jpg" alt="Screenshot of different types of sub-forums" width="600" height="169" />
</a>
</figure>
<p>
Just create a ‘locked.txt’ in the forum / sub-forum with the desired mode
“<samp>threads</samp>”, “<samp>posts</samp>” or “<samp>private</samp>” written
within.
</p><p>
Create a “members.txt” file with the names of users you want to be able to post / access the
locked forum. Moderators (“mods.txt”) will always be able to post in any locked forum as well
as use usual moderator capabilities.
</p>
</dd>
<dt>Wide Browser Support</dt>
<dd>
<p>
There shouldn’t be unnecessary hurdles added by browsers. NoNonsense Forum works out of the box
on:
</p>
<ul>
<li>IE6, 7, 8, 9+</li>
<li>Firefox 3+</li>
<li>Chrome, Safari</li>
<li>Opera 9+</li>
<li>Text-based browsers</li>
</ul>
<p>
And is mobile-optimised too!
</p>
<img src="/code/nononsense_forum/iphone_thumb.png" alt="Screenshot of NoNonsense Forum on an iPhone" width="600" height="319" />
<p>
Now with Opera Speed Dial support:
</p>
<img src="/code/nononsense_forum/opera_thumb.png" alt="Screenshot of Opera Speed Dial page showing off NoNonsense Forum integration" width="600" height="488" />
<p>
How many forums do you know do this?—Instantly see if there’s new posts / replies each time
you open your browser!
</p>
</dd>
<dt>Customisable, Hackable</dt>
<dd>
<p>
NoNonsense Forum provides many routes for customisation, like a basic config file for preferences,
an ‘about.html’ file to add a description / extra HTML to each forum (without having to modify
the template), a custom CSS file and <a href="/dom_templating">templates that are 100% HTML</a>
so that you don’t have to know PHP or learn a <samp>{{special syntax}}</samp> to modify the
look of your forum.
</p><p>
The <a href="https://github.com/Kroc/NoNonsenseForum" rel="external">PHP source code</a> is
heavily commented and explained and free for you to learn from, modify and share.
</p>
</dd>
</dl>
<h2 id="limits">Limitations</h2>
<dl>
<dt>Scale</dt>
<dd>
<p>
NoNonsense Forum does not scale well. It is not trying to solve that problem. It is designed so
that you can throw up a forum in seconds and have something working with no configuration and
nothing to manage. If your forum grows beyond practical limits, switch to a more complete forum
package like <a href="http://phpbb.com" rel="external">phpBB</a>.
</p><p>
You might want to run a NoNonsense Forum on a private server or intranet, where scale won’t
matter and NNF will be far less hassle than other softwares.
</p>
</dd>
<dt>Abuse</dt>
<dd>
<p>
I don’t believe that regular users should be treated the same as spammers, trolls and
trouble-makers. This is why there is no <abbr>CAPTCHA</abbr>. No other forum software seems to
have learnt that spam bots and regular users are not on the same level and don’t need the same
“solutions”. Forums have registration, e-mail confirmation, <abbr>CAPTCHA</abbr>s and all
sorts of hurdles and <strong>still</strong> get spammed.
</p><p>
My forum has none of these hurdles and doesn’t get bot-spammed <!-- ;) --> (not one for over a
year). For the moment it is safe simply because it is unique and different and I’ve used some
fresh tricks to confuse spam-bots. In the future they might catch up and I’ll have to adapt, but
I won’t add more hurdles for users.
</p><p>
However, regardless of spam bots, because there is no ‘username = e-mail’ login, there’s
nothing preventing one person using a different name every time and spamming the forum with posts.
That is not a software problem, it’s an administration problem and you should ban the user’s
IP using your server software / config panel / htaccess.
</p><p>
You could always use the access controls to protect the forum, or disable new users once you have
the users you want. NoNonsense Forum is ideal in situations where you need a quick to throw-up,
easy to administer private forum, rather than a large scale public forum with thousands of users
(though I think it could technically handle it)
</p><p>
Again, should NNF no longer solve your problems it’s time to upgrade to a big software package
with all the bells and whistles.
</p>
</dd>
</dl>
<h2 id="help">Help Out</h2>
<p>
Please try it out.
</p><p>
You should read the <a href="/forums#goals">goals of the project</a> to get an idea of what sort of features suits
the flavour of NoNonsense Forum and what will simply be impossible given the design!
</p><p>
The most effective way to “get things done” is to
<a href="https://github.com/Kroc/NoNonsenseForum/issues" rel="external">add an issue on GitHub</a>, you can also
discuss NoNonsense Forum
on—obviously—<a href="http://forum.camendesign.com/NoNonsense%20Forum%20-%20Bugs%2C%20Requests%2C%20Feedback/" rel="external">the
forum</a>.
</p>
</section>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
</article>
<footer>
<nav><a href="http://forum.camendesign.com">‹ Discuss this in the Forum ›</a></nav>
<a href="mailto:kroc@camendesign.com">kroc@camendesign.com</a>
<nav>view-source:
<a href="/code/nononsense_forum.rem">Rem</a> •
<a href="/code/nononsense_forum.html">HTML</a> •
<a href="/design/">CSS</a> •
<a href="/.system/">PHP</a> •
<a href="/.htaccess">.htaccess</a>
</nav>
<form method="get" action="https://duckduckgo.com">
<input type="hidden" name="sites" value="camendesign.com" />
<input type="search" name="q" placeholder="search…" />
<input type="submit" value="Go" />
</form>
</footer>
<!-- =================================================================================================== code is art === -->