Fork me on GitHub
Math for the people, by the people.

User login

Development priorities: open call

Primary tabs

Development priorities: open call

Folks,

Now that we are getting rolling with the new board, and have some spare Summer of Code development capacity, we need to re-establish what the development priorities are around here. This mostly refers to bugfixing and relatively "small" projects (ones that could conceivably be funded with a few hundred to a few thousand dollars). We have a large though rather dated list of PlanetMath/Noosphere feature requests here:

http://planetx.cc.vt.edu/AsteroidMeta/Feature_Requests

But feature requests are by no means limited to that list.

While the board could sit and pontificate about what our priorities are, we'd like to hear from the community instead.

So weigh in now with your opinion: what do you want or NEED to improve your PlanetMath experience?

apk


I agree with Ray that documenting the tables would be
strategically useful -- but I think that in order to
make the overall strategy more clear, we need to say,
in cases where it is "a matter of tweaking the code in a
few places and adding a module or two" what all the
conditions are to ensure that someone will do that
minimal work; if "Aaron [...] says that many of these
are things he could do in an hour or two had he the time",
are they also things that some 3rd party who is not
very familiar with Noosphere could also do in an hour?

In a few more words: documenting the tables will surely
help, but we should make it part of an overall package
that will *work*.

The suggested project is clearly aimed at making the Noosphere code more transparent to developers, rather than enhancing the user's PlanetMath experience. I think that an overview of the current maintenance process would be very helpful to potential developers. Are individual developers running local instances of Noosphere for testing? How is new or changed code integrated into the program? Is there a procedure for arbitrating conflicts in code developed by different developers? Perhaps some of these questions are addressed in (on?) the Wiki, but that particular forum is more difficult to navigate than the code itself.

rspuzio wrote:

"For me, the number zero priority, which outranks all the feature requests and bug reports is documenting the Noosphere SQL tables."

The two files below were extracted from the snapshot.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
First file: schema.mysql.sql
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-- MySQL dump 8.22
--
-- Host: localhost Database: pm
---------------------------------------------------------
-- Server version 3.23.50-log

--
-- Table structure for table 'acl'
--

CREATE TABLE acl (
uid int(11) NOT NULL default '0',
tbl varchar(16) NOT NULL default '',
objectid int(11) NOT NULL default '0',
subjectid int(11) NOT NULL default '0',
_read int(11) default '1',
_write int(11) default '0',
_acl int(11) default '0',
user_or_group char(1) default 'u',
default_or_normal char(1) default 'n',
PRIMARY KEY (uid),
KEY acl_objectid_idx (objectid)
) TYPE=MyISAM;

--
-- Table structure for table 'acl_default'
--

CREATE TABLE acl_default (
uid int(11) NOT NULL AUTO_INCREMENT,
userid int(11) NOT NULL default '0',
subjectid int(11) NOT NULL default '0',
_read tinyint(4) NOT NULL default '1',
_write tinyint(4) NOT NULL default '0',
_acl tinyint(4) NOT NULL default '0',
user_or_group char(1) NOT NULL default 'u',
default_or_normal char(1) NOT NULL default 'n',
PRIMARY KEY (uid),
KEY acl_default_userid_idx (userid)
) TYPE=MyISAM;

--
-- Table structure for table 'acl_default_uid_seq'
--

CREATE TABLE acl_default_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'acl_uid_seq'
--

CREATE TABLE acl_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'actions'
--

CREATE TABLE actions (
uid int(11) NOT NULL default '0',
userid int(11) default NULL,
type int(11) NOT NULL default '0',
objectid int(11) default NULL,
data text,
created timestamp(14) NOT NULL,
score int(11) NOT NULL default '0',
PRIMARY KEY (uid),
KEY actions_userid_idx (userid)
) TYPE=MyISAM;

--
-- Table structure for table 'actions_uid_seq'
--

CREATE TABLE actions_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'authors'
--

CREATE TABLE authors (
tbl varchar(16) NOT NULL default '',
objectid int(11) NOT NULL default '0',
userid int(11) NOT NULL default '0',
ts datetime default NULL,
KEY authors_userid_idx (userid),
KEY authors_ts_idx (ts)
) TYPE=MyISAM;

--
-- Table structure for table 'blacklist'
--

CREATE TABLE blacklist (
uid int(11) NOT NULL default '0',
mask varchar(128) NOT NULL default '',
PRIMARY KEY (uid),
KEY blacklist_uid_idx (uid)
) TYPE=MyISAM;

--
-- Table structure for table 'blacklist_uid_seq'
--

CREATE TABLE blacklist_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'books'
--

CREATE TABLE books (
uid int(11) NOT NULL default '0',
userid int(11) NOT NULL default '0',
created datetime default NULL,
modified datetime default NULL,
title varchar(255) NOT NULL default '',
data text NOT NULL,
keywords varchar(128) default '',
authors varchar(255) default NULL,
comments varchar(128) default NULL,
hits int(11) default '0',
msc varchar(16) default NULL,
loc varchar(32) default NULL,
isbn varchar(32) default NULL,
rights text,
urls text,
PRIMARY KEY (uid),
KEY books_uid_idx (uid),
KEY books_userid_idx (userid)
) TYPE=MyISAM;

--
-- Table structure for table 'books_uid_seq'
--

CREATE TABLE books_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'cache'
--

CREATE TABLE cache (
objectid int(11) NOT NULL default '0',
method char(3) default NULL,
valid int(11) default '0',
build int(11) default '0',
rrequests int(11) default '0',
tbl varchar(16) default NULL,
touched datetime default NULL,
bad int default 0,
KEY cache_objectid_idx (objectid),
UNIQUE KEY cache_id_idx (objectid, tbl, method)
) TYPE=MyISAM;

--
-- Table structure for table 'catlinks'
--

CREATE TABLE catlinks (
a int(11) default NULL,
b int(11) default NULL,
nsa int(11) default NULL,
nsb int(11) default NULL,
KEY catlinks_a_idx (a),
KEY catlinks_b_idx (b)
) TYPE=MyISAM;

--
-- Table structure for table 'classification'
--

CREATE TABLE classification (
tbl varchar(32) NOT NULL default '',
objectid int(11) NOT NULL default '0',
ns varchar(16) NOT NULL default '',
catid int(11) NOT NULL default '0',
ord int(11) default NULL,
nsid int(11) default NULL,
KEY classification_catid_idx (catid),
KEY classification_objectid_idx (objectid)
) TYPE=MyISAM;

--
-- Table structure for table 'collab'
--

CREATE TABLE collab (
uid int(11) NOT NULL default '0',
userid int(11) NOT NULL default '0',
title varchar(255) NOT NULL default '',
abstract text,
data text,
_lock int(11) default '0',
created datetime default NULL,
locktime datetime default NULL,
lockuser int(11) default NULL,
published tinyint(4) default '0',
modified datetime default NULL,
version int(11) default '1',
hits int(11) default '0',
sitedoc tinyint(4) default '0',
PRIMARY KEY (uid),
KEY userid (userid),
KEY collab_userid_idx (userid)
) TYPE=MyISAM;

--
-- Table structure for table 'collab_uid_seq'
--

CREATE TABLE collab_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'concepts'
--

CREATE TABLE concepts (
id int(11) NOT NULL default '0',
objectid int(11) NOT NULL default '0',
isprimary int(11) NOT NULL default '0',
istitle int(11) NOT NULL default '0',
name varchar(255) NOT NULL default '',
KEY concepts_id_idx (id),
KEY concepts_objectid_idx (objectid),
KEY concepts_name_idx (name)
) TYPE=MyISAM;

--
-- Table structure for table 'concepts_id_seq'
--

CREATE TABLE concepts_id_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'corrections'
--

CREATE TABLE corrections (
uid int(11) NOT NULL default '0',
objectid int(11) NOT NULL default '0',
userid int(11) NOT NULL default '0',
type char(3) NOT NULL default '',
title varchar(128) default NULL,
data text NOT NULL,
filed datetime default NULL,
closed datetime default NULL,
closedbyid int(11) NOT NULL default '0',
accepted int(11) default NULL,
comment text,
grace datetime default NULL,
graceint int(11) default NULL,
PRIMARY KEY (uid),
KEY corrections_objectid_idx (objectid),
KEY corrections_userid_idx (userid),
KEY corrections_uid_idx (uid)
) TYPE=MyISAM;

--
-- Table structure for table 'corrections_uid_seq'
--

CREATE TABLE corrections_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'forums'
--

CREATE TABLE forums (
uid int(11) NOT NULL default '0',
userid int(11) NOT NULL default '0',
created datetime default NULL,
modified datetime default NULL,
parentid int(11) default NULL,
title varchar(128) NOT NULL default '',
data text NOT NULL,
PRIMARY KEY (uid)
) TYPE=MyISAM;

--
-- Table structure for table 'forums_uid_seq'
--

CREATE TABLE forums_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'group_members'
--

CREATE TABLE group_members (
groupid int(11) NOT NULL default '0',
userid int(11) NOT NULL default '0',
KEY group_members_groupid_idx (groupid),
KEY group_members_userid_idx (userid)
) TYPE=MyISAM;

--
-- Table structure for table 'groups'
--

CREATE TABLE groups (
groupid int(11) NOT NULL default '0',
userid int(11) NOT NULL default '0',
groupname varchar(128) default NULL,
description text,
PRIMARY KEY (groupid),
KEY groups_groupname_idx (groupname)
) TYPE=MyISAM;

--
-- Table structure for table 'groups_groupid_seq'
--

CREATE TABLE groups_groupid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'hits'
--

CREATE TABLE hits (
uid int(11) NOT NULL auto_increment,
objectid int(11) NOT NULL default '0',
tblid int(11) NOT NULL default '0',
at timestamp(14) NOT NULL,
PRIMARY KEY (uid)
) TYPE=MyISAM;

--
-- Table structure for table 'lastmsg'
--

CREATE TABLE lastmsg (
tbl varchar(32) NOT NULL default '',
objid int(11) NOT NULL default '0',
userid int(11) NOT NULL default '0',
lastmsg int(11) NOT NULL default '0',
KEY lastmsg_tbl_idx (tbl),
KEY lastmsg_objid_id (objid),
KEY lastmsg_userid_idx (userid)
) TYPE=MyISAM;

--
-- Table structure for table 'lec'
--

CREATE TABLE lec (
uid int(11) NOT NULL default '0',
userid int(11) NOT NULL default '0',
created datetime default NULL,
modified datetime default NULL,
title varchar(255) NOT NULL default '',
data text NOT NULL,
keywords varchar(128) default '',
authors varchar(255) default NULL,
comments varchar(128) default NULL,
hits int(11) default '0',
msc varchar(16) default NULL,
urls text,
rights varchar(255) default '',
PRIMARY KEY (uid),
KEY lec_uid_idx (uid),
KEY lec_userid_idx (userid)
) TYPE=MyISAM;

--
-- Table structure for table 'lec_uid_seq'
--

CREATE TABLE lec_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'links'
--

CREATE TABLE links (
fromid int(11) NOT NULL default '0',
fromtbl varchar(16) NOT NULL default '',
toid int(11) NOT NULL default '0',
totbl varchar(16) NOT NULL default '',
KEY links_fromid_idx (fromid),
KEY links_toid_idx (toid)
) TYPE=MyISAM;

--
-- Table structure for table 'mail'
--

CREATE TABLE mail (
uid int(11) NOT NULL default '0',
userto int(11) NOT NULL default '0',
userfrom int(11) NOT NULL default '0',
subject varchar(128) NOT NULL default '',
body text NOT NULL,
sent datetime default NULL,
_read int(11) default NULL,
PRIMARY KEY (uid),
KEY mail_userto_idx (userto),
KEY mail_userfrom_idx (userfrom)
) TYPE=MyISAM;

--
-- Table structure for table 'mail_uid_seq'
--

CREATE TABLE mail_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'messages'
--

CREATE TABLE messages (
uid int(11) NOT NULL default '0',
visible tinyint(4) not null default '1',
objectid int(11) NOT NULL default '0',
replyto int(11) default '-1',
created datetime default NULL,
userid int(11) NOT NULL default '0',
subject varchar(128) default 'none',
body text,
tbl varchar(16) default NULL,
threadid int(11) default NULL,
PRIMARY KEY (uid),
UNIQUE KEY messages_uid_idx (uid),
KEY messages_objectid_idx (objectid),
KEY messages_userid_idx (userid)
) TYPE=MyISAM;

--
-- Table structure for table 'messages_uid_seq'
--

CREATE TABLE messages_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'msc'
--

CREATE TABLE msc (
id varchar(6) NOT NULL default '',
comment varchar(128) default NULL,
parent varchar(6) default NULL,
uid int(11) NOT NULL default '0',
PRIMARY KEY (uid),
KEY msc_id_idx (id),
KEY msc_parent_idx (parent),
KEY msc_uid_idx (uid)
) TYPE=MyISAM;

--
-- Table structure for table 'nag'
--

CREATE TABLE nag (
cid int(11) default NULL,
lastnag datetime default NULL,
KEY nag_cid_index (cid)
) TYPE=MyISAM;

--
-- Table structure for table 'news'
--

CREATE TABLE news (
uid int(11) NOT NULL default '0',
userid int(11) NOT NULL default '0',
created datetime default NULL,
modified datetime default NULL,
title varchar(128) NOT NULL default '',
hits int(11) default '0',
intro text,
body text,
PRIMARY KEY (uid)
) TYPE=MyISAM;

--
-- Table structure for table 'news_uid_seq'
--

CREATE TABLE news_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'notices'
--

CREATE TABLE notices (
uid int(11) NOT NULL default '0',
userid int(11) NOT NULL default '0',
userfrom int(11) default NULL,
title varchar(128) default NULL,
created datetime default NULL,
viewed int(11) default '0',
data text,
choice_title text,
choice_action text,
choice_default int(11) default NULL,
PRIMARY KEY (uid),
KEY notices_userid_hidx (userid)
) TYPE=MyISAM;

--
-- Table structure for table 'notices_uid_seq'
--

CREATE TABLE notices_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'ns'
--

CREATE TABLE ns (
name varchar(16) NOT NULL default '',
shortdesc varchar(64) NOT NULL default '',
longdesc varchar(255) NOT NULL default '',
link varchar(255) default NULL,
id int(11) default NULL
) TYPE=MyISAM;

--
-- Table structure for table 'objects'
--

CREATE TABLE objects (
uid int(11) NOT NULL default '0',
type int(11) NOT NULL default '0',
userid int(11) NOT NULL default '0',
created datetime default NULL,
modified datetime default NULL,
parentid int(11) default NULL,
title varchar(255) NOT NULL default '',
data text NOT NULL,
preamble text,
name varchar(255) NOT NULL default '',
related text,
synonyms text,
defines text,
keywords text,
hits int(11) default '0',
self int(11) default NULL,
pronounce varchar(255) default NULL,
version int(11) default NULL,
KEY objects_ino_uid_idx (uid),
KEY objects_ino_parentid_idx (parentid),
KEY objects_ino_title_idx (title),
KEY objects_ino_name_idx (name),
KEY objects_ino_userid_idx (userid)
) TYPE=MyISAM;

--
-- Table structure for table 'objects_uid_seq'
--

CREATE TABLE objects_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'objindex'
--

CREATE TABLE objindex (
objectid int(11) NOT NULL default '0',
tbl varchar(16) NOT NULL default '',
userid int(11) NOT NULL default '0',
title varchar(128) NOT NULL default '',
cname varchar(128) NOT NULL default '',
type int(11) NOT NULL default '1',
ichar char(1) default NULL,
source varchar(16) default NULL,
KEY objindex_cnameidx (cname),
KEY objindex_ichar_idx (ichar),
KEY objindex_title_idx (title),
KEY objindex_userid_idx (userid),
KEY objindex_objectid_idx (objectid)
) TYPE=MyISAM;

--
-- Table structure for table 'objlinks'
--

CREATE TABLE objlinks (
uid int(11) NOT NULL auto_increment,
srctbl varchar(32) NOT NULL default '',
desttbl varchar(32) NOT NULL default '',
srcid varchar(32) NOT NULL default '',
destid varchar(32) NOT NULL default '',
note varchar(128) default NULL,
PRIMARY KEY (uid),
KEY objlinks_destid_hidx (destid),
KEY objlinks_srcid_hidx (srcid)
) TYPE=MyISAM;

--
-- Table structure for table 'papers'
--

CREATE TABLE papers (
uid int(11) NOT NULL default '0',
userid int(11) NOT NULL default '0',
created datetime default NULL,
modified datetime default NULL,
title varchar(255) NOT NULL default '',
data text NOT NULL,
keywords varchar(128) default '',
authors varchar(255) default NULL,
comments varchar(128) default NULL,
hits int(11) default '0',
msc varchar(16) default NULL,
rights varchar(255) default '',
PRIMARY KEY (uid),
KEY papers_uid_idx (uid),
KEY papers_userid_idx (userid)
) TYPE=MyISAM;

--
-- Table structure for table 'papers_uid_seq'
--

CREATE TABLE papers_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'polls'
--

CREATE TABLE polls (
uid int(11) NOT NULL default '0',
userid int(11) NOT NULL default '0',
start datetime default NULL,
finish datetime default NULL,
options varchar(255) NOT NULL default '',
title varchar(128) NOT NULL default '',
PRIMARY KEY (uid)
) TYPE=MyISAM;

--
-- Table structure for table 'polls_uid_seq'
--

CREATE TABLE polls_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'relsuggest'
--

CREATE TABLE relsuggest (
objectid int(11) NOT NULL default '0',
tbl varchar(16) NOT NULL default '',
related varchar(255) NOT NULL default '',
KEY relsuggest_objectid_idx (objectid),
KEY relsuggest_related_idx (related)
) TYPE=MyISAM;

--
-- Table structure for table 'rendered_images'
--

CREATE TABLE rendered_images (
uid int(11) NOT NULL auto_increment,
imagekey varchar(128) NOT NULL,
variant varchar(16) NOT NULL,
image blob,
align varchar(10) default NULL,
PRIMARY KEY (uid),
UNIQUE KEY rendered_images_imagekey_idx (imagekey, variant)
) TYPE=MyISAM;

--
-- Table structure for table 'requests'
--

CREATE TABLE requests (
uid int(11) NOT NULL default '0',
creatorid int(11) NOT NULL default '0',
fulfillerid int(11) default NULL,
title varchar(128) NOT NULL default '',
data text,
created datetime default NULL,
closed datetime default NULL,
fulfilled datetime default NULL,
PRIMARY KEY (uid),
KEY requests_uid_idx (uid)
) TYPE=MyISAM;

--
-- Table structure for table 'requests_uid_seq'
--

CREATE TABLE requests_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'score'
--

CREATE TABLE score (
uid int(11) NOT NULL auto_increment,
userid int(11) NOT NULL default '0',
delta int(11) NOT NULL default '0',
occured timestamp(14) NOT NULL,
PRIMARY KEY (uid),
KEY score_occured_idx (occured),
KEY score_userid_idx (userid)
) TYPE=MyISAM;

--
-- Table structure for table 'searchresults'
--

CREATE TABLE searchresults (
objectid int(11) NOT NULL default '0',
tbl varchar(16) NOT NULL default '',
ts timestamp(14) NOT NULL,
rank double NOT NULL default '0',
token int(11) NOT NULL default '0',
KEY searchresults_rank_idx (rank),
KEY searchresults_token_idx (token)
) TYPE=MyISAM;

--
-- Table structure for table 'storage'
--

CREATE TABLE storage (
_key varchar(64) NOT NULL default '',
_val text,
valid int(11) default '1',
lastupdate varchar(32) default NULL,
timeout varchar(32) default NULL,
callback varchar(32) default NULL,
KEY storage_key_idx (_key)
) TYPE=MyISAM;

--
-- Table structure for table 'tdesc'
--

CREATE TABLE tdesc (
tname varchar(32) NOT NULL default '',
description varchar(128) NOT NULL default '',
uid int(11) default NULL
) TYPE=MyISAM;

--
-- Table structure for table 'users'
--

CREATE TABLE users (
uid int(11) NOT NULL default '0',
username varchar(32) NOT NULL default '',
password varchar(32) NOT NULL default '',
email varchar(255) NOT NULL default '',
joined datetime default NULL,
forename varchar(64) default '',
surname varchar(64) default '',
city varchar(128) default '',
state varchar(128) default '',
country varchar(128) default '',
score int(11) default '0',
homepage varchar(255) default '',
access int(11) default '10',
sig text,
prefs text,
last datetime default NULL,
bio text,
preamble text,
active int(11) default '1',
PRIMARY KEY (uid),
lastip varchar(15),
KEY users_username_idx (username),
KEY users_uid_idx (uid)
) TYPE=MyISAM;

--
-- Table structure for table 'users_uid_seq'
--

CREATE TABLE users_uid_seq (
val int(11) NOT NULL auto_increment,
PRIMARY KEY (val)
) TYPE=MyISAM;

--
-- Table structure for table 'watches'
--

CREATE TABLE watches (
uid int(11) NOT NULL auto_increment,
objectid int(11) NOT NULL default '0',
tbl varchar(16) NOT NULL default '',
userid int(11) NOT NULL default '0',
PRIMARY KEY (uid),
KEY watches_objectid_idx (objectid)
) TYPE=MyISAM;

--
-- Table structure for table 'ownerlog'
--

CREATE TABLE ownerlog (
objectid int(11) NOT NULL,
tbl varchar(16) NOT NULL,
userid int(11) NOT NULL,
action char(1),
ts timestamp,
key(objectid),
key(userid)
) TYPE=MyISAM;

--
-- Table structure for table 'inv_dfs' -- invalidation document
-- frequencies.
--
CREATE TABLE inv_dfs (
id int(11) NOT NULL,
word_or_phrase tinyint(4) NOT NULL,
count tinyint(4) NOT NULL,
key(id)
) TYPE=MyISAM;

--
-- Table structure for table 'inv_idx' -- invalidation word-doc
-- occurrence index.
--
CREATE TABLE inv_idx (
id int(11) NOT NULL,
word_or_phrase tinyint(4) NOT NULL,
objectid int(11) NOT NULL,
key(id),
key(objectid)
) TYPE=MyISAM;

-- Table structure for table 'inv_phrases' -- invalidation phrase
-- dictionary.

create table inv_phrases (
phrase char(255) not null,
id mediumint(8) unsigned not null auto_increment,
primary key(id),
key(phrase)
) TYPE=MyISAM;

-- invalidation words dictionary

create table inv_words (
id mediumint unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
word char(32) NOT NULL UNIQUE
);

-- ****************************************************************************
--
-- SECTION 1 : INITIALIZATION
--
-- ****************************************************************************

INSERT INTO tdesc VALUES ('lec','Expositions',0);
INSERT INTO tdesc VALUES ('papers','Papers',1);
INSERT INTO tdesc VALUES ('books','Books',2);
INSERT INTO tdesc VALUES ('objects','Encyclopedia',3);
INSERT INTO tdesc VALUES ('messages','Messages',4);
INSERT INTO tdesc VALUES ('corrections','corrections',5);
INSERT INTO tdesc VALUES ('forums','Forums',6);
INSERT INTO tdesc VALUES ('users','Users',7);
INSERT INTO tdesc VALUES ('requests','Requests',8);
INSERT INTO tdesc VALUES ('polls','Polls',9);
INSERT INTO tdesc VALUES ('collab','Collaborations',10);

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Second file: schema.txt
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

===========================================================================
PlanetMath schema
===========================================================================

these tables are owned by the pm user.

note: these are raw schema! there are no indexes or specifiers of uniqueness, monotonicity, non-nullity, et cetera, at the current moment.

===========================================================================

Table "cache"
Attribute | Type | Modifier
-----------+--------------+----------
objid | bigint | not null unique id of objects stored in cache
name | varchar(256) | namespace object name
valid | integer | not null default 0 1 if valid in cache, 0 if not
build | integer | not null default 1 1 if object is being built, 0 if not
Index: cache_pkey

> CREATE TABLE cache (objid int8 UNIQUE PRIMARY KEY NOT NULL,name varchar(256),valid int DEFAULT 0,build int DEFAULT 1);

the cache table is the structure necessary to maintain an accurate cache. it works like this: the table starts off empty. a user requests an object from browsing planetmath. the request is served by a perl function which checks the cache table for the 'name'. if the name is not present, it then calls a procedure which generates the page to the cache directory and proper sub directories (based on the namespace id string). in the meantime, the entry in the database is still "0" for invalid, but "1" for build. this means all subsequent requests will end up waiting and rechecking the database every (some interval) for valid to go to "1", at which point the page will be served from the cache location. when the page is doing being built, build goes to 0 and valid goes to 1.

note: if the object is not in the table, this is essentially equivalent to a value of "0" for valid, except after the object goes valid, it should always have an entry in the table.

===========================================================================

Table "messages"
Attribute | Type | Modifier
------------+--------------+--------------------
uid | bigint | autoinc unique id of message
objectid | bigint | not null unique id of object owning message
objecttype | integer | not null type of object owning message
replyto | bigint | unique id of message this is a reply to
posted | timestamp | not null time posted
userid | bigint | not null unique id of user who posted
score | integer | default 0 score of message, for filtering
subject | varchar(128) | not null default '' subject
type | integer | not null default 1 1 for discussion, 2 for correction
pending | integer | not null default 0 1 if pending, 0 if not?
body | text | not null default '' body
Indices: messages_objectid_idx,
messages_uid_idx,
messages_userid_idx

> create sequence messages_message_seq;
> create table messages (uid int8 DEFAULT nextval('messages_message_seq'), objectid int8 NOT NULL, objecttype int NOT NULL, replyto int8, posted timestamp NOT NULL, userid int8 NOT NULL, score int DEFAULT 0, subject varchar(128) DEFAULT '', type int DEFAULT 1, pending int DEFAULT 0, body text DEFAULT '');
> CREATE UNIQUE INDEX messages_uid_idx on messages (uid);
> CREATE INDEX messages_objectid_idx on messages (objectid);
> CREATE INDEX messages_userid_idx on messages (userid);

this table is pretty self-explainatory, or at least intuitive. a discussion should appear like this: a set of messages is pulled up that have the same objectid. the top level should consist of messages with a blank replyto field, and under them goes the thread which is pulled from requests on the original set of messages having replyto field equal to the uid of the top-level message. (implementation note: these are iterative sub-selects on the original set until every message is "attached" to a thread at some point, not sure how this could best be done efficiently). the messages are of course ordered by timestamp.

the "type" field would separate discussion messages from correction messages. if type is set to correction, then the "pending" field is considered. if there are pending corrections , then the object (the messages are attached to) could be flagged as having pending corrections. when doing this, however, only top-level correction messages would be considered (any corrections with blank
"replyto" fields).

===========================================================================

Table "objects"
Attribute | Type | Modifier
-----------+--------------+----------
uid | bigint | unique id of object
type | integer | object type
userid | bigint | unique id of creator of object
parentid | bigint | unique id of parent object
next | bigint | unique id of next object (serial objects~=lessons)
prev | bigint | of previous object
title | varchar(128) | title of object (freeform string)
dir | varchar(128) | namespace directory
name | varchar(256) | full namespace name (dir.name), not freeform
created | timestamp | timestamp of creation
data | text | object data (LaTeX)

> CREATE SEQUENCE objects_uid_seq;
> create table objects (uid int8 DEFAULT nextval('objects_uid_seq'), type int NOT NULL, userid int8 NOT NULL, parentid int8 , next int8, prev int8, title varchar(128) NOT NULL, dir varchar(128) NOT NULL, name varchar(256) NOT NULL, created timestamp DEFAULT CURRENT_TIMESTAMP, data text NOT NULL);
> CREATE UNIQUE INDEX objects_uid_idx on objects (uid);
> CREATE INDEX objects_title_idx on objects (title);
> CREATE INDEX objects_dir_idx on objects (dir);

this is the core of the site. it is pretty self-explainatory. one note: i separated 'dir' and 'name' because this facilitates doing a lookup of all objects in a particular namespace directory, it is simply a full string match.

===========================================================================

Table "types"
Attribute | Type | Modifier
-------------+--------------+-----------
type | integer | autoinc type id (unique)
name | varchar(64) | not null type name
description | varchar(256) | type description

> CREATE SEQUENCE types_type_seq;
> create table types (type int DEFAULT nextval('types_type_seq'), name varchar(64) UNIQUE NOT NULL, description varchar(256));
> CREATE UNIQUE INDEX types_type_idx on types (type);

this is a simple lookup table for the names of numeric types.

===========================================================================

Table "sessions"
Attribute | Type | Modifier
-----------+-----------+------------------------
uid | bigint | not null unique id of user logged in
hash | char(32) | not null session hash
ltime | timestamp | not null default 'now' timestamp of when logged in
atime | timestamp | not null default 'now' timestamp of last access
ip | char(15) | ip address of client
hostname | varchar(128) hostname of client
Index: sessions_pkey

> create table sessions (uid int8 UNIQUE PRIMARY KEY, hash char(16) NOT NULL, ltime timestamp DEFAULT 'now', atime timestamp DEFAULT 'now', ip char(15), hostname varchar(128));

this table allows us to keep track of who's logged in. i'm kind of sketchy on what we'll be doing here, so this will probably change.

===========================================================================

table "actions"
Attribute | Type | Modifier
--------------+--------------+----------
uid | bigint | user's unique id
objid | bigint | the object id the action was performed on
actid | int | integer code for the action
data | varchar(64) | any data that went with the action
stamp | timestamp | timestamp of the action

Table "actions"
Attribute | Type | Modifier
-----------+-------------+----------
uid | bigint | not null user's unique id
objid | bigint | not null the object id the action was performed on
actid | integer | not null integer code for the action
data | varchar(64) | any data that went with the action
stamp | timestamp | not null timestamp of the action
Indices: actions_objid_idx,
actions_uid_idx

> create table actions(uid int8 NOT NULL, objid int8 NOT NULL, actid int NOT NULL, data varchar(64), stamp timestamp NOT NULL);
> create index actions_uid_idx on actions(uid);
> create index actions_objid_idx on actions(objid);

this table exists to keep track of user actions such as voting on objects (which may effect karma and similar count-based records).

you can sorta see how it would work based on the schema: say a user looks at a theorem object and likes what they see. they could click on "yes" for "did you find this theorem useful?" , at which point some count for the object (or owner?) would be incremented, and an entry is made in this table. now we have the info to refuse to let the user vote again, upon attempting to perform this same action (it will have the same actid) for the same object (same objid), we will see that there is already a matching record in the database.

===========================================================================

Table "actids"
Attribute | Type | Modifier
--------------+--------------+----------
actid | int | default nextval('actids_actid_seq'::text) action id
descr | varchar(128) | not null text description

> create sequence actids_actid_seq;
> create table actids(actid int DEFAULT nextval('actids_actid_seq'), descr varchar(128) NOT NULL);

this is just a type lookup table for actions, so we can list them in a human-readble form.

===========================================================================

Table "users"
Attribute | Type | Modifier
--------------+--------------+----------
uid | bigint | autoinc user's unique id
joined | timestamp | default 'now' timestamp of time joined PlanetMath
username | varchar(32) | not null username (within PlanetMath, should be unique??)
firstname | varchar(64) | real first name
surname | varchar(64) | real surname
email | varchar(128) | not null email addy
organization | varchar(128) | organization (university, etc)
city | varchar(128) | location junk
state | varchar(128) |
country | varchar(128) |
password | varchar(32) | the user's password
count | integer | default 0 count of objects this user owns
karma | integer | default 0 karma value
preferences | varchar(256) | preferences string
showinfo | varchar(256) | showinfo string

> create sequence users_uid_seq;
> create table users (uid int8 PRIMARY KEY DEFAULT nextval('users_uid_seq'), joined timestamp DEFAULT 'now', username varchar(32) NOT NULL, firstname varchar(64), surname varchar(64), email varchar(128) NOT NULL, organization varchar(128), city varchar(128), state varchar(128), country varchar(128), password varchar(32), karma int DEFAULT 0, count int DEFAULT 0, preferences varchar(256), showinfo varchar(256));

most of this is intuitive. however, the last two require some explaining. they are just strings in the database, because i think this minimizes complexity and change required at the schema level in the future. the actual logical contents of the showinfo and prefs will be introduced at the script level.

preferences, i envision to be a string formatted like:

"attribute1=val1,attribute2=val2,..."

and showinfo:

"field1=threshold1,field2=threshold2,..."

these would be parsed twice, once when the user joins the system, and once each time they log in. at login time, these fields are parsed into variables in the user's cookie, and can be used by the site as the user moves through it.

preferences are simply layout and other parameters. miscellaneous stuff goes here. we can define these variables later, they require no changes in the database.

showinfo i split off because it seems to be a logically separate thing, it contains the names of fields in the database like the location fields or the user's real name, paired with the karma level required for other users to be able to view them. this actually DOES depend on what fields are in the table, BUT adding or subtracting fields from the table wouldn't require any changes in the workings of this field.

some examples:

preferences="frames=1,messagescore=-1,..."
showinfo="email=5,country=10,state=20,city=30,firstname=10,surname=100,..."

both of these strings could be generated by the application script. showinfo, for example, could be made from a small text box next to each field the user enters data for, with comma seperated key values being left out ("don't ever show") if the user doesn't enter anything. i envision things like username and email and country as having some default
values.

The other day, Chi figured out how to work the "DB admin"
box. For the last two days, I have been quite busy
documenting the tables and have gotten most of them
figured out. The information you just posted is quite
useful and nicely complements what I have been doing
since it provides the technical details such as the
exact type of data which fits in the slot whereas my
documentation focuses more on what this data means and
how it is used. Since I have some time available now
and am the one who made the big stink about the importance
of this task, I am focusing on this task exclusively and
working overtime. In a few days, I should finish what I
have been doing and incorporate the data you just provided.
At that point, this task will be 90% complete, the remaining
10% being the obscure tables which I could make no sense
of --- Aaron will have to do those since only he knows what
he put in there. You can see my progress so far in the
following collaboration object:

http://planetmath.org/?op=getobj&from=collab&id=143

I am pleased to announce that "job 0" is done!!! This weekend
I did my best to describe the Noosphere tables and today Aaron
finished the job by documenting the tables which I could not
figure out and expanding the description in places where I was
not too sure. You can see the finished work as a site document:

http://planetmath.org/?op=getobj&from=collab&id=143

I agree that it would be good if we could finally deal with the
current bug reports and feature requests. Given that some of
these have been around for years, it would give a fine sense of
progress to work off the backlog. At the moment, I can't think
of too much to say about prioritizing those other than to
suggest giving priority to ones which have been siting around
for a long time; for instance, I think it is a shame that we
still haven't recovered the version histories after three years!

Just now, there appeared a post where a new user wished that how
to operate the requests lists were better documented:

http://planetmath.org/?op=getmsg&id=18916

This sounds like a reasonable complaint to me and I can imagine
that other potential users are not contributing as they otherwise
might because they have trouble figuring out how to work the
interface. To be sure, the answer to many neophyte questions is
to be found in the site documentation, but is can be very tedious
and discouraging when one is trying to do something.

Therefore, I think some localized help is in order. As for what
form this might assume, here are two suggestions which could be
implemented together. Firstly, on the collaborations page

http://planetmath.org/?op=collab

you might notice "Tip: To see what an option does, float your
cursor over it for help." at the bottom of the page. It would
be nice to have something like this everywhere else on the site
as well. For instance, on corrections, one sees + and x --- while
this is convenient for experienced users, it can be opaque to
tyros, so seeing "accept this correction" and "reject this
correction" appear when floating the cursor could help a lot.
Secondly, for cases where some more detailed explanation might
be desired, there could be some help icon, such as a colored
question mark; clicking on this icon would pull up a window
explaining the item in question. To be sure, the text might be
copied from a site document, but putting it in this place might
make it more convenient. For instance, having such an extended
help by the orphanage link in the sidebar could help new users
who don't know what the orphanage is.

As Ratboy said, there are projects which benefit developers and
ones which directly benefit end users. By contrast with my last
proposal, this is a documentation project aimed at end users. As
for priorities, I would suggest first attending to the bug fixes
and the outstanding feature requests before worrying about
implementing this feature.

Can you provide a link to one of the main places you have related the interface bugs you are referring to?

apk

I believe I've put them all on the bug list. But, as usual, I can't *find* the bug list. If you can point me to it, I can make sure. Off the top of my head, here are some critical ones:
1. The corrupting of the images in HTML mode.
2. The inability of Latex2HTML to deal with trailing % signs.
3. Other Latex2HTML bugs.
4. Occasional (and apparently unpredictable) resetting of the "contains own proof" flag.

In terms of user interface improvements, I don't think I have anything that is not already on the list.

But again, if you can point me at the list, I'll check again.

Roger

There's *a* bug list at:

http://planetx.cc.vt.edu/AsteroidMeta/Bugs

I don't think that is the list you are talking about however.

There's also

http://planetx.cc.vt.edu/AsteroidMeta/Feature_Requests

Again, that doesn't sound like the list you have in mind.

No, neither of those is what I was thinking about. I thought there was either a document or a text list on asteroid containing the list of proposed enhancements/bug fixes.

Ray, can you help here? I thought a couple of weeks back you sent out a pointer to the list I'm thinking about.

ROger

I know of no other documents than the two Joe mentioned.
The pointer I sent a while back was also to these documents.

The only other place which I know for bugs is the Bugzilla page
for PlanetMath but that has been broken for several years;
as far as I know, people have pointed out bugs here and there
since but there has been no central location for the
bug reports.

riskassure or Cwoo? Or do you want to attend separately PM Bugs?
perucho

What's AsteroidMedia?

Lisa

> For those who prefer PlanetMath over AsteroidMedia, I have created a collaboration document (found in collaborations) called "PM Bugs". Currently, only one bug is listed, and I know there are more bugs out there. It is open to anyone who wants to document PM bugs. If you find a bug, you may go there to update the table. If you have trouble editing that document, please let me know.
>
> Chi

Even though I am a board member, here I will speak as a
member of the community.

For me, the number zero priority, which outranks all the
feature requests and bug reports is documenting the
Noosphere SQL tables. For those of you who are not familiar
with the software platform of PM, these tables are our main
data structure, storing all the entries, corrections, forum
posts, user lists, and pretty much all other important
data on the website.

The reason that I consider this as outranking other development
projects is that it could make it much easier to get them
done. If you look at the feature requests and bug reports,
most of these look like a matter of tweaking the code in a
few places and adding a module or two; when I talk to Aaron,
he says that many of these are things he could do in an hour
or two had he the time; yet, when several of us tried to hack
the program, we didn't get too far. A few months ago, when
Joe and I experimented with the DB administration window, we
had no success in figuring out how to get at the data. Clearly,
some better documentation is needed and documenting the SQL tables
would go a good way towards getting past this impasse.

I have already made a list of the table names:

http://planetx.cc.vt.edu/AsteroidMeta/Noosphere_documentation

The next step, as I mentioned there, is to list the columns
in the tables and describe what sort of data goes in those
columns. Along these lines, Joe told me that Aaron once handed
him a printout which contained some such information.

Not only am I interested in seeing this happen, but I am
willing to help. I could commit a few hours a week to this,
although I would need some help from Aaron as I am not sure
what to do next. If there is a way that somebody else could
help move this project along for pay, I would have no objection
to offering a code bounty of a few hundred dollars to move this
project along.

In my view, and several people I've talked to strongly
share this view -- improving the forums and email
interaction with the site are of top priority.

I know several people who do not use PlanetMath solely
because there is no "good" way to interact with the
forums (apart from logging in over a web browser).

For more details, see the feature requests about forums
and email listed on the extant Feature Request list.

Given that one of our primary goals is to increase readership and, hopefully, sponsorship, I believe our primary development priority should be centered around (as Joe and others have proposed above) improvement of the user interface and fixing numerous "simple" bugs.

Many of these proposed improvements and bugs are already listed on the site, so I won't try to rehash them here. But what I'd like to see is a small group of people who will make a concrete proposal (or even, in the case of really simple things, just do them) for improvements and bug fixes together with a timetable.

In order to make it (more) feasible for people who haven't been already mucking with the code base to do this work, I also believe that one of the first items to be tackled by this team should be improvement of the code build process, including better 1) access to the source code base and 2) documentation of the tools used for builds as well as those used in the product.

This should be separate from the work being done by Joe to build a new PM platform (although Joe would be a great person to lead the improvement team as well). The new platform is a ways out, and we need short-term improvements immediately.

Roger

Subscribe to Comments for "Development priorities: open call"