<!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="/writing/">writing</a></li>
		<li><a href="/blog/">blog</a></li>
		<li><a href="/photo/">photo</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="/eve/">eve</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="/gift/">gift</a></li>
		<li><a href="/gaming/">gaming</a></li>
		<li><a href="/mac/">mac</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/transliteration">
		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-12-24T13:55:00+00:00">
		<sup>1:55<abbr>pm</abbr> • 2012</sup>
		<abbr title="December">Dec</abbr> 24
	</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>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<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> v23 released: title lines in posts now self-link
</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/archive/master.zip" rel="external" type="application/zip">Download</a></li>
	<li><a href="https://github.com/Kroc/NoNonsenseForum/blob/master/HISTORY.txt" rel="external" type="text/plain">Change
	log</a></li>
	<li><a href="https://github.com/Kroc/NoNonsenseForum" rel="external">Source code</a> (GitHub)</li>
	<li><a href="/code/forums">Early history &amp; design goals</a></li>
	<li><a href="/worthing-digital">Watch a video about the design philosophy behind NoNonsense Forum</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>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>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>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" 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 === -->