<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.soylentnews.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=The+Mighty+Buzzard</id>
	<title>SoylentNews - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.soylentnews.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=The+Mighty+Buzzard"/>
	<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/wiki/Special:Contributions/The_Mighty_Buzzard"/>
	<updated>2026-06-02T09:30:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.4</generator>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=EmergencyProcedures&amp;diff=29508</id>
		<title>EmergencyProcedures</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=EmergencyProcedures&amp;diff=29508"/>
		<updated>2019-01-10T16:11:55Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* If memcached is not running */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[SystemAdministration]] - parent&lt;br /&gt;
&lt;br /&gt;
==Why This is Here==&lt;br /&gt;
&lt;br /&gt;
In ALL emergency situations, the most qualified person to fix them should be sought out. These instructions are here to cover the hopefully VERY RARE case where that is not possible.&lt;br /&gt;
&lt;br /&gt;
They are deliberately written at a very basic level, probably more basic than anyone with access to the servers would actually need. Howver, it is still useful to have a sort of checklist. The times when services are down tend to be stressful, and humans sometimes do not operate at their best when stressed. Plus, who knows? Maybe someday someone will have to walk the janitor through this...&lt;br /&gt;
&lt;br /&gt;
==What you need to do anything useful==&lt;br /&gt;
&lt;br /&gt;
You need ssh access to the machines affected, with the ability to get root privileges. Without this, there is no way to do anything useful to fix any problem with the system&lt;br /&gt;
&lt;br /&gt;
You must ssh to the appropriate machine, typically to a user account, and then sudo su - to root.&lt;br /&gt;
&lt;br /&gt;
(This ability must be obtained in advance, such information cannot for obvious reasons be placed on a public wiki)&lt;br /&gt;
&lt;br /&gt;
==Slash basic description==&lt;br /&gt;
&lt;br /&gt;
The slash system consists of three separate components:&lt;br /&gt;
&lt;br /&gt;
* A Mysql database server - The database engine which holds most of the data such as articles, users, etc.&lt;br /&gt;
* The Apache web server - which handles the web interface&lt;br /&gt;
* The slashd daemon, which acts as a timed batch processor for various slash events and tasks.&lt;br /&gt;
&lt;br /&gt;
In addition on the main server, an http caching program called varnish is running, which also must be functional, and running, and a cache program for the database, &amp;lt;strike&amp;gt;memcached&amp;lt;/strike&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Varnish - an http cache.&lt;br /&gt;
* memcached - A database cache &lt;br /&gt;
&lt;br /&gt;
For slash to work, all three components must be running, plus varnish &amp;lt;strike&amp;gt;and memcached&amp;lt;/strike&amp;gt; if they are in use.&lt;br /&gt;
&lt;br /&gt;
To tell if they are running, use the command 'pstree' which will show, in condensed form, the tasks that are running.&lt;br /&gt;
&lt;br /&gt;
Here is what the result of the pstree command looks like on the main server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# pstree&lt;br /&gt;
init─┬─atd&lt;br /&gt;
     ├─cron&lt;br /&gt;
     ├─dbus-daemon&lt;br /&gt;
     ├─httpd─┬─10*[httpd]&lt;br /&gt;
     │       └─sh&lt;br /&gt;
     ├─landscape-clien─┬─landscape-broke───2*[{landscape-broke}]&lt;br /&gt;
     │                 ├─landscape-manag&lt;br /&gt;
     │                 └─landscape-monit&lt;br /&gt;
     ├─linode-longview&lt;br /&gt;
     ├─login───bash&lt;br /&gt;
     ├─master─┬─pickup&lt;br /&gt;
     │        ├─qmgr&lt;br /&gt;
     │        └─tlsmgr&lt;br /&gt;
     ├─memcached───5*[{memcached}]&lt;br /&gt;
     ├─nginx───4*[nginx]&lt;br /&gt;
     ├─ntpd&lt;br /&gt;
     ├─rsyslogd───3*[{rsyslogd}]&lt;br /&gt;
     ├─slapd───4*[{slapd}]&lt;br /&gt;
     ├─sshd───sshd───sshd───bash───sudo───su───bash───pstree&lt;br /&gt;
     ├─sudo───slashd───3*[slashd]&lt;br /&gt;
     ├─udevd───2*[udevd]&lt;br /&gt;
     ├─upstart-socket-&lt;br /&gt;
     ├─upstart-udev-br&lt;br /&gt;
     └─varnishd───varnishd───20*[{varnishd}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you get 'garbage' as the output of the pstree command, use this form instead:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[root@slashcode init.d]# pstree -A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can see that apache is running, it shows up as httpd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     ├─httpd───10*[httpd]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And we can see that slashd is running:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     |-sudo---slashd---3*[slashd]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one is ever so slightly easy to miss, because it is running as a child of the sudo command, so is not first on the list.&lt;br /&gt;
&lt;br /&gt;
On the main server, Varnish must also be running:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
|─varnishd───varnishd───20*[{varnishd}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;As well as memcached:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     ├─memcached───5*[{memcached}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On the database machine for the main site, we would see that mysql is running, &lt;br /&gt;
it shows up like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     ├─mysqld_safe───mysqld───37*[{mysqld}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The exact numbers (10*[httpd] etc) are not important.&lt;br /&gt;
&lt;br /&gt;
This is what a properly running system should look like, on the main site. The database is on one machine, which must have mysql running, and and the other machine must have apache (httpd) running, varnish running, &amp;lt;strike&amp;gt;memcached running&amp;lt;/strike&amp;gt;, and slashd running.&lt;br /&gt;
&lt;br /&gt;
'''Important note - at the present time, you cannot fix either system by a reboot. Apache MUST be started by hand'''&lt;br /&gt;
&lt;br /&gt;
==Primary site down==&lt;br /&gt;
&lt;br /&gt;
Log in to main slash machine, obtain root.&lt;br /&gt;
&lt;br /&gt;
Check process list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@soylent-www:/etc/varnish# pstree -A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see these in process list, among other unrelated processes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
├─httpd───10*[httpd]&lt;br /&gt;
&lt;br /&gt;
|-su---slashd---2*[slashd]&lt;br /&gt;
&lt;br /&gt;
|─varnishd───varnishd───20*[{varnishd}]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure that slashd, apache, and varnish are running, as described above.&lt;br /&gt;
&lt;br /&gt;
===If only varnishd is not running:===&lt;br /&gt;
&lt;br /&gt;
Restart varnish:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/init.d/varnish start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check that is actually running after a few seconds by looking at the task list again. (pstree)&lt;br /&gt;
&lt;br /&gt;
If varnish will not restart, you will likely need to get help from someone familiar with its configuration.&lt;br /&gt;
&lt;br /&gt;
===If only Apache is not running:===&lt;br /&gt;
Start apache:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /srv/soylentnews.org/apache/bin/apachectl start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Confirm it is running after a few seconds by looking at the process list again. (pstree)&lt;br /&gt;
&lt;br /&gt;
If you get an error message about apache being unable to connect to the database, you will need to ssh into the database machine and restart the database, then come back and restart apache. '''Apache cannot start unless it can make a database connection.'''&lt;br /&gt;
&lt;br /&gt;
=== If only slashd is not running ===&lt;br /&gt;
&lt;br /&gt;
Slashd cannot start unless Apache is running. &lt;br /&gt;
&lt;br /&gt;
To start slashd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/init.d/slash start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Confirm it is running after a few seconds by looking at the process list again. (pstree)&lt;br /&gt;
&lt;br /&gt;
Note the command above ends in slash, not slashd. Slash is the name of the script, it starts the daemon known as slashd.&lt;br /&gt;
&lt;br /&gt;
If slashd will not start, make sure apache and the database are running.&lt;br /&gt;
&lt;br /&gt;
You may see some errors when starting slashd, at the present time this is 'normal'. Provided it starts, and seems to operate correctly, there is little that can be done about this until some code fixes are done.&lt;br /&gt;
&lt;br /&gt;
=== If memcached is not running ===&lt;br /&gt;
=== memcached is not currently used. ignore this section ===&lt;br /&gt;
&lt;br /&gt;
Restart it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/init.d/memcached start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Confirm it is running after a few seconds by looking at the process list again. (pstree)&lt;br /&gt;
&lt;br /&gt;
=== If the database server is not running ===&lt;br /&gt;
&lt;br /&gt;
You will need to ssh to the database machine.&lt;br /&gt;
&lt;br /&gt;
start mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/rc.d/init.d/mysqld start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Confirm it is running after a few seconds by looking at the process list again. (pstree)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
├─mysqld_safe───mysqld───37*[{mysqld}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it will not start, you will need additional help.&lt;br /&gt;
&lt;br /&gt;
You -may- need to restart Apache after restarting the db. &lt;br /&gt;
&lt;br /&gt;
on the main machine:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /srv/soylentnews.org/apache/bin/apachectl stop&lt;br /&gt;
 wait about ten seconds or check the tasklist that apache is fully stopped&lt;br /&gt;
# /srv/soylentnews.org/apache/bin/apachectl start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== None of the above fixes work, or multiple problems ===&lt;br /&gt;
&lt;br /&gt;
In this case it may be worth a try to bring all slash related processes down, and do a cold restart, in the proper order.&lt;br /&gt;
&lt;br /&gt;
Processes are usually stopped in the reverse order they start, so to bring everything down:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/init.d/slash stop&lt;br /&gt;
# /srv/soylentnews.org/apache/bin/apachectl stop&lt;br /&gt;
# /etc/init.d/varnish stop&lt;br /&gt;
# /etc/init.d/memcached stop&lt;br /&gt;
# /etc/init.d/mysqld stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then to bring them all back up:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/init.d/mysqld start&lt;br /&gt;
# /etc/init.d/memcached start&lt;br /&gt;
# /etc/init.d/varnish start&lt;br /&gt;
# /srv/soylentnews.org/apache/bin/apachectl start&lt;br /&gt;
# /etc/init.d/slash start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If none of this works, you will need help from the assigned sysadmin for the machine.&lt;br /&gt;
&lt;br /&gt;
==Slashcott Development site down==&lt;br /&gt;
&lt;br /&gt;
There are just two differences in this machine and the main site:&lt;br /&gt;
&lt;br /&gt;
* Things are in different locations&lt;br /&gt;
* The mysql database server is on the same machine as the site&lt;br /&gt;
&lt;br /&gt;
This is a non-critical machine, so I am just going to list the commands for reference.&lt;br /&gt;
&lt;br /&gt;
Stop Services:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/rc.d/init.d/slash stop&lt;br /&gt;
# /usr/local/apache/bin/apachectl stop&lt;br /&gt;
# /etc/rc.d/init.d/mysqld stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then to bring them all back up:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/rc.d/init.d/mysqld start&lt;br /&gt;
# /usr/local/apache/bin/apachectl start&lt;br /&gt;
# /etc/rc.d/init.d/slash start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:System administration]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Editors&amp;diff=15704</id>
		<title>Editors</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Editors&amp;diff=15704"/>
		<updated>2017-05-24T09:08:41Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* Who we are */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The editorial team is responsible for checking and revising (if required) user submitted stories. Prospective editors should be prepared to devote a significant amount of time to checking stories, have a good grasp of the English language, and be familiar with slash's formatting options. Contact: '''editors@soylentnews.org''', or join #editorial in [[SoylentNews:IRC |irc]].&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoweare /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[Editors|Editors Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| janrinok&lt;br /&gt;
| editor&lt;br /&gt;
| UTC+1 (CET)&lt;br /&gt;
|-&lt;br /&gt;
| mrcoolbp&lt;br /&gt;
| editor&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| n1&lt;br /&gt;
| editor&lt;br /&gt;
| UTC&lt;br /&gt;
|-&lt;br /&gt;
| martyb&lt;br /&gt;
| editor&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| CoolHand&lt;br /&gt;
| editor&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| NotSanguine&lt;br /&gt;
| editor&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| Cmn32480&lt;br /&gt;
| editor&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| takyon&lt;br /&gt;
| editor&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| charon&lt;br /&gt;
| editor&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| Fnord666&lt;br /&gt;
| editor&lt;br /&gt;
| UTC-5 (CST/CDT)&lt;br /&gt;
|-&lt;br /&gt;
| Snow&lt;br /&gt;
| editor&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| mrpg&lt;br /&gt;
| editor&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| GreatOutdoors&lt;br /&gt;
| editor&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| Xyem&lt;br /&gt;
| editor&lt;br /&gt;
| GMT&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoweare /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Retired Members==&lt;br /&gt;
Former editors that have lost their roles due to inactivity or retirement&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[Editors|Retired members]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| Subsentient&lt;br /&gt;
| editor&lt;br /&gt;
| UTC-7 (MST)&lt;br /&gt;
|-&lt;br /&gt;
| LaminatorX&lt;br /&gt;
| Team Leader&lt;br /&gt;
| UTC-5 (CST/CDT)&lt;br /&gt;
|-&lt;br /&gt;
| Dopefish&lt;br /&gt;
| editor&lt;br /&gt;
| UTC-8 (PST)&lt;br /&gt;
|-&lt;br /&gt;
| mattie_p&lt;br /&gt;
| editor&lt;br /&gt;
| UTC-7 (MST)&lt;br /&gt;
|-&lt;br /&gt;
| zizban&lt;br /&gt;
| editor&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| Azrael&lt;br /&gt;
| editor&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| Woods&lt;br /&gt;
| editor&lt;br /&gt;
| UTC-5 (CST/CDT)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Projects==&lt;br /&gt;
&lt;br /&gt;
*Continue to develop editorial process (see Documentation below)&lt;br /&gt;
*Maintain static pages (FAQ.shtml, about.shtml, and moderation.shtml)&lt;br /&gt;
&lt;br /&gt;
==Documentation==&lt;br /&gt;
&amp;lt;section begin=documentation /&amp;gt;&lt;br /&gt;
*A [[Story_Style|Story Style]] document outlines editorial guidelines, it may need additional refining and ratification eventually.&lt;br /&gt;
* [[Editing_Process|The Editing Process]] - builds on the Story Style and Submission Guidelines to describe &amp;lt;b&amp;gt;how&amp;lt;/b&amp;gt; the editing process is carried out.&lt;br /&gt;
* [[Submission_guidelines|Submission Guidelines]] - Notes to all users regarding the formatting of submissions and relevant rules.&lt;br /&gt;
* [[Editorial_Policy|Editorial Policy]] - Policy Statement of the Editorial Team&lt;br /&gt;
* [[EditorialHTML|Editorial HTML]] - HTML useful in Story Editing&lt;br /&gt;
&amp;lt;section end=documentation /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*Main Website (slash)&lt;br /&gt;
**[[EditorPrivileges|editor privileges]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:Editorial team]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Development&amp;diff=15703</id>
		<title>Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Development&amp;diff=15703"/>
		<updated>2017-05-24T09:04:26Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* Who we are */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TeamPages]] - parent, [[SystemAdministration]]&lt;br /&gt;
&lt;br /&gt;
==Welcome==&lt;br /&gt;
We are currently looking for volunteers to help develop SoylentNews slashcode.  Anyone willing is free to help, but '''we really need good perl devs'''.  Slashcode is based heavily on perl and most pages have some type of perl code on them.  We also seek non-perl devs, there is plenty of stuff that you can do without touching the code too much.&lt;br /&gt;
&lt;br /&gt;
Our code is hosted on GitHub at https://github.com/SoylentNews/slashcode. Have a look and see how you can contribute.  Bugs are now on [https://github.com/SoylentNews/slashcode/issues GitHub Bugs].&lt;br /&gt;
&lt;br /&gt;
Volunteers should send an email to [mailto:dev@soylentnews.org dev@soylentnews.org] expressing your areas of interest and what your coding strengths are.  Also you can hop onto [[SoylentNews:IRC]] and join the #dev channel.  Come by and express your interest to paulej72, audioguy, or [[User:mrcoolbp|mrcoolbp]].  &lt;br /&gt;
&lt;br /&gt;
Currently we are undergoing a bit of a reorganization and we hope to have more information available here soon about our short term and long term goals for the code.&lt;br /&gt;
&lt;br /&gt;
== Who we are ==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[Development|Dev Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| paulej72&amp;lt;ref name=&amp;quot;paulej72_notes&amp;quot;&amp;gt;Working on template and css issues on the site, main bug herder. - email:[mailto:paulej72@soylentnews.org paulej72@soylentnews.org] [[Paulej72WorkNotes]]&amp;lt;/ref&amp;gt;&lt;br /&gt;
| Team Leader for Dev&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| Ncommander&lt;br /&gt;
| Currently on concentrating on admin-ish stuff.&lt;br /&gt;
| UTC-5&lt;br /&gt;
|-&lt;br /&gt;
| martyb/bytram&lt;br /&gt;
| primary bug herder, Database (in training)&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| The Mighty Buzzard&lt;br /&gt;
| Code Monkey Extraordinaire&lt;br /&gt;
| UTC-6 (CST/CDT)&lt;br /&gt;
|-&lt;br /&gt;
| Xyem&lt;br /&gt;
| Code Monkey First Class&lt;br /&gt;
| GMT&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index of Development Pages and Resources ==&lt;br /&gt;
&lt;br /&gt;
Note: Any sort of code posted onto the wiki can now be syntax highlighted using the &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight&amp;gt;&amp;lt;/nowiki&amp;gt; tag. It will default to perl, but can be changed to other languages. For example &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;. More documentation is at [[mediawikiwiki:Extension:SyntaxHighlight_GeSHi]].&lt;br /&gt;
&lt;br /&gt;
* [[ImportantDevelopmentLinks]] - Place to put urls for the repositories, etc. (Use current page for now, this page not needed - YET)&lt;br /&gt;
* [[DevelopmentWorkCurrentlyInProgress]] - what we are working on at this moment &lt;br /&gt;
* [[CodingStyleForOurPerlChanges]] - Suggested style for perl code changes &lt;br /&gt;
* [[DevelopmentVMHowto]] - How to get your own Slash code up in a Virtual Machine using VirtualBox&lt;br /&gt;
* [[CssWork]] - pages for ongoing css work&lt;br /&gt;
* [[SlashDocumentationIndex]] - A single place to find Slash docs, one day it will be organized and accurate&lt;br /&gt;
* [[IncidentLog]] - Documentation of how incidents occurred and how they were mitigated&lt;br /&gt;
* [[GitUse]] - Tutorial/advice on how to use git&lt;br /&gt;
* [[Dev/Sys|To-do]] - A list of items in the pipeline collected from various places&lt;br /&gt;
&lt;br /&gt;
== Work Notes ==&lt;br /&gt;
&lt;br /&gt;
* [[AudioGuyWorkNotes]]&lt;br /&gt;
* [[Paulej72WorkNotes]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[SystemAdministration]] - See this section for actual server details and procedures&lt;br /&gt;
* GitHub https://github.com/SoylentNews/slashcode: Slashcode Repository and Issue Tracker&lt;br /&gt;
* Wiki: Documentation and work logs&lt;br /&gt;
**hosted on the svc linode&lt;br /&gt;
* IRC: real time chat for team communications&lt;br /&gt;
* Slashcott.org: temporary testing server in use until we get ones setup on Linode.&lt;br /&gt;
* Mailman Dev Mailing list: for non-real-time discussions that need a good paper trail.&lt;br /&gt;
* http://dev.mysql.com/doc/refman/5.5/en/index.html - Official docs for mysql we use&lt;br /&gt;
* https://perl.apache.org/start/index.html - modperl docs (We use version 1 with Apache 1.3)&lt;br /&gt;
* http://remote.demmers.org/~audioguy/manual/ - Apache 1.3 docs don't seem to be on the Apache site any more, here they are.&lt;br /&gt;
** http://remote.demmers.org/~audioguy/manual/misc/API.html but this is what is important to understand slash workings with mod perl.&lt;br /&gt;
&lt;br /&gt;
== Slashcode Primer ==&lt;br /&gt;
&lt;br /&gt;
Slashcode is a complex beast.  Here is the listing of the repo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;Bundle&lt;br /&gt;
Slash	&lt;br /&gt;
bin&lt;br /&gt;
docs&lt;br /&gt;
httpd&lt;br /&gt;
plugins&lt;br /&gt;
sbin&lt;br /&gt;
sql&lt;br /&gt;
tagboxes&lt;br /&gt;
themes&lt;br /&gt;
utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We really are only concerned with three of these directories: Slash, plugins, and themes.  The first directory, Slash, is the home of the slash.pm module and its related code.  The module, slash.pm, does all of the back end work of slashcode.  It provides a set of APIs that are used to generate pages and manipulate the database.  This is where the heavy perl coding is done. We definitely need help with this section in both expanding our knowledge and working with the code. (As I started on this from a css/html slant I do not have a good idea of what is here --pauej72)&lt;br /&gt;
&lt;br /&gt;
The second main part of the system are the themes.  In this case we have only one theme called slashcode.  The theme is broken down into pieces the first is htdocs.  htdocs is all of the static html files, perl files that directly start page generation events, the css files, images, and other static code.  The second part of the theme is the templates.  These templates are loaded into the database an are used by slash to layout the data from different sources and turn them into html files that apache can send to the user.  Templates re a mixture of perl, slash coding, and html.  Templates use slash calls to load other templates and usually each template leaves a breadcrumb in the final html with a start and end comment with the template's name and id.  These breadcrumbs make it easy to find out which template file is generating the particular piece of html that you need to change.&lt;br /&gt;
&lt;br /&gt;
Slashcode also has a plugin architecture that allows certain system to be bolted on to the main system. The main system is basically articles, comments and users.  The pulgins add the admin interface, the messaging system, enhanced login, journals, and other things.  The files for these plugging are in the plugins folder, not in the theme folder.  The issue with plugins is that it contains both front end code such as templates, css and pl files, it also has perl modules that are loaded into the perl engine. &lt;br /&gt;
&lt;br /&gt;
The rest of the directories are used for build and install purposes and probably will not need to be modified regularly.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress so please check back here for more.&lt;br /&gt;
&lt;br /&gt;
== Development VM ==&lt;br /&gt;
&lt;br /&gt;
Please see [[DevelopmentVMHowto]] for the full How To.&lt;br /&gt;
&lt;br /&gt;
Additional notes: http://soylentnews.org/~crutchy/journal/114&lt;br /&gt;
&lt;br /&gt;
==Integrated Development Environment==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sub&amp;gt;'''Note''' This is a work in progress. Currently the Windows development environment seems mostly useless except for Syntax Highlighting and basic Code Navigation.&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Regardless of what IDE (''Integrated Development Environment'') you choose to go with, you're going to require a Perl interpreter (With a built-in Debugger) and optionally the PadWalker module for variable inspection (Also used by built-in debugger).&lt;br /&gt;
&lt;br /&gt;
=== Perl (Interpreter) ===&lt;br /&gt;
:Linux users generally already have a full Perl stack installed, so this resource is for Windows users. There's a number of different Perl interpreters available for Windows users. You can download ActivePerl for free below:&lt;br /&gt;
&lt;br /&gt;
::* [http://www.activestate.com/activeperl/downloads www.activestate.com/activeperl/downloads]&lt;br /&gt;
&lt;br /&gt;
=== PadWalker (Variable Inspection) ===&lt;br /&gt;
:* [http://perlmaven.com/padwalker perlmaven.com/padwalker]&lt;br /&gt;
&lt;br /&gt;
=== IDEs ===&lt;br /&gt;
==== Eclipse ====&lt;br /&gt;
:Eclipse with the ''EPIC'' Plug-In provides a great Perl IDE for Windows users. After installing ActivePerl and the PadWalker module you will need to install a Java Runtime.&lt;br /&gt;
&lt;br /&gt;
:'''Before you Begin:''' It's important to note that if you are running 64-bit Windows, you should choose the 64-bit JRE and pair it with a 64-bit Eclipse. They cannot be mis-matched (A 32-bit JRE with a 64-bit Eclipse or vice versa).&lt;br /&gt;
&lt;br /&gt;
:'''Step 1)''':&lt;br /&gt;
:: Download Oracle's runtime for free below. You can choose the JRE (Runtime Environment) if you only want to do Perl/Slashcode development or the JDK (Development Kit) if you want to do Perl/Slashcode development and Java development in the future. Choosing the JRE will save you disk space:&lt;br /&gt;
:: [http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html Java Runtime Environment 7u55]&lt;br /&gt;
:: [http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html Java Developer Kit 7u55]&lt;br /&gt;
&lt;br /&gt;
:'''Step 1.1)''':&lt;br /&gt;
:: After you have installed the JRE and restarted Windows, follow this guide from Oracle to setup the environment variables for Windows, including the PATH and CLASSPATH variables:&lt;br /&gt;
:: [http://docs.oracle.com/javase/tutorial/essential/environment/paths.html Environment Paths]&lt;br /&gt;
&lt;br /&gt;
:'''Step 2)''':&lt;br /&gt;
:: Install the Eclipse IDE. You can download the latest release (Kepler) for free below:&lt;br /&gt;
:: [http://eclipse.org/downloads/packages/eclipse-standard-432/keplersr2 Eclipse Kepler]&lt;br /&gt;
&lt;br /&gt;
:'''Step 3)''':&lt;br /&gt;
::Install the free ''&amp;quot;EPIC&amp;quot;'' plug-in for Eclipse. This is done from within Eclipse and is fairly straight forward. From within Eclipse, click the &amp;quot;Help&amp;quot; top strip-menu and choose the &amp;quot;Install New Software&amp;quot; option. You can also find detailed instructions below, however they may become out of date:&lt;br /&gt;
:: [http://www.epic-ide.org/download.php www.epic-ide.org/download.php]&amp;lt;br /&amp;gt;&lt;br /&gt;
==== Geany ====&lt;br /&gt;
::As an alternative to Eclipse, you can try Geany. Geany isn't exactly a full IDE like Eclipse, however you can setup the file locations of Perl and get a pretty good workflow going. You can download Geany for free below:&lt;br /&gt;
&lt;br /&gt;
::: [http://www.geany.org/Download/Releases www.geany.org/Download/Releases]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Teams]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=11325</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=11325"/>
		<updated>2016-08-14T14:17:07Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* Bots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[IRC links]]&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
* Official channels are usually safe for work / kids / family.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! NSFW !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || yes || mostly about bacon and stuff || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || yes || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp ||  || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight ||  || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || no || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || no || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || no || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || no || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* NSFW = not safe for work / kids /family (contains adult themes and profanity)&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting (if dumping errors to #debug, bots should ideally be set to not respond to commands in that channel to prevent race/infinite loop conditions).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:cmn32480|cmn32480]] (op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:Crutchy|crutchy]] (admin/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
* #smake&amp;lt;br/&amp;gt;&lt;br /&gt;
* #smakeadd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #sammich&amp;lt;br/&amp;gt;&lt;br /&gt;
* #sammichadd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #join&amp;lt;br/&amp;gt;&lt;br /&gt;
* #part&amp;lt;br/&amp;gt;&lt;br /&gt;
* #youtube&amp;lt;br/&amp;gt;&lt;br /&gt;
* #g&amp;lt;br/&amp;gt;&lt;br /&gt;
* #submit&amp;lt;br/&amp;gt;&lt;br /&gt;
* #roll&amp;lt;br/&amp;gt;&lt;br /&gt;
* #bnk&amp;lt;br/&amp;gt;&lt;br /&gt;
* #tell&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:PlowKing|PlowKing]] ||  ||  ||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|x]] ||&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #crutchy&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (op/dev)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* exec development&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
* [[IRC:exec suggestions]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=SystemAdministration-OLD-2024&amp;diff=11091</id>
		<title>SystemAdministration-OLD-2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=SystemAdministration-OLD-2024&amp;diff=11091"/>
		<updated>2016-07-28T10:02:49Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* Stuff That Needs To Be Addressed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TeamPages]] - parent, [[Development]]&lt;br /&gt;
&lt;br /&gt;
==Welcome==&lt;br /&gt;
&lt;br /&gt;
This is a comphensive index dealing with aspects of system administration and management of our clusters, as well as some of the more archine bits of setup required to make it work.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[SystemAdministration|Sysop Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Co-leader&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| mechanicjay&lt;br /&gt;
| Co-leader&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| NCommander&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-9 (AKDT)&lt;br /&gt;
|-&lt;br /&gt;
| Audioguy&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-7 (PST/PDT)&lt;br /&gt;
|-&lt;br /&gt;
| The Mighty Buzzard&lt;br /&gt;
| Emergency Reserve Member&lt;br /&gt;
| UTC-5 (CST/CDT)&lt;br /&gt;
|-&lt;br /&gt;
| martyb/bytram&lt;br /&gt;
| Catastrophe Reserve Member&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Index of Development Pages and Resources==&lt;br /&gt;
&lt;br /&gt;
===Servers===&lt;br /&gt;
&lt;br /&gt;
List of servers on linode: [http://wiki.soylentnews.org/wiki/Category:SystemAdministration/Servers  Category:SystemAdministration/Servers]&lt;br /&gt;
* [[soylent-www]] - Primary Apache, mysqld, and varnish servers for main site. Fluorine hosts slashd and ipnd as well.&lt;br /&gt;
:: [[Hydrogen]], [[Fluorine]]&lt;br /&gt;
* soylent-db -- ndb-cluster servers for mysql, hold the rehash database.&lt;br /&gt;
:: [[Helium]], [[Neon]]&lt;br /&gt;
* dev -- Development server.&lt;br /&gt;
:: [[Lithium]]&lt;br /&gt;
* staff-slash -- Staff server, ssh entry point, staff-only rehash.&lt;br /&gt;
:: [[Boron]]&lt;br /&gt;
* irc -- IRC server and related services.&lt;br /&gt;
:: [[Beryllium]]&lt;br /&gt;
* [[SystemAdministration/Backups|backups]] -- Backup services. (NOT on linode)&lt;br /&gt;
:: [[Oxygen]]&lt;br /&gt;
* directory services  -- Hesoid and Kerberos.&lt;br /&gt;
:: [[Helium]], [[Boron]]&lt;br /&gt;
* [[soylent-services]] - mail, wiki, other services as needed.&lt;br /&gt;
:: [[Beryllium]]&lt;br /&gt;
* [[load-balancer]]&lt;br /&gt;
:: [[Sodium]], [[Magnesium]]&lt;br /&gt;
&lt;br /&gt;
==Stuff That Needs To Be Addressed==&lt;br /&gt;
* &amp;lt;strike&amp;gt;https is not default everywhere&amp;lt;/strike&amp;gt;&lt;br /&gt;
* icinga/monitoring project needs &amp;lt;strike&amp;gt;killed&amp;lt;/strike&amp;gt; revamped into usefulness&lt;br /&gt;
* Landscape - I appreciate NCommanders ability to obtain a product normally sold for free, but if this is not being used it should not be running and using resources. (helium (killed here), perhaps others)&lt;br /&gt;
* &amp;lt;strike&amp;gt;Should have some sort of SN password safe&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Privilege Duplication - making sure that all services have multiple admins&lt;br /&gt;
* Systems Documentation needs to revised and brought up to date.&lt;br /&gt;
* Work Coordination, not always good communication when fundamental things change.&lt;br /&gt;
* &amp;lt;strike&amp;gt;There is no firewall coding at all. Something I normally set up before even one network cable is plugged in. I understand the desire to have an open system on public interfaces, but I see no reason that systems not publicly accessible such as database backends should not be firewalled off from Chinese and other such hackers. Such as the attempts being made on Helium from 120.192.20.162 120.192.0.0/11 China Mobile communications corporation at the moment I am writing this.&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Work Notes==&lt;br /&gt;
DNS is completely run and managed by Linode's DNS Manager service.  This was an expedient decision when trying to get off bluehost.  We may want to investigate putting the master zone file on helium or boron and having external services handle serving out our dns.&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
* [[SystemAdministration/AccessInstruction|Access Instructions]] - how to get on the nodes, get around, and kerberos for users primer&lt;br /&gt;
* [[SystemAdministration/GroupPermissions|Group Permissions]] - understanding our LDAP groups, what machines they can access, and where you can sudo&lt;br /&gt;
* [[SystemAdministration/LDAPManagementForDummies|LDAP Management for Dummies]] - how to do basic shit in that source of miserary known as LDAP&lt;br /&gt;
* [[SystemAdministration/TheRiseAndFallOfNewNodeManagement|The Rise And Fall Of New Node Management]] - from bash to fully intergrated node, this doc has it&lt;br /&gt;
* [[SystemAdministration/TheHitchhikersGuideToTheli694-22Domain|The Hitchhikerr's Guide to The li694-22 Domain]] - machine list, general information&lt;br /&gt;
* [[SystemAdministration/KerberosAdministration|Kerberos Administration Or Everything You Wanted To Know About Kerberos But Were Afraid To Ask]]&lt;br /&gt;
* [[DnsRecords]] - copy of the zone file pasted from the machine that was accidentally turned off&lt;br /&gt;
* [[EmergencyProcedures|Emergency Technical Procedures]] - in case of fire, break glass (Read before messing with servers)&lt;br /&gt;
* [[SystemAdministration/Backups|Backup Information]] - information on where and what is being backed up.&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:System administration]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=SystemAdministration-OLD-2024&amp;diff=11090</id>
		<title>SystemAdministration-OLD-2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=SystemAdministration-OLD-2024&amp;diff=11090"/>
		<updated>2016-07-28T09:58:11Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* Who we are */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TeamPages]] - parent, [[Development]]&lt;br /&gt;
&lt;br /&gt;
==Welcome==&lt;br /&gt;
&lt;br /&gt;
This is a comphensive index dealing with aspects of system administration and management of our clusters, as well as some of the more archine bits of setup required to make it work.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[SystemAdministration|Sysop Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Co-leader&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| mechanicjay&lt;br /&gt;
| Co-leader&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| NCommander&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-9 (AKDT)&lt;br /&gt;
|-&lt;br /&gt;
| Audioguy&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-7 (PST/PDT)&lt;br /&gt;
|-&lt;br /&gt;
| The Mighty Buzzard&lt;br /&gt;
| Emergency Reserve Member&lt;br /&gt;
| UTC-5 (CST/CDT)&lt;br /&gt;
|-&lt;br /&gt;
| martyb/bytram&lt;br /&gt;
| Catastrophe Reserve Member&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Index of Development Pages and Resources==&lt;br /&gt;
&lt;br /&gt;
===Servers===&lt;br /&gt;
&lt;br /&gt;
List of servers on linode: [http://wiki.soylentnews.org/wiki/Category:SystemAdministration/Servers  Category:SystemAdministration/Servers]&lt;br /&gt;
* [[soylent-www]] - Primary Apache, mysqld, and varnish servers for main site. Fluorine hosts slashd and ipnd as well.&lt;br /&gt;
:: [[Hydrogen]], [[Fluorine]]&lt;br /&gt;
* soylent-db -- ndb-cluster servers for mysql, hold the rehash database.&lt;br /&gt;
:: [[Helium]], [[Neon]]&lt;br /&gt;
* dev -- Development server.&lt;br /&gt;
:: [[Lithium]]&lt;br /&gt;
* staff-slash -- Staff server, ssh entry point, staff-only rehash.&lt;br /&gt;
:: [[Boron]]&lt;br /&gt;
* irc -- IRC server and related services.&lt;br /&gt;
:: [[Beryllium]]&lt;br /&gt;
* [[SystemAdministration/Backups|backups]] -- Backup services. (NOT on linode)&lt;br /&gt;
:: [[Oxygen]]&lt;br /&gt;
* directory services  -- Hesoid and Kerberos.&lt;br /&gt;
:: [[Helium]], [[Boron]]&lt;br /&gt;
* [[soylent-services]] - mail, wiki, other services as needed.&lt;br /&gt;
:: [[Beryllium]]&lt;br /&gt;
* [[load-balancer]]&lt;br /&gt;
:: [[Sodium]], [[Magnesium]]&lt;br /&gt;
&lt;br /&gt;
==Stuff That Needs To Be Addressed==&lt;br /&gt;
* https is not default everywhere&lt;br /&gt;
* icinga/monitoring project needs killed&lt;br /&gt;
* Landscape - I appreciate NCommanders ability to obtain a product normally sold for free, but if this is not being used it should not be running and using resources. (helium (killed here), perhaps others)&lt;br /&gt;
* Should have some sort of SN password safe&lt;br /&gt;
* Privilege Duplication - making sure that all services have multiple admins&lt;br /&gt;
* Systems Documentation needs to revised and brought up to date.&lt;br /&gt;
* Work Coordination, not always good communication when fundamental things change.&lt;br /&gt;
* There is no firewall coding at all. Something I normally set up before even one network cable is plugged in. I understand the desire to have an open system on public interfaces, but I see no reason that systems not publicly accessible such as database backends should not be firewalled off from Chinese and other such hackers. Such as the attempts being made on Helium from 120.192.20.162 120.192.0.0/11 China Mobile communications corporation at the moment I am writing this.&lt;br /&gt;
&lt;br /&gt;
==Work Notes==&lt;br /&gt;
DNS is completely run and managed by Linode's DNS Manager service.  This was an expedient decision when trying to get off bluehost.  We may want to investigate putting the master zone file on helium or boron and having external services handle serving out our dns.&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
* [[SystemAdministration/AccessInstruction|Access Instructions]] - how to get on the nodes, get around, and kerberos for users primer&lt;br /&gt;
* [[SystemAdministration/GroupPermissions|Group Permissions]] - understanding our LDAP groups, what machines they can access, and where you can sudo&lt;br /&gt;
* [[SystemAdministration/LDAPManagementForDummies|LDAP Management for Dummies]] - how to do basic shit in that source of miserary known as LDAP&lt;br /&gt;
* [[SystemAdministration/TheRiseAndFallOfNewNodeManagement|The Rise And Fall Of New Node Management]] - from bash to fully intergrated node, this doc has it&lt;br /&gt;
* [[SystemAdministration/TheHitchhikersGuideToTheli694-22Domain|The Hitchhikerr's Guide to The li694-22 Domain]] - machine list, general information&lt;br /&gt;
* [[SystemAdministration/KerberosAdministration|Kerberos Administration Or Everything You Wanted To Know About Kerberos But Were Afraid To Ask]]&lt;br /&gt;
* [[DnsRecords]] - copy of the zone file pasted from the machine that was accidentally turned off&lt;br /&gt;
* [[EmergencyProcedures|Emergency Technical Procedures]] - in case of fire, break glass (Read before messing with servers)&lt;br /&gt;
* [[SystemAdministration/Backups|Backup Information]] - information on where and what is being backed up.&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:System administration]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=SystemAdministration-OLD-2024&amp;diff=9726</id>
		<title>SystemAdministration-OLD-2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=SystemAdministration-OLD-2024&amp;diff=9726"/>
		<updated>2016-05-29T12:50:44Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* Servers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TeamPages]] - parent, [[Development]]&lt;br /&gt;
&lt;br /&gt;
==Welcome==&lt;br /&gt;
&lt;br /&gt;
This is a comphensive index dealing with aspects of system administration and management of our clusters, as well as some of the more archine bits of setup required to make it work.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[SystemAdministration|Sysop Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Co-leader&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| mechanicjay&lt;br /&gt;
| Co-leader&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| NCommander&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-9 (AKDT)&lt;br /&gt;
|-&lt;br /&gt;
| Audioguy&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-7 (PST/PDT)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Index of Development Pages and Resources==&lt;br /&gt;
&lt;br /&gt;
===Servers===&lt;br /&gt;
&lt;br /&gt;
List of servers on linode: [http://wiki.soylentnews.org/wiki/Category:SystemAdministration/Servers  Category:SystemAdministration/Servers]&lt;br /&gt;
* [[soylent-www]] - Primary Apache, mysqld, and varnish servers for main site. Fluorine hosts slashd and ipnd as well.&lt;br /&gt;
:: [[Hydrogen]], [[Fluorine]]&lt;br /&gt;
* soylent-db -- ndb-cluster servers for mysql, hold the rehash database.&lt;br /&gt;
:: [[Helium]], [[Neon]]&lt;br /&gt;
* dev -- Development server.&lt;br /&gt;
:: [[Lithium]]&lt;br /&gt;
* staff-slash -- Staff server, ssh entry point, staff-only rehash.&lt;br /&gt;
:: [[Boron]]&lt;br /&gt;
* irc -- IRC server and related services.&lt;br /&gt;
:: [[Beryllium]]&lt;br /&gt;
* [[SystemAdministration/Backups|backups]] -- Backup services. (NOT on linode)&lt;br /&gt;
:: [[Oxygen]]&lt;br /&gt;
* directory services  -- Hesoid and Kerberos.&lt;br /&gt;
:: [[Helium]], [[Boron]]&lt;br /&gt;
* [[soylent-services]] - mail, wiki, other services as needed.&lt;br /&gt;
:: [[Beryllium]]&lt;br /&gt;
* [[load-balancer]]&lt;br /&gt;
:: [[Sodium]], [[Magnesium]]&lt;br /&gt;
&lt;br /&gt;
==Stuff That Needs To Be Addressed==&lt;br /&gt;
* https is not default everywhere&lt;br /&gt;
* icinga/monitoring project needs killed&lt;br /&gt;
* Landscape - I appreciate NCommanders ability to obtain a product normally sold for free, but if this is not being used it should not be running and using resources. (helium (killed here), perhaps others)&lt;br /&gt;
* Should have some sort of SN password safe&lt;br /&gt;
* Privilege Duplication - making sure that all services have multiple admins&lt;br /&gt;
* Systems Documentation needs to revised and brought up to date.&lt;br /&gt;
* Work Coordination, not always good communication when fundamental things change.&lt;br /&gt;
* There is no firewall coding at all. Something I normally set up before even one network cable is plugged in. I understand the desire to have an open system on public interfaces, but I see no reason that systems not publicly accessible such as database backends should not be firewalled off from Chinese and other such hackers. Such as the attempts being made on Helium from 120.192.20.162 120.192.0.0/11 China Mobile communications corporation at the moment I am writing this.&lt;br /&gt;
&lt;br /&gt;
==Work Notes==&lt;br /&gt;
DNS is completely run and managed by Linode's DNS Manager service.  This was an expedient decision when trying to get off bluehost.  We may want to investigate putting the master zone file on helium or boron and having external services handle serving out our dns.&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
* [[SystemAdministration/AccessInstruction|Access Instructions]] - how to get on the nodes, get around, and kerberos for users primer&lt;br /&gt;
* [[SystemAdministration/GroupPermissions|Group Permissions]] - understanding our LDAP groups, what machines they can access, and where you can sudo&lt;br /&gt;
* [[SystemAdministration/LDAPManagementForDummies|LDAP Management for Dummies]] - how to do basic shit in that source of miserary known as LDAP&lt;br /&gt;
* [[SystemAdministration/TheRiseAndFallOfNewNodeManagement|The Rise And Fall Of New Node Management]] - from bash to fully intergrated node, this doc has it&lt;br /&gt;
* [[SystemAdministration/TheHitchhikersGuideToTheli694-22Domain|The Hitchhikerr's Guide to The li694-22 Domain]] - machine list, general information&lt;br /&gt;
* [[SystemAdministration/KerberosAdministration|Kerberos Administration Or Everything You Wanted To Know About Kerberos But Were Afraid To Ask]]&lt;br /&gt;
* [[DnsRecords]] - copy of the zone file pasted from the machine that was accidentally turned off&lt;br /&gt;
* [[EmergencyProcedures|Emergency Technical Procedures]] - in case of fire, break glass (Read before messing with servers)&lt;br /&gt;
* [[SystemAdministration/Backups|Backup Information]] - information on where and what is being backed up.&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:System administration]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=SystemAdministration-OLD-2024&amp;diff=9725</id>
		<title>SystemAdministration-OLD-2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=SystemAdministration-OLD-2024&amp;diff=9725"/>
		<updated>2016-05-29T12:48:20Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* Servers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TeamPages]] - parent, [[Development]]&lt;br /&gt;
&lt;br /&gt;
==Welcome==&lt;br /&gt;
&lt;br /&gt;
This is a comphensive index dealing with aspects of system administration and management of our clusters, as well as some of the more archine bits of setup required to make it work.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[SystemAdministration|Sysop Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Co-leader&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| mechanicjay&lt;br /&gt;
| Co-leader&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| NCommander&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-9 (AKDT)&lt;br /&gt;
|-&lt;br /&gt;
| Audioguy&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-7 (PST/PDT)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Index of Development Pages and Resources==&lt;br /&gt;
&lt;br /&gt;
===Servers===&lt;br /&gt;
&lt;br /&gt;
List of servers on linode: [http://wiki.soylentnews.org/wiki/Category:SystemAdministration/Servers  Category:SystemAdministration/Servers]&lt;br /&gt;
* [[soylent-www]] - Primary Apache, mysqld, and varnish servers for main site. Fluorine hosts slashd and ipnd as well.&lt;br /&gt;
:: [[Hydrogen]], [[Fluorine]]&lt;br /&gt;
* soylent-db -- ndb-cluster servers for mysql, hold the rehash database.&lt;br /&gt;
:: [[Helium]], [[Neon]]&lt;br /&gt;
* dev -- Development server.&lt;br /&gt;
:: [[Lithium]]&lt;br /&gt;
* staff-slash -- Staff server, ssh entry point, staff-only rehash.&lt;br /&gt;
:: [[Boron]]&lt;br /&gt;
* irc -- IRC server and related services.&lt;br /&gt;
:: [[Beryllium]]&lt;br /&gt;
* [[SystemAdministration/Backups|backups]] -- Backup services.&lt;br /&gt;
:: [[Oxygen]]&lt;br /&gt;
* directory services  -- Hesoid and Kerberos.&lt;br /&gt;
:: [[Helium]], [[Boron]]&lt;br /&gt;
* [[soylent-services]] - mail, wiki, other services as needed.&lt;br /&gt;
:: [[Beryllium]]&lt;br /&gt;
* [[load-balancer]]&lt;br /&gt;
:: [[Sodium]], [[Magnesium]]&lt;br /&gt;
&lt;br /&gt;
==Stuff That Needs To Be Addressed==&lt;br /&gt;
* https is not default everywhere&lt;br /&gt;
* icinga/monitoring project needs killed&lt;br /&gt;
* Landscape - I appreciate NCommanders ability to obtain a product normally sold for free, but if this is not being used it should not be running and using resources. (helium (killed here), perhaps others)&lt;br /&gt;
* Should have some sort of SN password safe&lt;br /&gt;
* Privilege Duplication - making sure that all services have multiple admins&lt;br /&gt;
* Systems Documentation needs to revised and brought up to date.&lt;br /&gt;
* Work Coordination, not always good communication when fundamental things change.&lt;br /&gt;
* There is no firewall coding at all. Something I normally set up before even one network cable is plugged in. I understand the desire to have an open system on public interfaces, but I see no reason that systems not publicly accessible such as database backends should not be firewalled off from Chinese and other such hackers. Such as the attempts being made on Helium from 120.192.20.162 120.192.0.0/11 China Mobile communications corporation at the moment I am writing this.&lt;br /&gt;
&lt;br /&gt;
==Work Notes==&lt;br /&gt;
DNS is completely run and managed by Linode's DNS Manager service.  This was an expedient decision when trying to get off bluehost.  We may want to investigate putting the master zone file on helium or boron and having external services handle serving out our dns.&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
* [[SystemAdministration/AccessInstruction|Access Instructions]] - how to get on the nodes, get around, and kerberos for users primer&lt;br /&gt;
* [[SystemAdministration/GroupPermissions|Group Permissions]] - understanding our LDAP groups, what machines they can access, and where you can sudo&lt;br /&gt;
* [[SystemAdministration/LDAPManagementForDummies|LDAP Management for Dummies]] - how to do basic shit in that source of miserary known as LDAP&lt;br /&gt;
* [[SystemAdministration/TheRiseAndFallOfNewNodeManagement|The Rise And Fall Of New Node Management]] - from bash to fully intergrated node, this doc has it&lt;br /&gt;
* [[SystemAdministration/TheHitchhikersGuideToTheli694-22Domain|The Hitchhikerr's Guide to The li694-22 Domain]] - machine list, general information&lt;br /&gt;
* [[SystemAdministration/KerberosAdministration|Kerberos Administration Or Everything You Wanted To Know About Kerberos But Were Afraid To Ask]]&lt;br /&gt;
* [[DnsRecords]] - copy of the zone file pasted from the machine that was accidentally turned off&lt;br /&gt;
* [[EmergencyProcedures|Emergency Technical Procedures]] - in case of fire, break glass (Read before messing with servers)&lt;br /&gt;
* [[SystemAdministration/Backups|Backup Information]] - information on where and what is being backed up.&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:System administration]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=EmergencyProcedures&amp;diff=9724</id>
		<title>EmergencyProcedures</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=EmergencyProcedures&amp;diff=9724"/>
		<updated>2016-05-27T15:54:40Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: We're not currently using memcached&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[SystemAdministration]] - parent&lt;br /&gt;
&lt;br /&gt;
==Why This is Here==&lt;br /&gt;
&lt;br /&gt;
In ALL emergency situations, the most qualified person to fix them should be sought out. These instructions are here to cover the hopefully VERY RARE case where that is not possible.&lt;br /&gt;
&lt;br /&gt;
They are deliberately written at a very basic level, probably more basic than anyone with access to the servers would actually need. Howver, it is still useful to have a sort of checklist. The times when services are down tend to be stressful, and humans sometimes do not operate at their best when stressed. Plus, who knows? Maybe someday someone will have to walk the janitor through this...&lt;br /&gt;
&lt;br /&gt;
==What you need to do anything useful==&lt;br /&gt;
&lt;br /&gt;
You need ssh access to the machines affected, with the ability to get root privileges. Without this, there is no way to do anything useful to fix any problem with the system&lt;br /&gt;
&lt;br /&gt;
You must ssh to the appropriate machine, typically to a user account, and then sudo su - to root.&lt;br /&gt;
&lt;br /&gt;
(This ability must be obtained in advance, such information cannot for obvious reasons be placed on a public wiki)&lt;br /&gt;
&lt;br /&gt;
==Slash basic description==&lt;br /&gt;
&lt;br /&gt;
The slash system consists of three separate components:&lt;br /&gt;
&lt;br /&gt;
* A Mysql database server - The database engine which holds most of the data such as articles, users, etc.&lt;br /&gt;
* The Apache web server - which handles the web interface&lt;br /&gt;
* The slashd daemon, which acts as a timed batch processor for various slash events and tasks.&lt;br /&gt;
&lt;br /&gt;
In addition on the main server, an http caching program called varnish is running, which also must be functional, and running, and a cache program for the database, &amp;lt;strike&amp;gt;memcached&amp;lt;/strike&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Varnish - an http cache.&lt;br /&gt;
* memcached - A database cache &lt;br /&gt;
&lt;br /&gt;
For slash to work, all three components must be running, plus varnish &amp;lt;strike&amp;gt;and memcached&amp;lt;/strike&amp;gt; if they are in use.&lt;br /&gt;
&lt;br /&gt;
To tell if they are running, use the command 'pstree' which will show, in condensed form, the tasks that are running.&lt;br /&gt;
&lt;br /&gt;
Here is what the result of the pstree command looks like on the main server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# pstree&lt;br /&gt;
init─┬─atd&lt;br /&gt;
     ├─cron&lt;br /&gt;
     ├─dbus-daemon&lt;br /&gt;
     ├─httpd─┬─10*[httpd]&lt;br /&gt;
     │       └─sh&lt;br /&gt;
     ├─landscape-clien─┬─landscape-broke───2*[{landscape-broke}]&lt;br /&gt;
     │                 ├─landscape-manag&lt;br /&gt;
     │                 └─landscape-monit&lt;br /&gt;
     ├─linode-longview&lt;br /&gt;
     ├─login───bash&lt;br /&gt;
     ├─master─┬─pickup&lt;br /&gt;
     │        ├─qmgr&lt;br /&gt;
     │        └─tlsmgr&lt;br /&gt;
     ├─memcached───5*[{memcached}]&lt;br /&gt;
     ├─nginx───4*[nginx]&lt;br /&gt;
     ├─ntpd&lt;br /&gt;
     ├─rsyslogd───3*[{rsyslogd}]&lt;br /&gt;
     ├─slapd───4*[{slapd}]&lt;br /&gt;
     ├─sshd───sshd───sshd───bash───sudo───su───bash───pstree&lt;br /&gt;
     ├─sudo───slashd───3*[slashd]&lt;br /&gt;
     ├─udevd───2*[udevd]&lt;br /&gt;
     ├─upstart-socket-&lt;br /&gt;
     ├─upstart-udev-br&lt;br /&gt;
     └─varnishd───varnishd───20*[{varnishd}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you get 'garbage' as the output of the pstree command, use this form instead:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[root@slashcode init.d]# pstree -A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can see that apache is running, it shows up as httpd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     ├─httpd───10*[httpd]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And we can see that slashd is running:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     |-sudo---slashd---3*[slashd]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one is ever so slightly easy to miss, because it is running as a child of the sudo command, so is not first on the list.&lt;br /&gt;
&lt;br /&gt;
On the main server, Varnish must also be running:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
|─varnishd───varnishd───20*[{varnishd}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;As well as memcached:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     ├─memcached───5*[{memcached}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On the database machine for the main site, we would see that mysql is running, &lt;br /&gt;
it shows up like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     ├─mysqld_safe───mysqld───37*[{mysqld}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The exact numbers (10*[httpd] etc) are not important.&lt;br /&gt;
&lt;br /&gt;
This is what a properly running system should look like, on the main site. The database is on one machine, which must have mysql running, and and the other machine must have apache (httpd) running, varnish running, &amp;lt;strike&amp;gt;memcached running&amp;lt;/strike&amp;gt;, and slashd running.&lt;br /&gt;
&lt;br /&gt;
'''Important note - at the present time, you cannot fix either system by a reboot. Apache MUST be started by hand'''&lt;br /&gt;
&lt;br /&gt;
==Primary site down==&lt;br /&gt;
&lt;br /&gt;
Log in to main slash machine, obtain root.&lt;br /&gt;
&lt;br /&gt;
Check process list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@soylent-www:/etc/varnish# pstree -A&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see these in process list, among other unrelated processes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
├─httpd───10*[httpd]&lt;br /&gt;
&lt;br /&gt;
|-su---slashd---2*[slashd]&lt;br /&gt;
&lt;br /&gt;
|─varnishd───varnishd───20*[{varnishd}]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure that slashd, apache, and varnish are running, as described above.&lt;br /&gt;
&lt;br /&gt;
===If only varnishd is not running:===&lt;br /&gt;
&lt;br /&gt;
Restart varnish:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/init.d/varnish start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check that is actually running after a few seconds by looking at the task list again. (pstree)&lt;br /&gt;
&lt;br /&gt;
If varnish will not restart, you will likely need to get help from someone familiar with its configuration.&lt;br /&gt;
&lt;br /&gt;
===If only Apache is not running:===&lt;br /&gt;
Start apache:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /srv/soylentnews.org/apache/bin/apachectl start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Confirm it is running after a few seconds by looking at the process list again. (pstree)&lt;br /&gt;
&lt;br /&gt;
If you get an error message about apache being unable to connect to the database, you will need to ssh into the database machine and restart the database, then come back and restart apache. '''Apache cannot start unless it can make a database connection.'''&lt;br /&gt;
&lt;br /&gt;
=== If only slashd is not running ===&lt;br /&gt;
&lt;br /&gt;
Slashd cannot start unless Apache is running. &lt;br /&gt;
&lt;br /&gt;
To start slashd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/init.d/slash start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Confirm it is running after a few seconds by looking at the process list again. (pstree)&lt;br /&gt;
&lt;br /&gt;
Note the command above ends in slash, not slashd. Slash is the name of the script, it starts the daemon known as slashd.&lt;br /&gt;
&lt;br /&gt;
If slashd will not start, make sure apache and the database are running.&lt;br /&gt;
&lt;br /&gt;
You may see some errors when starting slashd, at the present time this is 'normal'. Provided it starts, and seems to operate correctly, there is little that can be done about this until some code fixes are done.&lt;br /&gt;
&lt;br /&gt;
=== If memcached is not running ===&lt;br /&gt;
&lt;br /&gt;
Restart it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/init.d/memcached start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Confirm it is running after a few seconds by looking at the process list again. (pstree)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== If the database server is not running ===&lt;br /&gt;
&lt;br /&gt;
You will need to ssh to the database machine.&lt;br /&gt;
&lt;br /&gt;
start mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/rc.d/init.d/mysqld start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Confirm it is running after a few seconds by looking at the process list again. (pstree)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
├─mysqld_safe───mysqld───37*[{mysqld}]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it will not start, you will need additional help.&lt;br /&gt;
&lt;br /&gt;
You -may- need to restart Apache after restarting the db. &lt;br /&gt;
&lt;br /&gt;
on the main machine:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /srv/soylentnews.org/apache/bin/apachectl stop&lt;br /&gt;
 wait about ten seconds or check the tasklist that apache is fully stopped&lt;br /&gt;
# /srv/soylentnews.org/apache/bin/apachectl start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== None of the above fixes work, or multiple problems ===&lt;br /&gt;
&lt;br /&gt;
In this case it may be worth a try to bring all slash related processes down, and do a cold restart, in the proper order.&lt;br /&gt;
&lt;br /&gt;
Processes are usually stopped in the reverse order they start, so to bring everything down:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/init.d/slash stop&lt;br /&gt;
# /srv/soylentnews.org/apache/bin/apachectl stop&lt;br /&gt;
# /etc/init.d/varnish stop&lt;br /&gt;
# /etc/init.d/memcached stop&lt;br /&gt;
# /etc/init.d/mysqld stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then to bring them all back up:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/init.d/mysqld start&lt;br /&gt;
# /etc/init.d/memcached start&lt;br /&gt;
# /etc/init.d/varnish start&lt;br /&gt;
# /srv/soylentnews.org/apache/bin/apachectl start&lt;br /&gt;
# /etc/init.d/slash start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If none of this works, you will need help from the assigned sysadmin for the machine.&lt;br /&gt;
&lt;br /&gt;
==Slashcott Development site down==&lt;br /&gt;
&lt;br /&gt;
There are just two differences in this machine and the main site:&lt;br /&gt;
&lt;br /&gt;
* Things are in different locations&lt;br /&gt;
* The mysql database server is on the same machine as the site&lt;br /&gt;
&lt;br /&gt;
This is a non-critical machine, so I am just going to list the commands for reference.&lt;br /&gt;
&lt;br /&gt;
Stop Services:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/rc.d/init.d/slash stop&lt;br /&gt;
# /usr/local/apache/bin/apachectl stop&lt;br /&gt;
# /etc/rc.d/init.d/mysqld stop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then to bring them all back up:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/rc.d/init.d/mysqld start&lt;br /&gt;
# /usr/local/apache/bin/apachectl start&lt;br /&gt;
# /etc/rc.d/init.d/slash start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:System administration]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=SoylentNews&amp;diff=9723</id>
		<title>SoylentNews</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=SoylentNews&amp;diff=9723"/>
		<updated>2016-05-27T00:19:32Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* Useful Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a home for information about how '''[http://soylentnews.org SoylentNews.org]''' was started, the vision for it, and discussion about it's future. &lt;br /&gt;
&lt;br /&gt;
==About SoylentNews.org==&lt;br /&gt;
&lt;br /&gt;
Welcome to the '''[http://soylentnews.org SoylentNews.org]''' Wiki.&lt;br /&gt;
&lt;br /&gt;
We deliver community-sourced news and discussion. This is an [https://github.com/SoylentNews/slashcode open-source], grassroots effort powered by article submissions from our readers, volunteers, and our forked version of slashcode.  We highlight stories on the web which are important to everyone - especially nerds. We also provide a soapbox for discussion moderated by the site's patrons, and allow anonymous discourse as there's no mandatory registration needed to comment.&lt;br /&gt;
&lt;br /&gt;
We are mindful of community sentiment, and will not bend to overreaching corporate agenda. The goal is to be an excellent source for discussion and news about technology, art, science and politics.&lt;br /&gt;
&lt;br /&gt;
We've incorporated as a Delaware Public Benefit Corporation (similar to a non-profit) as we feel our mission to provide a platform for news dissemination and relevant discussion is not only essential for mankind, but also a legal right (i.e. freedom of press, freedom of speech) in some places, and these are liberties which we aim to protect.&lt;br /&gt;
&lt;br /&gt;
Though the site is young and there are [https://github.com/SoylentNews/slashcode/issues bugs], we are improving and adapting to satisfy the community's needs. We look forward to pushing the boundaries of web experience and are committed to involving the community on all major decisions.&lt;br /&gt;
&lt;br /&gt;
==Get Involved==&lt;br /&gt;
&lt;br /&gt;
This project is run entirely by the community and there are many different facets. Here are some of the many ways to participate:&lt;br /&gt;
&lt;br /&gt;
*'''[http://soylentnews.org/submit.pl Submit a Story]'''&lt;br /&gt;
** Try joining the #rss-bot channel in [[SoylentNews:IRC|IRC]] for story ideas&lt;br /&gt;
*'''Volunteer'''&lt;br /&gt;
** Get in touch with the '''[[Development|Development Team]]''', especially if you know perl&lt;br /&gt;
** Reach out to one of the other '''[[TeamPages|Teams]]''' (we have openings for many skill sets)&lt;br /&gt;
** Contact the relevant person: '''[[WhosWho| Who's Who?]]'''&lt;br /&gt;
*Hop in to '''IRC:'''&lt;br /&gt;
** #soylent on irc.soylentnews.org/6697&lt;br /&gt;
** [http://irc.sylnt.us/?channels=#soylent Webchat]&lt;br /&gt;
** [[SoylentNews:IRC|IRC Wiki Page]]&lt;br /&gt;
*'''Bugs''' and Features:&lt;br /&gt;
** [https://github.com/SoylentNews/slashcode/issues/new Submit a bug or Feature Request]&lt;br /&gt;
** [[Suggestions|Add a Suggestion]] - larger projects to tackle for the future&lt;br /&gt;
*'''Tell Somebody''' A friend, a colleague, any major news source....&lt;br /&gt;
** Do what you can to [[Spreading the word|get the word out]]&lt;br /&gt;
** You could participate in [[The_Slashcott|The Slashcott]]&lt;br /&gt;
&lt;br /&gt;
==Contacts==&lt;br /&gt;
&lt;br /&gt;
A list of people working on this project:&lt;br /&gt;
===[[WhosWho| Who's Who?]]===&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
&lt;br /&gt;
*[[Submission guidelines]] - best practices for story submissions&lt;br /&gt;
*[[Story Style]] - a guide for editors on article formatting&lt;br /&gt;
*[[Development]] team page&lt;br /&gt;
**[https://github.com/SoylentNews/rehash Code Repo] - The Slashcode fork repository for this project on GitHub&lt;br /&gt;
** &amp;lt;strike&amp;gt;[[DevelopmentVMHowto]] - How to get our code setup in a VM&amp;lt;/strike&amp;gt;&lt;br /&gt;
** [[SlashDocumentationIndex]]&lt;br /&gt;
*[[UserExperience]] team page&lt;br /&gt;
**[[Style]] - some of this info needs to be merged/moved/organized into/with [[UserExperience]]&lt;br /&gt;
**[[CssWork]]&lt;br /&gt;
* [[SystemAdministration|System Administration]]&lt;br /&gt;
*[[Finances]] - Breakdown of our proposed spending&lt;br /&gt;
*[[Licensing]] - ideas about which license to use for our slashcode fork&lt;br /&gt;
*[[Staff_Meetings|Staff Meeting Logs]]&lt;br /&gt;
*[[SoylentNews_PBC|SoylentNews PBC]]&lt;br /&gt;
*[[SoylentNews_Site_Policy|SoylentNews Policy]]&lt;br /&gt;
&lt;br /&gt;
== Similar Projects ==&lt;br /&gt;
* [http://pipedot.org/ Pipedot] - A complete re-write that uses a modern codebase and sports a clean look&lt;br /&gt;
* Usenet newsgroup comp.misc - [https://groups.google.com/forum/#!forum/comp.misc on Google Groups], [http://squte.com/ on Squte], [news:comp.misc via newsreader application]&lt;br /&gt;
* [http://technocrat.net/ Technocrat] - (now defunt) News site presented by Bruce Perens&lt;br /&gt;
&lt;br /&gt;
== Archive ==&lt;br /&gt;
&lt;br /&gt;
[[Archive]] -- An archive of obsolete pages/discussions that occurred before launch&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9720</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9720"/>
		<updated>2016-02-12T11:51:00Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is currently live but it's possible it may cease to be that way. In the event that it doesn't though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to perform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50. You may also specify &amp;quot;tid&amp;quot; as an argument. Behavior is however strange currently. If tid is the tid of a topic, you will get stories of that topic from every nexus; if tid belongs to a nexus, you will get stories of every topic within that nexus. This needs to be changed but it would require changing the main site as well.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* pending - returns a json hash containing current submissions and pending stories. takes no arguments&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=pending&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl. Use the topiclist op to obtain a current list of topics.&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;Twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;no GET example will work, the POST method is required. https//soylentnews.org/api.pl?m=story&amp;amp;op=post&amp;amp;subj=&amp;quot;...&amp;quot;&amp;amp;reskey='...'&amp;amp;story='...'&amp;amp;tid='...'&amp;amp;sub_type='...'&amp;amp;primaryskid='...'&amp;amp;name='...'&amp;lt;/pre&amp;gt;&lt;br /&gt;
* nexuslist - returns an array of hashes containing data on every nexus&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=nexuslist&amp;lt;/pre&amp;gt;&lt;br /&gt;
* topiclist - returns an array of hashes containing data on every topic&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=topiclist&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
*login - Logs you in, duh. Takes nick and pass as mandatory arguments. Currently returns the cookie value. DO NOT USE THE COOKIE VALUE. Use the proper cookie returned in the headers as this will change to a success/failure check only soon. You should also probably do this via POST for security reasons.&lt;br /&gt;
**&amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=auth&amp;amp;op=login&amp;amp;nick=The Mighty Buzzard&amp;amp;pass=ilikecheese&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Errata==&lt;br /&gt;
* The &amp;quot;uid&amp;quot; field data will always be truncated to only leading digits as part of slash internals. uid=18z becomes 18, uid=1z8 becomes 1, uid=z18 becomes a null value. This is expected behavior.&lt;br /&gt;
==Related pages==&lt;br /&gt;
[[SN API ideas]]&lt;br /&gt;
&lt;br /&gt;
==Example scripts==&lt;br /&gt;
* PHP script used by the exec IRC bot: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/sn_api.php&lt;br /&gt;
===Usage===&lt;br /&gt;
&amp;lt;pre&amp;gt;Syntax: ~api [%argument1%=%value1% %argument2%=%value2%] [/%element%]&amp;lt;/pre&amp;gt;&lt;br /&gt;
There can be as many argument=value pairs as you like, and the element is optional and corresponds to a key in the json structure&lt;br /&gt;
&amp;lt;pre&amp;gt;~api m=user op=get_uid nick=The Mighty Buzzard /uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The element may also contain forward-slashes that correspond to array levels, allowing you to drill down into an array structure to retrieve a specific piece of data.&lt;br /&gt;
For example, to get the uid of the latest comment:&lt;br /&gt;
&amp;lt;pre&amp;gt;~api m=comment op=latest /0/uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9719</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9719"/>
		<updated>2016-02-12T11:49:50Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* story ops */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is currently live but it's possible it may cease to be that way. In the event that it doesn't though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to perform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50. You may also specify &amp;quot;tid&amp;quot; as an argument. Behavior is however strange currently. If tid is the tid of a topic, you will get stories of that topic from every nexus; if tid belongs to a nexus, you will get stories of every topic within that nexus. This needs to be changed but it would require changing the main site as well.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* pending - returns a json hash containing current submissions and pending stories. takes no arguments&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=pending&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl. Use the topiclist op to obtain a current list of topics.&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;Twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;no GET example will work, the POST method is required. https//soylentnews.org/api.pl?m=story&amp;amp;op=post&amp;amp;subj=&amp;quot;...&amp;quot;&amp;amp;reskey='...'&amp;amp;story='...'&amp;amp;tid='...'&amp;amp;sub_type='...'&amp;amp;primaryskid='...'&amp;amp;name='...'&amp;lt;/pre&amp;gt;&lt;br /&gt;
* nexuslist - returns an array of hashes containing data on every nexus (dev only)&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=nexuslist&amp;lt;/pre&amp;gt;&lt;br /&gt;
* topiclist - returns an array of hashes containing data on every topic (dev only)&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=topiclist&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
*login - Logs you in, duh. Takes nick and pass as mandatory arguments. Currently returns the cookie value. DO NOT USE THE COOKIE VALUE. Use the proper cookie returned in the headers as this will change to a success/failure check only soon. You should also probably do this via POST for security reasons.&lt;br /&gt;
**&amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=auth&amp;amp;op=login&amp;amp;nick=The Mighty Buzzard&amp;amp;pass=ilikecheese&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Errata==&lt;br /&gt;
* The &amp;quot;uid&amp;quot; field data will always be truncated to only leading digits as part of slash internals. uid=18z becomes 18, uid=1z8 becomes 1, uid=z18 becomes a null value. This is expected behavior.&lt;br /&gt;
==Related pages==&lt;br /&gt;
[[SN API ideas]]&lt;br /&gt;
&lt;br /&gt;
==Example scripts==&lt;br /&gt;
* PHP script used by the exec IRC bot: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/sn_api.php&lt;br /&gt;
===Usage===&lt;br /&gt;
&amp;lt;pre&amp;gt;Syntax: ~api [%argument1%=%value1% %argument2%=%value2%] [/%element%]&amp;lt;/pre&amp;gt;&lt;br /&gt;
There can be as many argument=value pairs as you like, and the element is optional and corresponds to a key in the json structure&lt;br /&gt;
&amp;lt;pre&amp;gt;~api m=user op=get_uid nick=The Mighty Buzzard /uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The element may also contain forward-slashes that correspond to array levels, allowing you to drill down into an array structure to retrieve a specific piece of data.&lt;br /&gt;
For example, to get the uid of the latest comment:&lt;br /&gt;
&amp;lt;pre&amp;gt;~api m=comment op=latest /0/uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9718</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9718"/>
		<updated>2016-02-12T11:46:39Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* story ops */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is currently live but it's possible it may cease to be that way. In the event that it doesn't though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to perform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50. You may also specify &amp;quot;tid&amp;quot; as an argument. Behavior is however strange currently. If tid is the tid of a topic, you will get stories of that topic from every nexus; if tid belongs to a nexus, you will get stories of every topic within that nexus. This needs to be changed but it would require changing the main site as well.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* pending - returns a json hash containing current submissions and pending stories. takes no arguments&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=pending&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl:&amp;lt;br&amp;gt; 2=Answers, 4=Slash, 5=Code, 6=News, 9=Hardware, 10=/dev/random, 11=OS, 12=Business, 13=Mobile, 14=Science, 15=Security, 16=Software, 18=Techonomics, 19=Career &amp;amp; Education &amp;lt;br/&amp;gt; On dev you may use the &amp;lt;b&amp;gt;topiclist&amp;lt;/b&amp;gt; story op to obtain a current list of topics.&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;Twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;no GET example will work, the POST method is required. https//soylentnews.org/api.pl?m=story&amp;amp;op=post&amp;amp;subj=&amp;quot;...&amp;quot;&amp;amp;reskey='...'&amp;amp;story='...'&amp;amp;tid='...'&amp;amp;sub_type='...'&amp;amp;primaryskid='...'&amp;amp;name='...'&amp;lt;/pre&amp;gt;&lt;br /&gt;
* nexuslist - returns an array of hashes containing data on every nexus (dev only)&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=nexuslist&amp;lt;/pre&amp;gt;&lt;br /&gt;
* topiclist - returns an array of hashes containing data on every topic (dev only)&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=topiclist&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
*login - Logs you in, duh. Takes nick and pass as mandatory arguments. Currently returns the cookie value. DO NOT USE THE COOKIE VALUE. Use the proper cookie returned in the headers as this will change to a success/failure check only soon. You should also probably do this via POST for security reasons.&lt;br /&gt;
**&amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=auth&amp;amp;op=login&amp;amp;nick=The Mighty Buzzard&amp;amp;pass=ilikecheese&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Errata==&lt;br /&gt;
* The &amp;quot;uid&amp;quot; field data will always be truncated to only leading digits as part of slash internals. uid=18z becomes 18, uid=1z8 becomes 1, uid=z18 becomes a null value. This is expected behavior.&lt;br /&gt;
==Related pages==&lt;br /&gt;
[[SN API ideas]]&lt;br /&gt;
&lt;br /&gt;
==Example scripts==&lt;br /&gt;
* PHP script used by the exec IRC bot: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/sn_api.php&lt;br /&gt;
===Usage===&lt;br /&gt;
&amp;lt;pre&amp;gt;Syntax: ~api [%argument1%=%value1% %argument2%=%value2%] [/%element%]&amp;lt;/pre&amp;gt;&lt;br /&gt;
There can be as many argument=value pairs as you like, and the element is optional and corresponds to a key in the json structure&lt;br /&gt;
&amp;lt;pre&amp;gt;~api m=user op=get_uid nick=The Mighty Buzzard /uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The element may also contain forward-slashes that correspond to array levels, allowing you to drill down into an array structure to retrieve a specific piece of data.&lt;br /&gt;
For example, to get the uid of the latest comment:&lt;br /&gt;
&amp;lt;pre&amp;gt;~api m=comment op=latest /0/uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9717</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9717"/>
		<updated>2016-02-12T11:45:34Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* story ops */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is currently live but it's possible it may cease to be that way. In the event that it doesn't though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to perform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50. You may also specify &amp;quot;tid&amp;quot; as an argument. Behavior is however strange currently. If tid is the tid of a topic, you will get stories of that topic from every nexus; if tid belongs to a nexus, you will get stories of every topic within that nexus. This needs to be changed but it would require changing the main site as well.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* pending - returns a json hash containing current submissions and pending stories. takes no arguments&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=pending&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl:&amp;lt;br&amp;gt; 2=Answers, 4=Slash, 5=Code, 6=News, 9=Hardware, 10=/dev/random, 11=OS, 12=Business, 13=Mobile, 14=Science, 15=Security, 16=Software, 18=Techonomics, 19=Career &amp;amp; Education &amp;lt;b&amp;gt;On dev you may use the topiclist story op to obtain a current list of topics.&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;Twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;no GET example will work, the POST method is required. https//soylentnews.org/api.pl?m=story&amp;amp;op=post&amp;amp;subj=&amp;quot;...&amp;quot;&amp;amp;reskey='...'&amp;amp;story='...'&amp;amp;tid='...'&amp;amp;sub_type='...'&amp;amp;primaryskid='...'&amp;amp;name='...'&amp;lt;/pre&amp;gt;&lt;br /&gt;
* nexuslist - returns an array of hashes containing data on every nexus (dev only)&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=nexuslist&amp;lt;/pre&amp;gt;&lt;br /&gt;
* topiclist - returns an array of hashes containing data on every topic (dev only)&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=topiclist&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
*login - Logs you in, duh. Takes nick and pass as mandatory arguments. Currently returns the cookie value. DO NOT USE THE COOKIE VALUE. Use the proper cookie returned in the headers as this will change to a success/failure check only soon. You should also probably do this via POST for security reasons.&lt;br /&gt;
**&amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=auth&amp;amp;op=login&amp;amp;nick=The Mighty Buzzard&amp;amp;pass=ilikecheese&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Errata==&lt;br /&gt;
* The &amp;quot;uid&amp;quot; field data will always be truncated to only leading digits as part of slash internals. uid=18z becomes 18, uid=1z8 becomes 1, uid=z18 becomes a null value. This is expected behavior.&lt;br /&gt;
==Related pages==&lt;br /&gt;
[[SN API ideas]]&lt;br /&gt;
&lt;br /&gt;
==Example scripts==&lt;br /&gt;
* PHP script used by the exec IRC bot: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/sn_api.php&lt;br /&gt;
===Usage===&lt;br /&gt;
&amp;lt;pre&amp;gt;Syntax: ~api [%argument1%=%value1% %argument2%=%value2%] [/%element%]&amp;lt;/pre&amp;gt;&lt;br /&gt;
There can be as many argument=value pairs as you like, and the element is optional and corresponds to a key in the json structure&lt;br /&gt;
&amp;lt;pre&amp;gt;~api m=user op=get_uid nick=The Mighty Buzzard /uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The element may also contain forward-slashes that correspond to array levels, allowing you to drill down into an array structure to retrieve a specific piece of data.&lt;br /&gt;
For example, to get the uid of the latest comment:&lt;br /&gt;
&amp;lt;pre&amp;gt;~api m=comment op=latest /0/uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9187</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=9187"/>
		<updated>2015-10-05T11:37:52Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* Bots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+1 (BST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || This is a channel which isn't family safe. It's mostly about bacon and stuff' || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||&lt;br /&gt;
* Entertainment&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
* 8ball (your question)&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;country (2 digit code) - country lookup.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;bin2dec &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary2decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal &amp;lt;binary value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;dec2bin &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;decimal2binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;binary &amp;lt;decimal value&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;calc &amp;lt;Equation&amp;gt; - Calculates a mathmatical equation.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;f2c &amp;lt;Fahrenheit&amp;gt; - Fahrenheit =&amp;gt; Celsius.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;c2f &amp;lt;Celsius&amp;gt; - Celsius =&amp;gt; Fahrenheit.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;ft2m &amp;lt;Feet&amp;gt; - Feet =&amp;gt; Meters.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;m2ft &amp;lt;Meters&amp;gt; - Meters =&amp;gt; Feet.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;mi2km &amp;lt;Miles&amp;gt; - Miles =&amp;gt; Kilometers.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;km2mi &amp;lt;Kilometers&amp;gt; - Kilometers =&amp;gt; Miles.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;lb2kgl &amp;lt;Pounds&amp;gt; - Pounds =&amp;gt; Kilograms.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;.&amp;lt;/nowiki&amp;gt;kg2lb &amp;lt;Kilograms&amp;gt; - Kilograms =&amp;gt; Pounds.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;word - word scramble game.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;idle - see who is idle.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;g (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google (.countrycode) (term) - google something.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;google [.google.country.code] [define:|spell:]&lt;br /&gt;
*       &amp;lt;search terms&amp;gt; &amp;lt;1+1&amp;gt; &amp;lt;1 cm in ft&amp;gt; &amp;lt;patent ##&amp;gt;&lt;br /&gt;
*       &amp;lt;weather city|zip&amp;gt; &amp;lt;??? airport&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;images [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;groups [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;news [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;local [.google.country.code] &amp;lt;what&amp;gt; near &amp;lt;where&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;book [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;video [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;fight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trans region@region &amp;lt;text&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamespot &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;gamefaqs &amp;lt;system&amp;gt; in &amp;lt;region&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;blog [.google.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebay [.ebay.country.code] &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ebayfight &amp;lt;word(s) one&amp;gt; vs &amp;lt;word(s) two&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikipedia [.2-digit-country-code] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;wikimedia [.www.wikisite.org[/wiki]] &amp;lt;search terms&amp;gt;[#subtag]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;locate &amp;lt;ip or hostmask&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;review &amp;lt;gamename&amp;gt; [@ &amp;lt;system&amp;gt;]&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;torrent &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;best &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;worst &amp;lt;system&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;rgb2hex (r:XXX g:XXX b:XXX) - converts rgb value to hex.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;hex2rgb (XXXXXX) - converts hex color value to rgb.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;roll (1dX) - rolls a X sided die (1d4, 2d6).&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;disc - discworld quotes&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dict (word) - dictionary, word lookup via princeton.edu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dailymotion &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;ign &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;myspace &amp;lt;search terms&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;trends [.google.country.code] &amp;lt;YYYY-MM-DD&amp;gt; &lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;dawn - random dawn of war quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;bofh - random BOfH quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;duke - random duke nukem quote.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coffee - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;coke - order coffee for you or someone.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;icecream - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;order (nick) (something) - shows menu.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;pizza - shows menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (dev/op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:juggs|juggs]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|Hedonismbot]] ||&lt;br /&gt;
* #&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* =&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get help with commands&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get local weather&amp;lt;br/&amp;gt;&lt;br /&gt;
* Set #weather location&amp;lt;br/&amp;gt;&lt;br /&gt;
* Get time/date/channel/message of the last time someone spoke&amp;lt;br/&amp;gt;&lt;br /&gt;
* Have a libertarian debate&amp;lt;br/&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* #klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* #battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
* #help&amp;lt;br/&amp;gt;&lt;br /&gt;
* #weather&amp;lt;/br&amp;gt;&lt;br /&gt;
* #weatheradd&amp;lt;br/&amp;gt;&lt;br /&gt;
* #seen&amp;lt;br/&amp;gt;&lt;br /&gt;
* #socialist&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Beryllium|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9095</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9095"/>
		<updated>2015-08-20T12:15:58Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* story ops */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is currently live but it's possible it may cease to be that way. In the event that it doesn't though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to perform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50. &amp;lt;b&amp;gt;On dev you may also specify &amp;quot;tid&amp;quot; as an argument. Behavior is however strange currently. If tid is the tid of a topic, you will get stories of that topic from every nexus; if tid belongs to a nexus, you will get stories of every topic within that nexus. This needs to be changed but it would require changing the main site as well.&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* pending - returns a json hash containing current submissions and pending stories. takes no arguments&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=pending&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl:&amp;lt;br&amp;gt; 2=Answers, 4=Slash, 5=Code, 6=News, 9=Hardware, 10=/dev/random, 11=OS, 12=Business, 13=Mobile, 14=Science, 15=Security, 16=Software, 18=Techonomics, 19=Career &amp;amp; Education &amp;lt;b&amp;gt;On dev you may use the topiclist story op to obtain a current list of topics.&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;Twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;no GET example will work, the POST method is required. https//soylentnews.org/api.pl?m=story&amp;amp;op=post&amp;amp;subj=&amp;quot;...&amp;quot;&amp;amp;reskey='...'&amp;amp;story='...'&amp;amp;tid='...'&amp;amp;sub_type='...'&amp;amp;primaryskid='...'&amp;amp;name='...'&amp;lt;/pre&amp;gt;&lt;br /&gt;
* nexuslist - returns an array of hashes containing data on every nexus (dev only)&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=nexuslist&amp;lt;/pre&amp;gt;&lt;br /&gt;
* topiclist - returns an array of hashes containing data on every topic (dev only)&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=topiclist&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
*login - Logs you in, duh. Takes nick and pass as mandatory arguments. Currently returns the cookie value. DO NOT USE THE COOKIE VALUE. Use the proper cookie returned in the headers as this will change to a success/failure check only soon. You should also probably do this via POST for security reasons.&lt;br /&gt;
**&amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=auth&amp;amp;op=login&amp;amp;nick=The Mighty Buzzard&amp;amp;pass=ilikecheese&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Errata==&lt;br /&gt;
* The &amp;quot;uid&amp;quot; field data will always be truncated to only leading digits as part of slash internals. uid=18z becomes 18, uid=1z8 becomes 1, uid=z18 becomes a null value. This is expected behavior.&lt;br /&gt;
==Related pages==&lt;br /&gt;
[[SN API ideas]]&lt;br /&gt;
&lt;br /&gt;
==Example scripts==&lt;br /&gt;
* PHP script used by the exec IRC bot: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/sn_api.php&lt;br /&gt;
===Usage===&lt;br /&gt;
&amp;lt;pre&amp;gt;Syntax: ~api [%argument1%=%value1% %argument2%=%value2%] [/%element%]&amp;lt;/pre&amp;gt;&lt;br /&gt;
There can be as many argument=value pairs as you like, and the element is optional and corresponds to a key in the json structure&lt;br /&gt;
&amp;lt;pre&amp;gt;~api m=user op=get_uid nick=The Mighty Buzzard /uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9094</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9094"/>
		<updated>2015-08-19T14:36:29Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* story ops */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is currently live but it's possible it may cease to be that way. In the event that it doesn't though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to perform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* pending - returns a json hash containing current submissions and pending stories. takes no arguments&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=pending&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl:&amp;lt;br&amp;gt; 2=Answers, 4=Slash, 5=Code, 6=News, 9=Hardware, 10=/dev/random, 11=OS, 12=Business, 13=Mobile, 14=Science, 15=Security, 16=Software, 18=Techonomics, 19=Career &amp;amp; Education &amp;lt;b&amp;gt;An op needs to be added to be able to pull story topics for when they change.&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;Twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;no GET example will work, the POST method is required. https//soylentnews.org/api.pl?m=story&amp;amp;op=post&amp;amp;subj=&amp;quot;...&amp;quot;&amp;amp;reskey='...'&amp;amp;story='...'&amp;amp;tid='...'&amp;amp;sub_type='...'&amp;amp;primaryskid='...'&amp;amp;name='...'&amp;lt;/pre&amp;gt;&lt;br /&gt;
* nexuslist - returns an array of hashes containing data on every nexus (dev only)&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=nexuslist&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
*login - Logs you in, duh. Takes nick and pass as mandatory arguments. Currently returns the cookie value. DO NOT USE THE COOKIE VALUE. Use the proper cookie returned in the headers as this will change to a success/failure check only soon. You should also probably do this via POST for security reasons.&lt;br /&gt;
**&amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=auth&amp;amp;op=login&amp;amp;nick=The Mighty Buzzard&amp;amp;pass=ilikecheese&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Errata==&lt;br /&gt;
* The &amp;quot;uid&amp;quot; field data will always be truncated to only leading digits as part of slash internals. uid=18z becomes 18, uid=1z8 becomes 1, uid=z18 becomes a null value. This is expected behavior.&lt;br /&gt;
==Related pages==&lt;br /&gt;
[[SN API ideas]]&lt;br /&gt;
&lt;br /&gt;
==Example scripts==&lt;br /&gt;
* PHP script used by the exec IRC bot: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/sn_api.php&lt;br /&gt;
===Usage===&lt;br /&gt;
&amp;lt;pre&amp;gt;Syntax: ~api [%argument1%=%value1% %argument2%=%value2%] [/%element%]&amp;lt;/pre&amp;gt;&lt;br /&gt;
There can be as many argument=value pairs as you like, and the element is optional and corresponds to a key in the json structure&lt;br /&gt;
&amp;lt;pre&amp;gt;~api m=user op=get_uid nick=The Mighty Buzzard /uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9092</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9092"/>
		<updated>2015-08-15T11:00:21Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* auth ops */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is currently live but it's possible it may cease to be that way. In the event that it doesn't though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to perform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* pending - returns a json hash containing current submissions and pending stories. takes no arguments&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=pending&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl:&amp;lt;br&amp;gt; 2=Answers, 4=Slash, 5=Code, 6=News, 9=Hardware, 10=/dev/random, 11=OS, 12=Business, 13=Mobile, 14=Science, 15=Security, 16=Software, 18=Techonomics, 19=Career &amp;amp; Education&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;no GET example will work, the POST method is required. https//soylentnews.org/api.pl?m=story&amp;amp;op=post&amp;amp;subj=&amp;quot;...&amp;quot;&amp;amp;reskey='...'&amp;amp;story='...'&amp;amp;tid='...'&amp;amp;sub_type='...'&amp;amp;primaryskid='...'&amp;amp;name='...'&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
*login - Logs you in, duh. Takes nick and pass as mandatory arguments. Currently returns the cookie value. DO NOT USE THE COOKIE VALUE. Use the proper cookie returned in the headers as this will change to a success/failure check only soon. You should also probably do this via POST for security reasons.&lt;br /&gt;
**&amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=auth&amp;amp;op=login&amp;amp;nick=The Mighty Buzzard&amp;amp;pass=ilikecheese&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Errata==&lt;br /&gt;
* The &amp;quot;uid&amp;quot; field data will always be truncated to only leading digits as part of slash internals. uid=18z becomes 18, uid=1z8 becomes 1, uid=z18 becomes a null value. This is expected behavior.&lt;br /&gt;
==Related pages==&lt;br /&gt;
[[SN API ideas]]&lt;br /&gt;
&lt;br /&gt;
==Example scripts==&lt;br /&gt;
* PHP script used by the exec IRC bot: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/sn_api.php&lt;br /&gt;
===Usage===&lt;br /&gt;
&amp;lt;pre&amp;gt;Syntax: ~api [%argument1%=%value1% %argument2%=%value2%] [/%element%]&amp;lt;/pre&amp;gt;&lt;br /&gt;
There can be as many argument=value pairs as you like, and the element is optional and corresponds to a key in the json structure&lt;br /&gt;
&amp;lt;pre&amp;gt;~api m=user op=get_uid nick=The Mighty Buzzard /uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9089</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=9089"/>
		<updated>2015-08-06T11:35:52Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: out of date info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is currently live but it's possible it may cease to be that way. In the event that it doesn't though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to perform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* pending - returns a json hash containing current submissions and pending stories. takes no arguments&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=pending&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl:&amp;lt;br&amp;gt; 2=Answers, 4=Slash, 5=Code, 6=News, 9=Hardware, 10=/dev/random, 11=OS, 12=Business, 13=Mobile, 14=Science, 15=Security, 16=Software, 18=Techonomics, 19=Career &amp;amp; Education&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;no GET example will work, the POST method is required. https//soylentnews.org/api.pl?m=story&amp;amp;op=post&amp;amp;subj=&amp;quot;...&amp;quot;&amp;amp;reskey='...'&amp;amp;story='...'&amp;amp;tid='...'&amp;amp;sub_type='...'&amp;amp;primaryskid='...'&amp;amp;name='...'&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
*login - Logs you in, duh. Takes nick and pass as mandatory arguments. Currently returns the cookie value. DO NOT USE THE COOKIE VALUE. Use the proper cookie returned in the headers as this will change to a success/failure check only soon. You should also probably do this via POST for security reasons.&lt;br /&gt;
**&amp;lt;pre&amp;gt;https://dev.soylentnews.org/api.pl?m=auth&amp;amp;op=login&amp;amp;nick=The Mighty Buzzard&amp;amp;pass=ilikecheese&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Errata==&lt;br /&gt;
* The &amp;quot;uid&amp;quot; field data will always be truncated to only leading digits as part of slash internals. uid=18z becomes 18, uid=1z8 becomes 1, uid=z18 becomes a null value. This is expected behavior.&lt;br /&gt;
==Related pages==&lt;br /&gt;
[[SN API ideas]]&lt;br /&gt;
&lt;br /&gt;
==Example scripts==&lt;br /&gt;
* PHP script used by the exec IRC bot: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/sn_api.php&lt;br /&gt;
===Usage===&lt;br /&gt;
&amp;lt;pre&amp;gt;Syntax: ~api [%argument1%=%value1% %argument2%=%value2%] [/%element%]&amp;lt;/pre&amp;gt;&lt;br /&gt;
There can be as many argument=value pairs as you like, and the element is optional and corresponds to a key in the json structure&lt;br /&gt;
&amp;lt;pre&amp;gt;~api m=user op=get_uid nick=The Mighty Buzzard /uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=SN_API_ideas&amp;diff=9009</id>
		<title>SN API ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=SN_API_ideas&amp;diff=9009"/>
		<updated>2015-05-07T11:22:37Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is dedicated to ideas for the SN API being developed by [[User:TheMightyBuzzard|TheMightyBuzzard]].&lt;br /&gt;
&lt;br /&gt;
==Suggestions from IRC==&lt;br /&gt;
* actually, an api call that would be awesome would be an op where you supply cid and it spits out the sid ~ [[User:crutchy|crutchy]] @ 11:17, 7 October 2014 (UTC)&lt;br /&gt;
* supply cid and get the entire url ~ [[User:crutchy|crutchy]] @ 11:19, 7 October 2014 (UTC)&lt;br /&gt;
* redirect to the full url... or a redirect switch ~ [[User:crutchy|crutchy]] @ 11:20, 7 October 2014 (UTC)&lt;br /&gt;
* need app based access key authorization ~ [[User:TheMightyBuzzard|TheMightyBuzzard]] @ 11:32, 7 October 2014 (UTC)&lt;br /&gt;
** Eh, maybe at some future time. It's less abusable than the web interface already.&lt;br /&gt;
* wikimedia api uses normal login system but designates bots with a bot flag, which are permitted to use the api. maybe SN could do something similar ~ [[User:crutchy|crutchy]] @ 11:46, 7 October 2014 (UTC)&lt;br /&gt;
** Sounds problematic. I don't want to manually review who's a bot and who isn't.&lt;br /&gt;
* maybe make the basic api.pl with no parameters go to a doc page on how to use the api ~ [[User:crutchy|crutchy]] @ 20:53, 7 October 2014 (UTC)&lt;br /&gt;
** It links there, that's better behavior in an API since browsers aren't the target audience.&lt;br /&gt;
* &amp;lt;strike&amp;gt;a queue op to get the number of accepted articles waiting to be put out&amp;lt;/strike&amp;gt; ~ [[User:crutchy|crutchy]] @ 12:31, 16 October 2014 (UTC)&lt;br /&gt;
** Count them yourself using the &amp;quot;pending&amp;quot; story op.&lt;br /&gt;
* get hash of any prod code file to check against personal dev copy ~ [[User:crutchy|crutchy]] @ 12:15, 20 October 2014 (UTC)&lt;br /&gt;
** Newp. Github already supplies this functionality and there are a few files on prod that do not mirror those on github.&lt;br /&gt;
* return username from uid and vice versa ~ [[User:crutchy|crutchy]] @ 12:01, 27 October 2014 (UTC) DONE&lt;br /&gt;
* gotta be at least one easter egg :) ~ [[User:crutchy|crutchy]] @ 13:00, 11 November 2014 (UTC)&lt;br /&gt;
* slashcode api library in php/perl/etc ~ [[User:crutchy|crutchy]] @ 13:06, 20 November 2014 (UTC)&lt;br /&gt;
* submission feed to an irc channel, and ability to meta-mod from irc ~ [[User:crutchy|crutchy]] @ 14:11, 20 November 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Related pages==&lt;br /&gt;
[[ApiDocs]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8999</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8999"/>
		<updated>2015-04-19T17:02:32Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* auth ops */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to perform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* pending - returns a json hash containing current submissions and pending stories. takes no arguments&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=pending&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl:&amp;lt;br&amp;gt; 2=Answers, 4=Slash, 5=Code, 6=News, 9=Hardware, 10=/dev/random, 11=OS, 12=Business, 13=Mobile, 14=Science, 15=Security, 16=Software, 18=Techonomics, 19=Career &amp;amp; Education&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;no GET example will work as the POST method is required.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
*login - Logs you in, duh. Takes nick and pass as mandatory arguments. Currently returns the cookie value. DO NOT USE THE COOKIE VALUE. Use the proper cookie returned in the headers as this will change to a success/failure check only soon. You should also probably do this via POST for security reasons.&lt;br /&gt;
**&amp;lt;pre&amp;gt;https://dev.soylentnews.org/api.pl?m=auth&amp;amp;op=login&amp;amp;nick=The Mighty Buzzard&amp;amp;pass=ilikecheese&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Errata==&lt;br /&gt;
* The &amp;quot;uid&amp;quot; field data will always be truncated to only leading digits as part of slash internals. uid=18z becomes 18, uid=1z8 becomes 1, uid=z18 becomes a null value. This is expected behavior.&lt;br /&gt;
==Related pages==&lt;br /&gt;
[[SN API ideas]]&lt;br /&gt;
&lt;br /&gt;
==Example scripts==&lt;br /&gt;
* PHP script used by the exec IRC bot: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/sn_api.php&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8998</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8998"/>
		<updated>2015-04-19T16:51:12Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* auth ops */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to perform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* pending - returns a json hash containing current submissions and pending stories. takes no arguments&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=pending&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl:&amp;lt;br&amp;gt; 2=Answers, 4=Slash, 5=Code, 6=News, 9=Hardware, 10=/dev/random, 11=OS, 12=Business, 13=Mobile, 14=Science, 15=Security, 16=Software, 18=Techonomics, 19=Career &amp;amp; Education&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;no GET example will work as the POST method is required.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
*login - Logs you in, duh. Takes nick and pass as mandatory arguments. Currently returns the cookie value. DO NOT USE THE COOKIE VALUE. Use the proper cookie returned in the headers. You should probably do this via POST for security reasons.&lt;br /&gt;
**&amp;lt;pre&amp;gt;https://dev.soylentnews.org/api.pl?m=auth&amp;amp;op=login&amp;amp;nick=The Mighty Buzzard&amp;amp;pass=ilikecheese&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Errata==&lt;br /&gt;
* The &amp;quot;uid&amp;quot; field data will always be truncated to only leading digits as part of slash internals. uid=18z becomes 18, uid=1z8 becomes 1, uid=z18 becomes a null value. This is expected behavior.&lt;br /&gt;
==Related pages==&lt;br /&gt;
[[SN API ideas]]&lt;br /&gt;
&lt;br /&gt;
==Example scripts==&lt;br /&gt;
* PHP script used by the exec IRC bot: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/sn_api.php&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=8821</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=8821"/>
		<updated>2015-03-03T20:00:22Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* Bots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC (GMT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || This is a channel which isn't family safe. It's mostly about bacon and stuff' || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||  ||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (dev/op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:juggs|juggs]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|monopoly]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* / (//)&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* ;klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* ;battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Carbon|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=8811</id>
		<title>IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=IRC&amp;diff=8811"/>
		<updated>2015-02-20T11:36:29Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: added MrPlow&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact '''chat@soylentnews.org''' if you are interested in working on one of these projects. Also, the [[SoylentNews:IRC|IRC Page]] has information about getting started with IRC, and the [[IRCVision|IRC vision]] is worth checking out.&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[IRC|IRC Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| [[User:xlefay|xlefay]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC+2 (CEST)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:juggs|juggs]]&lt;br /&gt;
| Co-team leader&lt;br /&gt;
| UTC (GMT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:paulej72|paulej72]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:FunPika|FunPika]]&lt;br /&gt;
| Member&lt;br /&gt;
| UTC-4 (EDT)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Landon|Landon]]&lt;br /&gt;
| Retired Member&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Current Projects==&lt;br /&gt;
&lt;br /&gt;
===Chat bot (Python)===&lt;br /&gt;
* ELIZA module that uses Futurama personalities (to match the bot's current nick)&lt;br /&gt;
* Modify bot logging to match existing formats (mIRC preferably)&lt;br /&gt;
&lt;br /&gt;
===Services (C)===&lt;br /&gt;
* Single sign on against the website (coordinate with NCommander)&lt;br /&gt;
* Get the web IRC to use the website's sessions to sign in&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
* Quick-Start/How-to guide for staff members (.op .topic nickserv commands etc.)&lt;br /&gt;
&lt;br /&gt;
===Misc bots===&lt;br /&gt;
* Anyone wanting to join existing bot development projects should contact the developer(s) noted below.&lt;br /&gt;
&lt;br /&gt;
===IRC Games===&lt;br /&gt;
* NerdRPG&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
*servers&lt;br /&gt;
*bots&lt;br /&gt;
&lt;br /&gt;
[[Category:Teams]]&lt;br /&gt;
[[Category:IRC]]&lt;br /&gt;
&lt;br /&gt;
==Channels==&lt;br /&gt;
&lt;br /&gt;
===Official channels===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| #soylent || General chat/lobby, mostly family-friendly || All SoylentNews Staff&lt;br /&gt;
|-&lt;br /&gt;
| #staff || Public Staff channel - Everyone's welcome to join, but messages from non-voiced are only send to the ops in the channel || All SoylentNews Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #editorial || The home of the SoylentNews editors, here you can volunteer for duty, report typo's &amp;amp; ask for submission tips and the like. || Editors &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #dev || The home of and for developers that help develop our fork of SlashCode. || Development team &amp;amp; IRC staff.&lt;br /&gt;
|-&lt;br /&gt;
| #help || This is the IRC help channel, where IRC operators and others provide help and answer any questions related to IRC you may have. || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #sysops || This is the Sysops homefront, where most of the magic happens. We maintain the servers and services. || Sysops &amp;amp; IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #wiki || This is the Wiki's channel, nothing much happens here except for a bot reporting our every edit on the wiki! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #irpg || This is our &amp;quot;nerdRPG&amp;quot;'s (our fork of idleRPG) channel, feel free to idle along! || IRC Staff.&lt;br /&gt;
|-&lt;br /&gt;
| #test || Main testing chambers, feel free to test anything in here (just be friendly &amp;amp; be considerative) || IRC Staff.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Private establishments (unofficial)===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! Description !! Maintained by&lt;br /&gt;
|-&lt;br /&gt;
| ## || This is a channel which isn't family safe. It's mostly about bacon and stuff' || team-bacon ([[User:kobach|kobach]], [[User:xlefay|xlefay]])&lt;br /&gt;
|-&lt;br /&gt;
| # || the batcave; bot testing/borking, random chaos, exec's home || [[User:Alberto|Alberto]]&lt;br /&gt;
|-&lt;br /&gt;
| #derp || aqu4bot's origin and the portal to Universe 2. Bring own peanut butter. || [[User:Subsentient|Subsentient]]&lt;br /&gt;
|-&lt;br /&gt;
| #sublight || Sublight's bot home ground || [[User:xlefay|xlefay]]&lt;br /&gt;
|-&lt;br /&gt;
| #rss-bot || various rss/atom feeds || [[User:juggs|juggs]]&lt;br /&gt;
|-&lt;br /&gt;
| #debug || bot error spew || [[User:chromas|chromas]]&lt;br /&gt;
|-&lt;br /&gt;
| #comments || soylentnews.org comments feed || [[User:crutchy|crutchy]]&lt;br /&gt;
|-&lt;br /&gt;
| #github || ~github-list repos push feed - checked every 5 mins || [[User:crutchy|crutchy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bots==&lt;br /&gt;
There are a few bots lurking in the Soylent IRC channels besides the services mentioned above.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anyone wishing to develop bots should use #test or # for testing.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please avoid flooding in private establishments and official channels (except #test and #). The #debug channel is used by bots for public error reporting.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! nick !! channels !! triggers !! devs/ops/hosts !! source !! tasks !! usage/notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Aqu4bot|aqu4]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #derp&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* $&amp;lt;br /&amp;gt;&lt;br /&gt;
* aqu4:&lt;br /&gt;
||&lt;br /&gt;
* [[User:Subsentient|Subsentient]] (dev/op)&lt;br /&gt;
|| http://github.com/Subsentient/aqu4bot  ||&lt;br /&gt;
* Memos ($sticky)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Messaging ($tell)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Logging/user tracking&amp;lt;br /&amp;gt;&lt;br /&gt;
* Channel control (in #derp)&lt;br /&gt;
||&lt;br /&gt;
* $sr&amp;lt;br /&amp;gt;&lt;br /&gt;
* $seen&amp;lt;br /&amp;gt;&lt;br /&gt;
* $tell&amp;lt;br /&amp;gt;&lt;br /&gt;
* $help&amp;lt;br /&amp;gt;&lt;br /&gt;
* $burrito&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Bender|Bender]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* ##&amp;lt;br /&amp;gt;&lt;br /&gt;
* #&lt;br /&gt;
||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:paulej72|paulej72]] (op)&lt;br /&gt;
||  || &lt;br /&gt;
* karma&amp;lt;br /&amp;gt;&lt;br /&gt;
* todo&lt;br /&gt;
||&lt;br /&gt;
* coffee++&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;whoup&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;todo stuff&amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;uid&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:ciri|ciri]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]]&lt;br /&gt;
||  ||  ||&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;decide yes &amp;quot;other stuff&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:diego|diego]] ||&lt;br /&gt;
* #soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
|| pircbot + piespy&lt;br /&gt;
|| * Generation of piespy relationship maps for #soylent&lt;br /&gt;
|| http://stats.sylnt.us/social/soylent/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:exec|exec]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #comments&amp;lt;br /&amp;gt;&lt;br /&gt;
* #debug&amp;lt;br /&amp;gt;&lt;br /&gt;
* #github&lt;br /&gt;
||&lt;br /&gt;
* ~&lt;br /&gt;
||&lt;br /&gt;
* [[User:Crutchy|crutchy]] (dev/op)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:chromas|chromas]] (admin)&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[User:juggs|juggs]] (admin)&lt;br /&gt;
|| http://sylnt.us/execsrc ||  ||&lt;br /&gt;
* SN comments feed (in #comments)&amp;lt;br /&amp;gt;&lt;br /&gt;
* GitHub events feed (in #github)&amp;lt;br /&amp;gt;&lt;br /&gt;
* refer to [[IRC:exec#Quick_start|quick start guide]]&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Loggie|Loggie]] ||&lt;br /&gt;
* #Soylent&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]]&lt;br /&gt;
||  ||&lt;br /&gt;
* logging to logs.sylnt.us&lt;br /&gt;
||&lt;br /&gt;
* /invite Loggie&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:monopoly|monopoly]] ||&lt;br /&gt;
* #&amp;lt;br /&amp;gt;&lt;br /&gt;
* #Soylent&lt;br /&gt;
||&lt;br /&gt;
* / (//)&lt;br /&gt;
||&lt;br /&gt;
* [[User:chromas|chromas]] (dev/op)&lt;br /&gt;
||  ||&lt;br /&gt;
* link title output&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:NerdRPG|NerdRPG]] ||&lt;br /&gt;
* #irpg&lt;br /&gt;
||  ||  ||  || &lt;br /&gt;
* outputs game data&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:MrPlow|MrPlow]] ||&lt;br /&gt;
* #Soylent&amp;lt;br /&amp;gt;&lt;br /&gt;
* #test&lt;br /&gt;
||&lt;br /&gt;
* ;&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* [[User:TheMightyBuzzard|The Mighty Buzzard]] (dev/op)&lt;br /&gt;
||   ||&lt;br /&gt;
* Translate to Klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* Get staff attention&amp;lt;br /&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
* ;klingon&amp;lt;br /&amp;gt;&lt;br /&gt;
* ;battlestations&amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:perlbot|perlbot]] ||  ||  ||&lt;br /&gt;
* [[User:Konomi|Konomi]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:Regurgitator|Regurgitator]] ||&lt;br /&gt;
* #rss-bot&lt;br /&gt;
* #soylent&lt;br /&gt;
||&lt;br /&gt;
* !rss&lt;br /&gt;
||&lt;br /&gt;
* [[User:juggs|juggs]] (op)&lt;br /&gt;
||&lt;br /&gt;
Eggdrop v1.8.0+fixbotnetloop http://www.egghelp.org/files.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
rss-synd v0.6 plugin https://github.com/eggtcl/rss-synd&lt;br /&gt;
|| &lt;br /&gt;
* various rss / atom feeds&lt;br /&gt;
* logging only in #soylent for pisg stats&lt;br /&gt;
||&lt;br /&gt;
* #rss-bot !rss to see all feeds. !&amp;lt;feed&amp;gt; to see individual feed contents. Idle in channel to see all feeds.&lt;br /&gt;
* #soylent see pisg output here: http://stats.sylnt.us/pisg/index.html&lt;br /&gt;
|-&lt;br /&gt;
| [[SedBot]] ||  ||  ||&lt;br /&gt;
* [[User:FoobarBazbot|FoobarBazbot]] (dev/op)&lt;br /&gt;
|| https://github.com/FoobarBazbot/sedbot ||&lt;br /&gt;
* message correction&lt;br /&gt;
||&lt;br /&gt;
* s/old/new/&amp;lt;br /&amp;gt;&lt;br /&gt;
* nick: s/old/new/&lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:SoylentMUD|SoylentMUD]] ||  ||  ||&lt;br /&gt;
* [[User:mattie_p|mattie_p]]&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:sublight|sublight]] ||  ||  ||&lt;br /&gt;
* [[User:xlefay|xlefay]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:tama|tama]] ||&lt;br /&gt;
* #&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:arti|arti]] (op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[IRC:TheMightyBot|TheMightyBot]] ||  ||  ||&lt;br /&gt;
* [[User:TheMightyBuzzard|TheMightyBuzzard]] (dev/op)&lt;br /&gt;
||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| [[WikiRC|WikiRC]] ||&lt;br /&gt;
* #wiki&lt;br /&gt;
||  ||&lt;br /&gt;
* [[User:FunPika|FunPika]]&lt;br /&gt;
||  || &lt;br /&gt;
* wiki events feed&lt;br /&gt;
|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Bot projects / task ideas===&lt;br /&gt;
&lt;br /&gt;
* [[IRCiv]] is currently under development for the exec bot and is intended to be a civilization-like building game played on IRC.&lt;br /&gt;
* a Soylent PBC board meeting assistant script is currently under development for the exec bot, intended for minute taking and publishing on the wiki. See [[IRC:exec#Meeting_assistant]] for more details.&lt;br /&gt;
* an IRC voting system. refer to [[IRC:exec#Proposed_IRC_voting_system]] for details.&lt;br /&gt;
* returning data from the SoylentNews using the [[ApiDocs|SlashCode API]]&lt;br /&gt;
&lt;br /&gt;
== Information for Sysops / IRC admins ==&lt;br /&gt;
&lt;br /&gt;
=== Server Related Info ===&lt;br /&gt;
&lt;br /&gt;
{{#lst:Carbon|ircops}}&lt;br /&gt;
&lt;br /&gt;
== Information for IRC Operators ==&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.stack.nl/~jilles/irc/charybdis-oper-guide Charybdis IRC Ops Guide]&lt;br /&gt;
* [http://atheme.net/help/7.0/ Atheme Services Help Pages]&lt;br /&gt;
&lt;br /&gt;
[[Category:IRC]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8779</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8779"/>
		<updated>2015-01-21T14:40:19Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: adding errata&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to perform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* pending - returns a json hash containing current submissions and pending stories. takes no arguments&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=pending&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl:&amp;lt;br&amp;gt; 2=Answers, 4=Slash, 5=Code, 6=News, 9=Hardware, 10=/dev/random, 11=OS, 12=Business, 13=Mobile, 14=Science, 15=Security, 16=Software, 18=Techonomics, 19=Career &amp;amp; Education&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;no GET example will work as the POST method is required.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
&lt;br /&gt;
==Errata==&lt;br /&gt;
* The &amp;quot;uid&amp;quot; field data will always be truncated to only leading digits as part of slash internals. uid=18z becomes 18, uid=1z8 becomes 1, uid=z18 becomes a null value. This is expected behavior.&lt;br /&gt;
==Related pages==&lt;br /&gt;
[[SN API ideas]]&lt;br /&gt;
&lt;br /&gt;
==Example scripts==&lt;br /&gt;
* PHP script used by the exec IRC bot: https://github.com/crutchy-/exec-irc-bot/blob/master/scripts/sn_api.php&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Development&amp;diff=8747</id>
		<title>Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Development&amp;diff=8747"/>
		<updated>2014-12-05T16:00:33Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: Dev roster updated to reflect current status&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TeamPages]] - parent, [[SystemAdministration]]&lt;br /&gt;
&lt;br /&gt;
==Welcome==&lt;br /&gt;
We are currently looking for volunteers to help develop SoylentNews slashcode.  Anyone willing is free to help, but '''we really need good perl devs'''.  Slashcode is based heavily on perl and most pages have some type of perl code on them.  We also seek non-perl devs, there is plenty of stuff that you can do without touching the code too much.&lt;br /&gt;
&lt;br /&gt;
Our code is hosted on GitHub at https://github.com/SoylentNews/slashcode. Have a look and see how you can contribute.  Bugs are now on [https://github.com/SoylentNews/slashcode/issues GitHub Bugs].&lt;br /&gt;
&lt;br /&gt;
Volunteers should send an email to [mailto:dev@soylentnews.org dev@soylentnews.org] expressing your areas of interest and what your coding strengths are.  Also you can hop onto [[SoylentNews:IRC]] and join the #dev channel.  Come by and express your interest to paulej72, audioguy, or [[User:mrcoolbp|mrcoolbp]].  &lt;br /&gt;
&lt;br /&gt;
Currently we are undergoing a bit of a reorganization and we hope to have more information available here soon about our short term and long term goals for the code.&lt;br /&gt;
&lt;br /&gt;
== Who we are ==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[Development|Dev Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| paulej72&amp;lt;ref name=&amp;quot;paulej72_notes&amp;quot;&amp;gt;Working on template and css issues on the site, main bug herder. - email:[mailto:paulej72@soylentnews.org paulej72@soylentnews.org] [[Paulej72WorkNotes]]&amp;lt;/ref&amp;gt;&lt;br /&gt;
| Team Leader for Dev&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| Ncommander&lt;br /&gt;
| Currently on walkabout.&lt;br /&gt;
| UTC-5&lt;br /&gt;
|-&lt;br /&gt;
| martyb/bytram&lt;br /&gt;
| primary bug herder, Database (in training)&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| The Mighty Buzzard&lt;br /&gt;
| Code Monkey Extraordinaire&lt;br /&gt;
| UTC-6 (CST/CDT)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index of Development Pages and Resources ==&lt;br /&gt;
&lt;br /&gt;
Note: Any sort of code posted onto the wiki can now be syntax highlighted using the &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight&amp;gt;&amp;lt;/nowiki&amp;gt; tag. It will default to perl, but can be changed to other languages. For example &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;. More documentation is at [[mediawikiwiki:Extension:SyntaxHighlight_GeSHi]].&lt;br /&gt;
&lt;br /&gt;
* [[ImportantDevelopmentLinks]] - Place to put urls for the repositories, etc. (Use current page for now, this page not needed - YET)&lt;br /&gt;
* [[DevelopmentWorkCurrentlyInProgress]] - what we are working on at this moment &lt;br /&gt;
* [[CodingStyleForOurPerlChanges]] - Suggested style for perl code changes &lt;br /&gt;
* [[DevelopmentVMHowto]] - How to get your own Slash code up in a Virtual Machine using VirtualBox&lt;br /&gt;
* [[CssWork]] - pages for ongoing css work&lt;br /&gt;
* [[SlashDocumentationIndex]] - A single place to find Slash docs, one day it will be organized and accurate&lt;br /&gt;
* [[IncidentLog]] - Documentation of how incidents occurred and how they were mitigated&lt;br /&gt;
* [[GitUse]] - Tutorial/advice on how to use git&lt;br /&gt;
* [[Dev/Sys|To-do]] - A list of items in the pipeline collected from various places&lt;br /&gt;
&lt;br /&gt;
== Work Notes ==&lt;br /&gt;
&lt;br /&gt;
* [[AudioGuyWorkNotes]]&lt;br /&gt;
* [[Paulej72WorkNotes]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[SystemAdministration]] - See this section for actual server details and procedures&lt;br /&gt;
* GitHub https://github.com/SoylentNews/slashcode: Slashcode Repository and Issue Tracker&lt;br /&gt;
* Wiki: Documentation and work logs&lt;br /&gt;
**hosted on the svc linode&lt;br /&gt;
* IRC: real time chat for team communications&lt;br /&gt;
* Slashcott.org: temporary testing server in use until we get ones setup on Linode.&lt;br /&gt;
* Mailman Dev Mailing list: for non-real-time discussions that need a good paper trail.&lt;br /&gt;
* http://dev.mysql.com/doc/refman/5.5/en/index.html - Official docs for mysql we use&lt;br /&gt;
* https://perl.apache.org/start/index.html - modperl docs (We use version 1 with Apache 1.3)&lt;br /&gt;
* http://remote.demmers.org/~audioguy/manual/ - Apache 1.3 docs don't seem to be on the Apache site any more, here they are.&lt;br /&gt;
** http://remote.demmers.org/~audioguy/manual/misc/API.html but this is what is important to understand slash workings with mod perl.&lt;br /&gt;
&lt;br /&gt;
== Slashcode Primer ==&lt;br /&gt;
&lt;br /&gt;
Slashcode is a complex beast.  Here is the listing of the repo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;Bundle&lt;br /&gt;
Slash	&lt;br /&gt;
bin&lt;br /&gt;
docs&lt;br /&gt;
httpd&lt;br /&gt;
plugins&lt;br /&gt;
sbin&lt;br /&gt;
sql&lt;br /&gt;
tagboxes&lt;br /&gt;
themes&lt;br /&gt;
utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We really are only concerned with three of these directories: Slash, plugins, and themes.  The first directory, Slash, is the home of the slash.pm module and its related code.  The module, slash.pm, does all of the back end work of slashcode.  It provides a set of APIs that are used to generate pages and manipulate the database.  This is where the heavy perl coding is done. We definitely need help with this section in both expanding our knowledge and working with the code. (As I started on this from a css/html slant I do not have a good idea of what is here --pauej72)&lt;br /&gt;
&lt;br /&gt;
The second main part of the system are the themes.  In this case we have only one theme called slashcode.  The theme is broken down into pieces the first is htdocs.  htdocs is all of the static html files, perl files that directly start page generation events, the css files, images, and other static code.  The second part of the theme is the templates.  These templates are loaded into the database an are used by slash to layout the data from different sources and turn them into html files that apache can send to the user.  Templates re a mixture of perl, slash coding, and html.  Templates use slash calls to load other templates and usually each template leaves a breadcrumb in the final html with a start and end comment with the template's name and id.  These breadcrumbs make it easy to find out which template file is generating the particular piece of html that you need to change.&lt;br /&gt;
&lt;br /&gt;
Slashcode also has a plugin architecture that allows certain system to be bolted on to the main system. The main system is basically articles, comments and users.  The pulgins add the admin interface, the messaging system, enhanced login, journals, and other things.  The files for these plugging are in the plugins folder, not in the theme folder.  The issue with plugins is that it contains both front end code such as templates, css and pl files, it also has perl modules that are loaded into the perl engine. &lt;br /&gt;
&lt;br /&gt;
The rest of the directories are used for build and install purposes and probably will not need to be modified regularly.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress so please check back here for more.&lt;br /&gt;
&lt;br /&gt;
== Development VM ==&lt;br /&gt;
&lt;br /&gt;
Please see [[DevelopmentVMHowto]] for the full How To.&lt;br /&gt;
&lt;br /&gt;
Additional notes: http://soylentnews.org/~crutchy/journal/114&lt;br /&gt;
&lt;br /&gt;
==Integrated Development Environment==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sub&amp;gt;'''Note''' This is a work in progress. Currently the Windows development environment seems mostly useless except for Syntax Highlighting and basic Code Navigation.&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Regardless of what IDE (''Integrated Development Environment'') you choose to go with, you're going to require a Perl interpreter (With a built-in Debugger) and optionally the PadWalker module, for variable inspection (Also used by built-in debugger).&lt;br /&gt;
&lt;br /&gt;
=== Perl (Interpreter) ===&lt;br /&gt;
:Linux users generally already have a full Perl stack installed, so this resource is for Windows users. There's a number of different Perl interpreters available for Windows users. You can download ActivePerl for free below:&lt;br /&gt;
&lt;br /&gt;
::* [http://www.activestate.com/activeperl/downloads www.activestate.com/activeperl/downloads]&lt;br /&gt;
&lt;br /&gt;
=== PadWalker (Variable Inspection) ===&lt;br /&gt;
:* [http://perlmaven.com/padwalker perlmaven.com/padwalker]&lt;br /&gt;
&lt;br /&gt;
=== IDEs ===&lt;br /&gt;
==== Eclipse ====&lt;br /&gt;
:Eclipse with the ''EPIC'' Plug-In provides a great Perl IDE for Windows users. After installing ActivePerl and the PadWalker module you will need to install a Java Runtime.&lt;br /&gt;
&lt;br /&gt;
:'''Before you Begin:''' It's important to note that if you are running 64-bit Windows, you should choose the 64-bit JRE and pair it with a 64-bit Eclipse. They cannot be mis-matched (A 32-bit JRE with a 64-bit Eclipse or vice versa).&lt;br /&gt;
&lt;br /&gt;
:'''Step 1)''':&lt;br /&gt;
:: Download Oracle's runtime for free below. You can choose the JRE (Runtime Environment) if you only want to do Perl/Slashcode development or the JDK (Development Kit) if you want to do Perl/Slashcode development and Java development in the future. Choosing the JRE will save you disk space:&lt;br /&gt;
:: [http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html Java Runtime Environment 7u55]&lt;br /&gt;
:: [http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html Java Developer Kit 7u55]&lt;br /&gt;
&lt;br /&gt;
:'''Step 1.1)''':&lt;br /&gt;
:: After you have installed the JRE and restarted Windows, follow this guide from Oracle to setup the environment variables for Windows, including the PATH and CLASSPATH variables:&lt;br /&gt;
:: [http://docs.oracle.com/javase/tutorial/essential/environment/paths.html Environment Paths]&lt;br /&gt;
&lt;br /&gt;
:'''Step 2)''':&lt;br /&gt;
:: Install the Eclipse IDE. You can download the latest release (Kepler) for free below:&lt;br /&gt;
:: [http://eclipse.org/downloads/packages/eclipse-standard-432/keplersr2 Eclipse Kepler]&lt;br /&gt;
&lt;br /&gt;
:'''Step 3)''':&lt;br /&gt;
::Install the free ''&amp;quot;EPIC&amp;quot;'' plug-in for Eclipse. This is done from within Eclipse and is fairly straight forward. From within Eclipse, click the &amp;quot;Help&amp;quot; top strip-menu and choose the &amp;quot;Install New Software&amp;quot; option. You can also find detailed instructions below, however they may become out of date:&lt;br /&gt;
:: [http://www.epic-ide.org/download.php www.epic-ide.org/download.php]&amp;lt;br /&amp;gt;&lt;br /&gt;
==== Geany ====&lt;br /&gt;
::As an alternative to Eclipse, you can try Geany. Geany isn't exactly a full IDE like Eclipse, however you can setup the file locations of Perl and get a pretty good workflow going. You can download Geany for free below:&lt;br /&gt;
&lt;br /&gt;
::: [http://www.geany.org/Download/Releases www.geany.org/Download/Releases]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Teams]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8722</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8722"/>
		<updated>2014-11-22T13:38:34Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: added pending op to story ops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to preform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* pending - returns a json hash containing current submissions and pending stories. takes no arguments&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=pending&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl:&amp;lt;br&amp;gt; 2=Answers, 4=Slash, 5=Code, 6=News, 9=Hardware, 10=/dev/random, 11=OS, 12=Business, 13=Mobile, 14=Science, 15=Security, 16=Software, 18=Techonomics, 19=Career &amp;amp; Education&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;no GET example will work as the POST method is required.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8710</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8710"/>
		<updated>2014-11-20T13:17:12Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: lack of example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to preform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl:&amp;lt;br&amp;gt; 2=Answers, 4=Slash, 5=Code, 6=News, 9=Hardware, 10=/dev/random, 11=OS, 12=Business, 13=Mobile, 14=Science, 15=Security, 16=Software, 18=Techonomics, 19=Career &amp;amp; Education&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;no GET example will work as the POST method is required.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8709</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8709"/>
		<updated>2014-11-20T13:11:37Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: added reskey op to docs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to preform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl:&amp;lt;br&amp;gt; 2=Answers, 4=Slash, 5=Code, 6=News, 9=Hardware, 10=/dev/random, 11=OS, 12=Business, 13=Mobile, 14=Science, 15=Security, 16=Software, 18=Techonomics, 19=Career &amp;amp; Education&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8708</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8708"/>
		<updated>2014-11-20T13:11:00Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: added reskey op to docs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to preform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* reskey - returns a reskey for later use in the post op. takes no arguments.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=reskey&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, reskey, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&amp;lt;br&amp;gt;reskey comes from a previous call to the m=comment&amp;amp;op=reskey op&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;ten seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl:&amp;lt;br&amp;gt; 2=Answers, 4=Slash, 5=Code, 6=News, 9=Hardware, 10=/dev/random, 11=OS, 12=Business, 13=Mobile, 14=Science, 15=Security, 16=Software, 18=Techonomics, 19=Career &amp;amp; Education&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8706</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8706"/>
		<updated>2014-11-19T17:55:34Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: added post op to story ops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to preform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - submit a story. subj, reskey, story, tid, sub_type, and primaryskid are required. name is optional.&amp;lt;br&amp;gt;POST method is absolutely required for submissions&amp;lt;br&amp;gt;primaryskid should be set to 1 until nexuses are working&amp;lt;br&amp;gt;sub_type should be either &amp;quot;plain&amp;quot; or &amp;quot;html&amp;quot;&amp;lt;br&amp;gt;reskey comes from a previous call to the m=story&amp;amp;op=reskey op&amp;lt;br&amp;gt;name, subj, and story are up to you&amp;lt;br&amp;gt;tid the topic and is the same as the values on submit.pl:&amp;lt;br&amp;gt; 2=Answers, 4=Slash, 5=Code, 6=News, 9=Hardware, 10=/dev/random, 11=OS, 12=Business, 13=Mobile, 14=Science, 15=Security, 16=Software, 18=Techonomics, 19=Career &amp;amp; Education&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;twenty seconds are required between reskey creation and use so do a reskey creation call before allowing the user to enter data&amp;lt;/b&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Suggestions&amp;diff=8698</id>
		<title>Suggestions</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Suggestions&amp;diff=8698"/>
		<updated>2014-11-16T13:31:30Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: suggestion long since done&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this page: http://sylnt.us/suggest&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This is a compilation of Suggestions from various users. Think of it like a &amp;quot;wish list&amp;quot;. These differ from feature requests in that they are projects that may require a significant amount of time to implement. A system should be developed for selecting from one, and having the community vote on which to tackle.&lt;br /&gt;
&lt;br /&gt;
Suggestions can currently be added via suggestions@soylentnews.org, or by typing &amp;quot;~suggest [your suggestion here]&amp;quot; in our IRC rooms (must be identified with NickServ). You can also just add them below (must be signed up / logged into wiki). You should check the [https://github.com/SoylentNews/slashcode/issues bug tracker on github] for bugs and feature requests, the [[TodoList]], or the respective team page before suggesting something to see if it is already being worked on.&lt;br /&gt;
&lt;br /&gt;
Teams: feel free to draw from the following main and IRC suggestion lists and move to a todo list if you would like to tackle one (please remove from here if you do).&lt;br /&gt;
&lt;br /&gt;
==Related pages==&lt;br /&gt;
* [[SNPodcast]]&lt;br /&gt;
* [[Spreading the word]]&lt;br /&gt;
* [[IRC#Bot_projects_.2F_task_ideas|IRC bot projects / task ideas]]&lt;br /&gt;
* [[SN API ideas]]&lt;br /&gt;
* [[ApiDocs|SlashCode API]]&lt;br /&gt;
&lt;br /&gt;
==Suggestions: Main List==&lt;br /&gt;
*SoylentNewsRoundup or SNR (best stories, comments, journals, best of IRC)&lt;br /&gt;
*Articles Revisited: (by +5 commenters)&lt;br /&gt;
**research, correct, expand&lt;br /&gt;
**re-submit to topic &amp;quot;revisited.soylentnews.org&amp;quot;&lt;br /&gt;
**example: [[Articles:Watch_the_Watchers_with_Federal_Contracts_Database|Here]]&lt;br /&gt;
**Submit story for discussion/publicizing idea&lt;br /&gt;
*Add a &amp;quot;settled arguments&amp;quot; section to the wiki (example: the world population is out of control!)&lt;br /&gt;
*Add markdown support in SoylentNews ex: http://dillinger.io/&lt;br /&gt;
*SoylentNews alternate logo S/N (signal/noise) (also SN = Tin atomic symbol)&lt;br /&gt;
*Allow users to mod stories down.&lt;br /&gt;
*Allow up-modding of journal entries&lt;br /&gt;
*Host our own advertisements&lt;br /&gt;
**Keep them in separate areas (sidebars, boxes)&lt;br /&gt;
**Keep them (mostly) static&lt;br /&gt;
**Keep the off-site javascript requirements for them minimal&lt;br /&gt;
*Banner ads that people can use as forum signatures, etc. to spread the word about SoylentNews. See [[Banner ads|this archived forum thread]] for more information.&lt;br /&gt;
*Extend validity of mod points (new mod points only awarded once old mod points were used up, but once a user gets mod points he can use them for 3-4 days for topics he cares about instead of just using them up)&lt;br /&gt;
*add a field for 'submitters' comment' feature to the story submission process (see [https://soylentnews.org/~drussell/journal/543 this journal entry])&lt;br /&gt;
&lt;br /&gt;
==Suggestions from IRC==&lt;br /&gt;
* for moderation, maybe allow anyone to moderate at any time as long as they are logged in and haven't contributed to the conversation, and only have a 'report spam' option as the only negative mod available ~ [[User:crutchy|crutchy]] @ 02:11, 13 September 2014 (UTC)&lt;br /&gt;
* put a link to the story queue on the front page instead of burying it under submit story :) ~ [[User:SpallsHurgenson|SpallsHurgenson]] @ 02:52, 17 September 2014 (UTC)&lt;br /&gt;
* cofee++ karma slashbox ~ [[User:crutchy|crutchy]] @ 07:22, 18 September 2014 (UTC)&lt;br /&gt;
* community-building: soylent could 'borrow' the nation states model (maybe with some modifications) and embed it into the SN community/karma/mod/relationship systems ~ [[User:crutchy|crutchy]] @ 08:03, 18 September 2014 (UTC)&lt;br /&gt;
* increase karma to maybe 10,000, have badge for number of comments posted, have badge for number of accepted stories, have badge for high levels of karma (bronze for 50+, silver for 250+ and gold for 500+ or something like that) ~ [[User:crutchy|crutchy]] @ 17:32, 18 September 2014 (UTC)&lt;br /&gt;
* Show users their own AC comments in their history ~ [[User:chromas|chromas]] @ 07:31, 22 September 2014 (UTC)&lt;br /&gt;
* if &amp;quot;comments are owned by whoever posted them&amp;quot; does that mean Soylent PBC has the right to publish them? just a comment on licensing ~ [[User:crutchy|crutchy]] @ 08:40, 22 September 2014 (UTC)&lt;br /&gt;
* TheMightyBuzzard make an irc bot for SN api suggestions :D ~ [[User:crutchy|crutchy]] @ 10:58, 22 September 2014 (UTC)&lt;br /&gt;
* 'xkcd of the week' slashbox.  perhaps start with random xkcd and adjust if an xkcd has been mentioned in a comment/story/wiki edit/journal/irc chat/etc ~ [[User:crutchy|crutchy]] @ 00:44, 27 September 2014 (UTC)&lt;br /&gt;
* badges for no. of +5 comments (maybe inc separate funny, informative, etc). badge for no. of successful story submits ~ [[User:crutchy|crutchy]] @ 04:00, 28 September 2014 (UTC)&lt;br /&gt;
* need a way to submit SoylentNews bugs/issues without having to sign up to github, and also would be handy to have scripty check for similar existing issues and either automagically append or link to related issues ~ [[User:crutchy|crutchy]] @ 05:37, 28 September 2014 (UTC)&lt;br /&gt;
* write a scripty that extracts comments that don't include certain keywords (such as systemd) ~ [[User:crutchy|crutchy]] @ 09:58, 2 October 2014 (UTC)&lt;br /&gt;
* a compiled gui client application for SN, with integrated IRC, wiki, auto-login, feeds (based on keywords, username, topic, etc), treeview for comments, user relationship diagram, metadata collection for stats on users (such as no of comments, no of -1/0/1/2/3/4/5 comments, no of accepted submission...&lt;br /&gt;
* crutchy to build the above client ~ [[User:TheMightyBuzzard|TheMightyBuzzard]] @ 10:16, 2 October 2014 (UTC)&lt;br /&gt;
* community-building: free subscription to SN as prize for various activities, such as coding/bugsmashing comps, 50x+5 comments, etc (sorry not many ideas). not sure of legalities of prizes ~ [[User:crutchy|crutchy]] @ 19:00, 2 October 2014 (UTC)&lt;br /&gt;
* for SN client IRC module, a bar that shows the last line (or last few lines) said out of all channels that user is in ~ [[User:crutchy|crutchy]] @ 02:59, 5 October 2014 (UTC)&lt;br /&gt;
* we get moar meta moderation ~ [[User:crutchy|crutchy]] @ 11:09, 8 October 2014 (UTC)&lt;br /&gt;
* IRC op policy development ~ [[User:crutchy|crutchy]] @ 05:22, 19 October 2014 (UTC)&lt;br /&gt;
* incoming tweet feed for irc ~ [[User:crutchy|crutchy]] @ 21:33, 30 October 2014 (UTC)&lt;br /&gt;
* if #soylent becomes unruly could always make a server bot automatically redirect quotes containing keywords to a particular channel. then anyone that's interested can congregate there ~ [[User:crutchy|crutchy]] @ 04:13, 1 November 2014 (UTC)&lt;br /&gt;
* or if one person in particular becomes unruly, instead of banning them the server bot could be instructed to redirect all that nick's messages to some other channel with a message indicating where when first enabled ~ [[User:crutchy|crutchy]] @ 04:15, 1 November 2014 (UTC)&lt;br /&gt;
* a slashbox on SN showing the latest few privmsgs from #soylent ~ [[User:crutchy|crutchy]] @ 09:58, 3 November 2014 (UTC)&lt;br /&gt;
* irc polls published in a SN slashbox ~ [[User:crutchy|crutchy]] @ 23:44, 3 November 2014 (UTC)&lt;br /&gt;
* a user setting in SN that replaces every instance of a particular word with another word, such as &amp;quot;cloud&amp;quot; could be changed to &amp;quot;butt&amp;quot; (i know there's a firefox plugin for cloud to butt, but for any word in just SN) ~ [[User:crutchy|crutchy]] @ 09:07, 8 November 2014 (UTC)&lt;br /&gt;
* indication of logged in users ~ [[User:crutchy|crutchy]] @ 06:54, 14 November 2014 (UTC)&lt;br /&gt;
* slashbox with diego's relationship map (http://stats.sylnt.us/social/soylent/) shrunk down, with caption &amp;quot;who's chatting on irc?&amp;quot; ~ [[User:crutchy|crutchy]] @ 11:20, 16 November 2014 (UTC)&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Hydrogen&amp;diff=8695</id>
		<title>Hydrogen</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Hydrogen&amp;diff=8695"/>
		<updated>2014-11-15T12:15:06Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: added a br&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#lst:SystemAdministration/Special:Includes|server_header}}&lt;br /&gt;
== Description ==&lt;br /&gt;
&amp;lt;b&amp;gt;This server is currently down&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
This server is a Linode 4G server running Ubuntu Linux 14.04 which functions as the one of main front end server, the web server can be reached [https://soylentnews.org/ here].&lt;br /&gt;
&lt;br /&gt;
== Services running on this host ==&lt;br /&gt;
Any services that is prepended with an exclamation mark is not yet being monitored by our Icinga instance.&lt;br /&gt;
&amp;lt;section begin=services /&amp;gt;&lt;br /&gt;
* ![[Soylent-www|Varnish]]&lt;br /&gt;
* ![[Soylent-www|Memcache]]&lt;br /&gt;
* ![[Soylent-www|Gluster]]&lt;br /&gt;
* ![[Soylent-www|Apache 1.3/httpd]]&lt;br /&gt;
* OpenSSH&lt;br /&gt;
* ntpd&lt;br /&gt;
&amp;lt;section end=services /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SystemAdministration/Servers]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Hydrogen&amp;diff=8694</id>
		<title>Hydrogen</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Hydrogen&amp;diff=8694"/>
		<updated>2014-11-15T12:14:20Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: needed to be noted that the server was not in use&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#lst:SystemAdministration/Special:Includes|server_header}}&lt;br /&gt;
== Description ==&lt;br /&gt;
&amp;lt;b&amp;gt;This server is currently down&amp;lt;/b&amp;gt;&lt;br /&gt;
This server is a Linode 4G server running Ubuntu Linux 14.04 which functions as the one of main front end server, the web server can be reached [https://soylentnews.org/ here].&lt;br /&gt;
&lt;br /&gt;
== Services running on this host ==&lt;br /&gt;
Any services that is prepended with an exclamation mark is not yet being monitored by our Icinga instance.&lt;br /&gt;
&amp;lt;section begin=services /&amp;gt;&lt;br /&gt;
* ![[Soylent-www|Varnish]]&lt;br /&gt;
* ![[Soylent-www|Memcache]]&lt;br /&gt;
* ![[Soylent-www|Gluster]]&lt;br /&gt;
* ![[Soylent-www|Apache 1.3/httpd]]&lt;br /&gt;
* OpenSSH&lt;br /&gt;
* ntpd&lt;br /&gt;
&amp;lt;section end=services /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SystemAdministration/Servers]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=SystemAdministration/Services&amp;diff=8693</id>
		<title>SystemAdministration/Services</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=SystemAdministration/Services&amp;diff=8693"/>
		<updated>2014-11-15T12:12:46Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: Added Fluorine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= A list of all services on li649-22 machines. =&lt;br /&gt;
&lt;br /&gt;
Any services that is prepended with an exclamation mark is not yet being monitored by our Icinga instance. &lt;br /&gt;
&lt;br /&gt;
If a service is missing from a node, please edit the node's page directly, this page only transcludes sections from the node pages.&lt;br /&gt;
&lt;br /&gt;
== [[SystemAdministration/Server/Boron|Boron]] ==&lt;br /&gt;
&lt;br /&gt;
{{#lst:SystemAdministration/Server/Boron|services}}&lt;br /&gt;
== [[SystemAdministration/Server/Lithium|Lithium]] ==&lt;br /&gt;
&lt;br /&gt;
{{#lst:SystemAdministration/Server/Lithium|services}}&lt;br /&gt;
== [[SystemAdministration/Server/Carbon|Carbon]] ==&lt;br /&gt;
&lt;br /&gt;
{{#lst:SystemAdministration/Server/Carbon|services}}&lt;br /&gt;
== [[SystemAdministration/Server/Hydrogen|Hydrogen]] ==&lt;br /&gt;
&lt;br /&gt;
{{#lst:SystemAdministration/Server/Hydrogen|services}}&lt;br /&gt;
== [[SystemAdministration/Server/Fluorine|Fluorine]] ==&lt;br /&gt;
&lt;br /&gt;
{{#lst:SystemAdministration/Server/Fluorine|services}}&lt;br /&gt;
== [[SystemAdministration/Server/Helium|Helium]] ==&lt;br /&gt;
&lt;br /&gt;
{{#lst:SystemAdministration/Server/Helium|services}}&lt;br /&gt;
== [[SystemAdministration/Server/Oxygen|Oxygen]] ==&lt;br /&gt;
&lt;br /&gt;
{{#lst:SystemAdministration/Server/Oxygen|services}}&lt;br /&gt;
== [[SystemAdministration/Server/Beryllium|Beryllium]] ==&lt;br /&gt;
&lt;br /&gt;
{{#lst:SystemAdministration/Server/Beryllium|services}}&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8683</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8683"/>
		<updated>2014-11-12T21:11:52Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: typos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to preform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8682</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8682"/>
		<updated>2014-11-12T18:44:38Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: added post to comment ops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to preform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* post - posts a comment. sid, postersubj, posttype, and postercomment are required.&amp;lt;br&amp;gt;sid may be numeric or in &amp;quot;14/08/07/1647258&amp;quot; form.&amp;lt;br&amp;gt;preview=1 will return a json-encoded preview exactly as it would be included on the webpage for viewing.&amp;lt;br&amp;gt;to reply to another comment, set pid = the comment to reply to's cid.&amp;lt;br&amp;gt;I very much suggest you use a POST request here or it will be a huge pain to fill out postercomment properly and you will be limited by GET request max length.&amp;lt;br&amp;gt;posttype is as follows: 1 Plain Old Text, 2 HTML, 3 Extrans (HTML tags to text), 4 Code&lt;br /&gt;
** &amp;lt;pre&amp;gt;http://tmbvm.ddns.net/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;preview=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;http://tmbvm.ddns.net/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;http://tmbvm.ddns.net/api.pl?m=comment&amp;amp;op=post&amp;amp;sid=1128&amp;amp;postersubj=chickenbutt&amp;amp;postercomment=man+who+cares+even+more&amp;amp;posttype=1&amp;amp;pid=27719&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8677</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8677"/>
		<updated>2014-11-11T12:49:21Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: closed pre tags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to preform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8676</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8676"/>
		<updated>2014-11-11T12:48:38Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: added journal ops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to preform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
* latest - returns the latest 20 journal entries. optionally takes &amp;quot;limit&amp;quot; and &amp;quot;uid&amp;quot; as arguments. limit specifies the number of results while uid specifies only entries by the user with that uid.&amp;lt;br&amp;gt;limit may be anything in the range of 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;limit=42&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=latest&amp;amp;uid=2&amp;amp;limit=3&lt;br /&gt;
* Single - returns a single journal entry specified by the argument &amp;quot;id&amp;quot;. This is a journal id not a story id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=journal&amp;amp;op=single&amp;amp;id=204&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=SN_API_ideas&amp;diff=8672</id>
		<title>SN API ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=SN_API_ideas&amp;diff=8672"/>
		<updated>2014-11-08T11:54:28Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is dedicated to ideas for the SN API being developed by [[User:TheMightyBuzzard|TheMightyBuzzard]].&lt;br /&gt;
&lt;br /&gt;
==Suggestions from IRC==&lt;br /&gt;
* actually, an api call that would be awesome would be an op where you supply cid and it spits out the sid ~ [[User:crutchy|crutchy]] @ 11:17, 7 October 2014 (UTC)&lt;br /&gt;
* supply cid and get the entire url ~ [[User:crutchy|crutchy]] @ 11:19, 7 October 2014 (UTC)&lt;br /&gt;
* redirect to the full url... or a redirect switch ~ [[User:crutchy|crutchy]] @ 11:20, 7 October 2014 (UTC)&lt;br /&gt;
* need app based access key authorization ~ [[User:TheMightyBuzzard|TheMightyBuzzard]] @ 11:32, 7 October 2014 (UTC)&lt;br /&gt;
* wikimedia api uses normal login system but designates bots with a bot flag, which are permitted to use the api. maybe SN could do something similar ~ [[User:crutchy|crutchy]] @ 11:46, 7 October 2014 (UTC)&lt;br /&gt;
* maybe make the basic api.pl with no parameters go to a doc page on how to use the api ~ [[User:crutchy|crutchy]] @ 20:53, 7 October 2014 (UTC)&lt;br /&gt;
* a queue op to get the number of accepted articles waiting to be put out ~ [[User:crutchy|crutchy]] @ 12:31, 16 October 2014 (UTC)&lt;br /&gt;
* get hash of any prod code file to check against personal dev copy ~ [[User:crutchy|crutchy]] @ 12:15, 20 October 2014 (UTC)&lt;br /&gt;
* return username from uid and vice versa ~ [[User:crutchy|crutchy]] @ 12:01, 27 October 2014 (UTC) &amp;lt;b&amp;gt;DONE&amp;lt;/b&amp;gt;&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8656</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8656"/>
		<updated>2014-11-07T15:15:32Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: minor edit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to preform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
===journal ops===&lt;br /&gt;
&lt;br /&gt;
===auth ops===&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8655</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8655"/>
		<updated>2014-11-07T15:08:48Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: added comment ops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to preform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
===comment ops===&lt;br /&gt;
* latest - returns the latest 50 comments without argument or all comments since the comment id supplied in the argument &amp;quot;since&amp;quot;.&amp;lt;br&amp;gt;if &amp;quot;since&amp;quot; is not numeric, the latest 50 are returned.&amp;lt;br&amp;gt;if since is too high, an empty json array is returned&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=latest&amp;amp;since=27700&amp;lt;/pre&amp;gt;&lt;br /&gt;
* discussion - returns all comments in a discussion. takes &amp;quot;sid&amp;quot; as an argument. sid must be the numeric story id here unlike with m=story&amp;amp;op=single.&amp;lt;br&amp;gt;returns an empty 200 on error. this should be fixed.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=discussion&amp;amp;sid=1117&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single comment specified by the &amp;quot;cid&amp;quot; argument.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=comment&amp;amp;op=single&amp;amp;cid=27698&amp;lt;/pre&amp;gt;&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
===journal ops===&lt;br /&gt;
===auth ops===&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8654</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8654"/>
		<updated>2014-11-07T14:51:08Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: added story ops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to preform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
===comment ops===&lt;br /&gt;
===story ops===&lt;br /&gt;
* latest - returns the latest 10 stories. optionally takes &amp;quot;limit&amp;quot; as an argument for the number of stories returned, which may range from 1-50.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=latest&amp;amp;limit=42&amp;lt;/pre&amp;gt;&lt;br /&gt;
* single - returns a single story. takes &amp;quot;sid&amp;quot; as an option. may be in the form of either sid=14/08/07/1647258 or sid=832. returns an empty 200 on error.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=14/08/07/1647258&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=story&amp;amp;op=single&amp;amp;sid=832&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
===journal ops===&lt;br /&gt;
===auth ops===&lt;br /&gt;
===default===&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8653</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8653"/>
		<updated>2014-11-07T14:30:14Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to preform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
===comment ops===&lt;br /&gt;
===story ops===&lt;br /&gt;
===journal ops===&lt;br /&gt;
===auth ops===&lt;br /&gt;
===default===&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8652</id>
		<title>ApiDocs</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=ApiDocs&amp;diff=8652"/>
		<updated>2014-11-07T14:28:24Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: Initial creation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
==Foreword==&lt;br /&gt;
This is the documentation for the upcoming SoylentNews API that I'm working on. It is by no means live and it's possible it may never become that way. In the event that it does though, I want it documented so people can actually start building against it right off.&lt;br /&gt;
&lt;br /&gt;
As of now the API is read only and does not feature authorization or anything that should require the code to auth.&lt;br /&gt;
&lt;br /&gt;
==Layout==&lt;br /&gt;
Code is arranged with methods (m=foo) being the highest order of operation, each able to preform several ops (m=foo&amp;amp;op=bar, m=foo&amp;amp;op=baz). Each op requires or allows different arguments, depending on what is being done.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
The top level methods are as follows:&lt;br /&gt;
* user&lt;br /&gt;
** operations on users such as looking up a uid by nickname or vice versa&lt;br /&gt;
* comment&lt;br /&gt;
** operations on comments like getting the latest or an entire discussion's comments&lt;br /&gt;
* story&lt;br /&gt;
** operations on stories such as getting the latest or a single story&lt;br /&gt;
* journal&lt;br /&gt;
** not yet implemented&lt;br /&gt;
* auth&lt;br /&gt;
** not yet implemented &lt;br /&gt;
* default &lt;br /&gt;
** any other method currently returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
The operations for each method are as follows:&lt;br /&gt;
===user ops===&lt;br /&gt;
* max_uid - takes no arguments and returns the highest user id.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=max_uid&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_uid - takes &amp;quot;nick&amp;quot; as an argument and returns the uid associated or null if there is no such user.&amp;lt;br&amp;gt;the following are all equivilent:&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The Mighty Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The+Mighty+Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_uid&amp;amp;nick=The%20Mighty%20Buzzard&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_nick - takes &amp;quot;uid&amp;quot; as an argument and returns the nickname associated or null if there is no such user.&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_nick&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* get_user - takes &amp;quot;uid&amp;quot; as an argument and returns full &amp;lt;b&amp;gt;public&amp;lt;/b&amp;gt; user information for the user&lt;br /&gt;
** &amp;lt;pre&amp;gt;https://soylentnews.org/api.pl?m=user&amp;amp;op=get_user&amp;amp;uid=18&amp;lt;/pre&amp;gt;&lt;br /&gt;
* default - any other op returns an empty 200 status. error text would not be a bad idea though.&lt;br /&gt;
===comment ops===&lt;br /&gt;
===story ops===&lt;br /&gt;
===journal ops===&lt;br /&gt;
===auth ops===&lt;br /&gt;
===default===&lt;br /&gt;
Currently&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Historic:Finances/Archive&amp;diff=8459</id>
		<title>Historic:Finances/Archive</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Historic:Finances/Archive&amp;diff=8459"/>
		<updated>2014-09-15T19:43:18Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: Replaced content with &amp;quot;Rewrite coming very soon. This page was extremely dated and has been archived here.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rewrite coming very soon. This page was extremely dated and has been archived [[FinancesARCHIVED|here]].&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Development&amp;diff=7841</id>
		<title>Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Development&amp;diff=7841"/>
		<updated>2014-07-09T04:21:36Z</updated>

		<summary type="html">&lt;p&gt;The Mighty Buzzard: /* Who we are */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TeamPages]] - parent, [[SystemAdministration]]&lt;br /&gt;
&lt;br /&gt;
==Welcome==&lt;br /&gt;
We are currently looking for volunteers to help develop SoylentNews slashcode.  Anyone willing is free to help, but '''we really need good perl devs'''.  Slashcode is based heavily on perl and most pages have some type of perl code on them.  We also seek non-perl devs, there is plenty of stuff that you can do without touching the code too much.&lt;br /&gt;
&lt;br /&gt;
Our code is hosted on GitHub at https://github.com/SoylentNews/slashcode. Have a look and see how you can contribute.  Bugs are now on [https://github.com/SoylentNews/slashcode/issues GitHub Bugs].&lt;br /&gt;
&lt;br /&gt;
Volunteers should send an email to [mailto:dev@soylentnews.org dev@soylentnews.org] expressing your areas of interest and what your coding strengths are.  Also you can hop onto [[SoylentNews:IRC]] and join the #dev channel.  Come by and express your interest to paulej72, audioguy, or mrcoolbp.  &lt;br /&gt;
&lt;br /&gt;
Currently we are undergoing a bit of a reorganization and we hope to have more information available here soon about our short term and long term goals for the code.&lt;br /&gt;
&lt;br /&gt;
== Who we are ==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[Development|Dev Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| paulej72&amp;lt;ref name=&amp;quot;paulej72_notes&amp;quot;&amp;gt;Working on template and css issues on the site, main bug herder. - email:[mailto:paulej72@soylentnews.org paulej72@soylentnews.org] [[Paulej72WorkNotes]]&amp;lt;/ref&amp;gt;&lt;br /&gt;
| Team Leader for Dev&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| Ncommander&lt;br /&gt;
| The real head of Dev, but due to time constrains of being the head of SN, only a member.&lt;br /&gt;
| UTC-5&lt;br /&gt;
|-&lt;br /&gt;
| audioguy&amp;lt;ref name=&amp;quot;audioguy_notes&amp;quot;&amp;gt;See [[AudioGuyWorkNotes]] for current todo and working notes - documentation of system and cleanup of css to get things into a ste that new templates and Themes can be made.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| right hand man to paulej72 and second in command for Dev.&lt;br /&gt;
| UTC-8 (PST) &lt;br /&gt;
|-&lt;br /&gt;
| FatPhil &lt;br /&gt;
| perl/mysql odd-jobber, some ubuntu/sys knowledge too&lt;br /&gt;
| UTC+2&lt;br /&gt;
|-&lt;br /&gt;
| martyb/bytram&lt;br /&gt;
| secondary bug herder, Database (in training)&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| The Mighty Buzzard&lt;br /&gt;
| Code Monkey Private First Class&lt;br /&gt;
| UTC-6 (CST/CDT)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index of Development Pages and Resources ==&lt;br /&gt;
&lt;br /&gt;
Note: Any sort of code posted onto the wiki can now be syntax highlighted using the &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight&amp;gt;&amp;lt;/nowiki&amp;gt; tag. It will default to perl, but can be changed to other languages. For example &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;. More documentation is at [[mediawikiwiki:Extension:SyntaxHighlight_GeSHi]].&lt;br /&gt;
&lt;br /&gt;
* [[ImportantDevelopmentLinks]] - Place to put urls for the repositories, etc. (Use current page for now, this page not needed - YET)&lt;br /&gt;
* [[DevelopmentWorkCurrentlyInProgress]] - what we are working on at this moment &lt;br /&gt;
* [[CodingStyleForOurPerlChanges]] - Suggested style for perl code changes &lt;br /&gt;
* [[DevelopmentVMHowto]] - How to get your own Slash code up in a Virtual Machine using VirtualBox&lt;br /&gt;
* [[CssWork]] - pages for ongoing css work&lt;br /&gt;
* [[SlashDocumentationIndex]] - A single place to find Slash docs, one day it will be organized and accurate&lt;br /&gt;
* [[IncidentLog]] - Documentation of how incidents occurred and how they were mitigated&lt;br /&gt;
* [[GitUse]] - Tutorial/advice on how to use git&lt;br /&gt;
* [[Dev/Sys|To-do]] - A list of items in the pipeline collected from various places&lt;br /&gt;
&lt;br /&gt;
== Work Notes ==&lt;br /&gt;
&lt;br /&gt;
* [[AudioGuyWorkNotes]]&lt;br /&gt;
* [[Paulej72WorkNotes]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[SystemAdministration]] - See this section for actual server details and procedures&lt;br /&gt;
* GitHub https://github.com/SoylentNews/slashcode: Slashcode Repository and Issue Tracker&lt;br /&gt;
* Wiki: Documentation and work logs&lt;br /&gt;
**hosted on the svc linode&lt;br /&gt;
* IRC: real time chat for team communications&lt;br /&gt;
* Slashcott.org: temporary testing server in use until we get ones setup on Linode.&lt;br /&gt;
* Mailman Dev Mailing list: for non-real-time discussions that need a good paper trail.&lt;br /&gt;
* http://dev.mysql.com/doc/refman/5.5/en/index.html - Official docs for mysql we use&lt;br /&gt;
* https://perl.apache.org/start/index.html - modperl docs (We use version 1 with Apache 1.3)&lt;br /&gt;
* http://remote.demmers.org/~audioguy/manual/ - Apache 1.3 docs don't seem to be on the Apache site any more, here they are.&lt;br /&gt;
** http://remote.demmers.org/~audioguy/manual/misc/API.html but this is what is important to understand slash workings with mod perl.&lt;br /&gt;
&lt;br /&gt;
== Slashcode Primer ==&lt;br /&gt;
&lt;br /&gt;
Slashcode is a complex beast.  Here is the listing of the repo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;Bundle&lt;br /&gt;
Slash	&lt;br /&gt;
bin&lt;br /&gt;
docs&lt;br /&gt;
httpd&lt;br /&gt;
plugins&lt;br /&gt;
sbin&lt;br /&gt;
sql&lt;br /&gt;
tagboxes&lt;br /&gt;
themes&lt;br /&gt;
utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We really are only concerned with three of these directories: Slash, plugins, and themes.  The first directory, Slash, is the home of the slash.pm module and its related code.  The module, slash.pm, does all of the back end work of slashcode.  It provides a set of APIs that are used to generate pages and manipulate the database.  This is where the heavy perl coding is done. We definitely need help with this section in both expanding our knowledge and working with the code. (As I started on this from a css/html slant I do not have a good idea of what is here --pauej72)&lt;br /&gt;
&lt;br /&gt;
The second main part of the system are the themes.  In this case we have only one theme called slashcode.  The theme is broken down into pieces the first is htdocs.  htdocs is all of the static html files, perl files that directly start page generation events, the css files, images, and other static code.  The second part of the theme is the templates.  These templates are loaded into the database an are used by slash to layout the data from different sources and turn them into html files that apache can send to the user.  Templates re a mixture of perl, slash coding, and html.  Templates use slash calls to load other templates and usually each template leaves a breadcrumb in the final html with a start and end comment with the template's name and id.  These breadcrumbs make it easy to find out which template file is generating the particular piece of html that you need to change.&lt;br /&gt;
&lt;br /&gt;
Slashcode also has a plugin architecture that allows certain system to be bolted on to the main system. The main system is basically articles, comments and users.  The pulgins add the admin interface, the messaging system, enhanced login, journals, and other things.  The files for these plugging are in the plugins folder, not in the theme folder.  The issue with plugins is that it contains both front end code such as templates, css and pl files, it also has perl modules that are loaded into the perl engine. &lt;br /&gt;
&lt;br /&gt;
The rest of the directories are used for build and install purposes and probably will not need to be modified regularly.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress so please check back here for more.&lt;br /&gt;
&lt;br /&gt;
== Development VM ==&lt;br /&gt;
&lt;br /&gt;
Please see [[DevelopmentVMHowto]] for the full How To.&lt;br /&gt;
&lt;br /&gt;
Additional notes: http://soylentnews.org/~crutchy/journal/114&lt;br /&gt;
&lt;br /&gt;
==Integrated Development Environment==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sub&amp;gt;'''Note''' This is a work in progress. Currently the Windows development environment seems mostly useless except for Syntax Highlighting and basic Code Navigation.&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Regardless of what IDE (''Integrated Development Environment'') you choose to go with, you're going to require a Perl interpreter (With a built-in Debugger) and optionally the PadWalker module, for variable inspection (Also used by built-in debugger).&lt;br /&gt;
&lt;br /&gt;
=== Perl (Interpreter) ===&lt;br /&gt;
:Linux users generally already have a full Perl stack installed, so this resource is for Windows users. There's a number of different Perl interpreters available for Windows users. You can download ActivePerl for free below:&lt;br /&gt;
&lt;br /&gt;
::* [http://www.activestate.com/activeperl/downloads www.activestate.com/activeperl/downloads]&lt;br /&gt;
&lt;br /&gt;
=== PadWalker (Variable Inspection) ===&lt;br /&gt;
:* [http://perlmaven.com/padwalker perlmaven.com/padwalker]&lt;br /&gt;
&lt;br /&gt;
=== IDEs ===&lt;br /&gt;
==== Eclipse ====&lt;br /&gt;
:Eclipse with the ''EPIC'' Plug-In provides a great Perl IDE for Windows users. After installing ActivePerl and the PadWalker module you will need to install a Java Runtime.&lt;br /&gt;
&lt;br /&gt;
:'''Before you Begin:''' It's important to note that if you are running 64-bit Windows, you should choose the 64-bit JRE and pair it with a 64-bit Eclipse. They cannot be mis-matched (A 32-bit JRE with a 64-bit Eclipse or vice versa).&lt;br /&gt;
&lt;br /&gt;
:'''Step 1)''':&lt;br /&gt;
:: Download Oracle's runtime for free below. You can choose the JRE (Runtime Environment) if you only want to do Perl/Slashcode development or the JDK (Development Kit) if you want to do Perl/Slashcode development and Java development in the future. Choosing the JRE will save you disk space:&lt;br /&gt;
:: [http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html Java Runtime Environment 7u55]&lt;br /&gt;
:: [http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html Java Developer Kit 7u55]&lt;br /&gt;
&lt;br /&gt;
:'''Step 1.1)''':&lt;br /&gt;
:: After you have installed the JRE and restarted Windows, follow this guide from Oracle to setup the environment variables for Windows, including the PATH and CLASSPATH variables:&lt;br /&gt;
:: [http://docs.oracle.com/javase/tutorial/essential/environment/paths.html Environment Paths]&lt;br /&gt;
&lt;br /&gt;
:'''Step 2)''':&lt;br /&gt;
:: Install the Eclipse IDE. You can download the latest release (Kepler) for free below:&lt;br /&gt;
:: [http://eclipse.org/downloads/packages/eclipse-standard-432/keplersr2 Eclipse Kepler]&lt;br /&gt;
&lt;br /&gt;
:'''Step 3)''':&lt;br /&gt;
::Install the free ''&amp;quot;EPIC&amp;quot;'' plug-in for Eclipse. This is done from within Eclipse and is fairly straight forward. From within Eclipse, click the &amp;quot;Help&amp;quot; top strip-menu and choose the &amp;quot;Install New Software&amp;quot; option. You can also find detailed instructions below, however they may become out of date:&lt;br /&gt;
:: [http://www.epic-ide.org/download.php www.epic-ide.org/download.php]&amp;lt;br /&amp;gt;&lt;br /&gt;
==== Geany ====&lt;br /&gt;
::As an alternative to Eclipse, you can try Geany. Geany isn't exactly a full IDE like Eclipse, however you can setup the file locations of Perl and get a pretty good workflow going. You can download Geany for free below:&lt;br /&gt;
&lt;br /&gt;
::: [http://www.geany.org/Download/Releases www.geany.org/Download/Releases]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Teams]]&lt;/div&gt;</summary>
		<author><name>The Mighty Buzzard</name></author>
	</entry>
</feed>