ProjectForum News and Tips

« August 2007 | Main | October 2007 »

September 2007

September 28, 2007

Beta Release: 5.6b1

Please take some time to try out our new beta releases of CourseForum and/or ProjectForum. This version consists primarily of smaller additions and enhancements.

September 27, 2007

Q: I'm an admin; how can I see what non-admins would see?

To see what non-admins would see, you'd have to logout as admin - which means logging out as both site admin and also as any group admins if you're logged in as those. Visit the site admin area (or group admin area) and click on the logout link at the top right if present.

September 26, 2007

Power Users: More on Automation.

Last week we provided an example of having a Perl script use ProjectForum's web interface to add a user to a page. Here's a similar example, this time where the script posts a comment to a forum page. The first part is pretty similar, setting up some variables with the information the program needs, and then logging in as site administrator to ensure our script has full access to the entire site.


my $siteurl = "http://127.0.0.1:3455/"; # base URL of the site
my $siteadminpass = "abc123" ; # site administration password
my $urlprefix = "1" ; # URL prefix of the group we're posting to
my $pagename = "Home" ; # name of page we're posting to
my $username = "Joe User" ; # name of user posting
my $message = "This is my post" ; # what to post

use HTML::Form;
use LWP;

my $ua = LWP::UserAgent->new;
$ua->cookie_jar( {} );

# signin as admin, which will set the cfadmintoken cookie
my $response = $ua->get($siteurl . "admin/adminsignin.html");
my $form = HTML::Form->parse($response->decoded_content, $response->base);
$form->value("adminpasswd", $siteadminpass);
$ua->request($form->click());

This next bit is what actually does the posting; it's a bit tricky in that we have to find the right form to post to (there are normally two, the search form and the comment posting form):


# now go to the page and do the post
$response = $ua->get($siteurl . $urlprefix . "/" . $pagename);
my @forms = HTML::Form->parse($response->decoded_content, $response->base);
for ($i=0;$i<@forms;$i++) {
   my $form = @forms[$i];
   my $attrs = %$form->{'attr'};
   if (%$attrs->{'name'} eq "commentform") {
     $form->value('comments', "[" . $username . "]: " . $message);
     $ua->request($form->click());
   }
}

The value of this isn't in these simple self-contained examples of course, but when you embed them into some other script. A few simple examples:

  • You have some other program that runs every day to produce some summary sales data; it can then use this script to post the results to a ProjectForum page.
  • Your ecommerce system can automatically post a record of every transaction into your forum.
  • You can hook up your email (e.g. with postfix) so that when you receive email at a certain address, it runs a script which automatically posts that email into your forum. Your email script might use the subject of the email to decide exactly which page in the forum the email gets posted to.

September 25, 2007

Q: Is there a difference between the Site Administration password and the Group Administration password?

The site admin and group admin passwords are different.

There is exactly one site admin password, which gives access to the entire site. In particular, it will let the user change various options like the text on the main page, e.g. where it says "Welcome to ProjectForum" or the blurb beneath. This can all be done in the "Site Admin" area, accessed via the bottom right of that page. This is also where the site admin password can be changed. The site admin is also the only person who can delete groups.

There is one group admin password per group (so if on your site you have Group#1,#2,#3 - each would have a group admin password. To sign in as a group admin, you'd enter the group and then click where it says "Group Admin" near the bottom right of each page. This is also where the group admin password for that group can be changed.

September 24, 2007

Tip: Enabling tracking changes by email.

If you want to keep track of what's going on in a forum, continually going back to a page in your web browser to see what's changed isn't the most efficient way to do it. Probably the best way, if you use an RSS reader, is to subscribe to the RSS feeds that are automatically created for every forum (and there are even feeds for each individual page if you want). You can do this via the "Track Changes" link at the bottom right of each forum page.

The "Track Changes" also offers you the choice of being notified of changes by email. However, out of the box, this option isn't available, as the application doesn't know how to send mail from your particular system. To tell it, the site administrator has to go into the site's administration area. From there, visit the "Notification" page, and fill in information about your SMTP mail server, and web and email addresses. The email options on the "Track Changes" pages will then be available.

September 20, 2007

Q: Can I host this on Yahoo's small business hosting?

Unfortunately not. Services like that are designed mostly for hosting either static web pages or fairly simple web applications or scripts using tools like CGI where programs run for only a short time. ProjectForum behaves differently, because it contains its own built-in web server, which needs to stay running for a long time. Most lower-end hosting services don't allow for this.

It's always worth checking with your web hosting provider to see if they'd allow this type of program to run, and if so, how best to do it. Pointing them to our FAQ will provide them with the information they need to help you out.

September 19, 2007

Power Users: Automating ProjectForum tasks.

A couple of weeks ago we talked about how to manipulate ProjectForum's underlying database files, and suggested that in almost all cases, there is a better way to do it. Today we'll talk about that better way.

We sometimes get asked if ProjectForum has an "API" (application programming interface), allowing other programs to do things like add users, post content to pages, and so on. In fact, there is, and it is the same API that you use whenever you use ProjectForum yourself - good old HTML and HTTP.

Want to get ProjectForum to do some repetitive task, but you don't want to sit there and click-click-click through all the forms to do it? You can write a script, in languages like Perl, PHP, Python, Tcl, Ruby, or any other language that lets you easily make web calls in it. Let that script simulate all that clicking around and filling in forms on your behalf.

This is a powerful technique; remember that everything you can do with ProjectForum can be done through the web, so that means you can write a program to do all those things for you. In fact, we use this technique to do a huge amount of completely automated testing every day on ProjectForum, making sure that as we add new features that they work, and we don't break any old features in the process. The amount of testing code we have is actually on par with the amount of code for the application itself.

Here is a short and simple example (albeit without error checking), written in Perl, demonstrating how a program can log in to a running ProjectForum server, and add a new user to a group. It does this by first logging in as the site administrator (so it has access to everything on the site), and then visits the group's accounts page, sees what users are already there, and adds a new user to the end of the list.

To run the example, save it to a file (e.g. addaccount.pl), edit the first few lines to provide information about your site, and then run the script.


my $siteurl = "http://127.0.0.1:3455/"; # base URL of the site
my $siteadminpass = "abc123" ; # site administration password
my $urlprefix = "1"; ; # URL prefix of the group we're adding the account to
my $newusername = "Bill"; ; # name of new user to add
my $newuserpass = "billpassword"; ; # password for new user

use HTML::Form;
use LWP;

my $ua = LWP::UserAgent->new;
$ua->cookie_jar( {} );

# signin as admin, which will set the cfadmintoken cookie
my $response = $ua->get($siteurl . "admin/adminsignin.html");
my $form = HTML::Form->parse($response->decoded_content, $response->base);
$form->value("adminpasswd", $siteadminpass);
$ua->request($form->click());

# now append the new account to the accounts screen
$response = $ua->get($siteurl . $urlprefix . "/admin/accounts.html");
$form = HTML::Form->parse($response->decoded_content, $response->base);
my $newaccount = "\n" . $newusername . ";" . $newuserpass;
$form->value("accountlist", $form->value("accountlist") . $newaccount );
$ua->request($form->click());

We'll talk more about this technique next week...

September 18, 2007

Q: Can I hide certain pages in a group?

For example, if a group is set up so that anyone can look at pages without being logged in, but only logged in users can change things, can I also make it so that certain pages in the forum are only visible to the logged in users? Or only administrators but not regular users in the group?

In ProjectForum, this sort of access is done on a forum-by-forum basis, and not on an individual page basis (the one exception being per-page locks to prevent editing). Remember that each group consists not only of the main forum, but can also have one or more projects (sub-forums). If you want to keep certain pages but not others hidden from a group of people, they need to go in a separate project.

September 17, 2007

Tip: Keep an eye on the "Storage" page.

If you're a group administrator, it's a good idea to periodically take a look at the storage page in the group administration area. This tells you how large your group is, both in terms of how much space it is taking up on disk, as well as detailing things like how many pages are in the group, how many old versions are stored, and so on.

Why keep an eye on this? Doing so can help you both watch out for unexpected uses or problems, and also keep the overall system running as smooth as possible.

For example, a sudden and sustained jump in the number of older versions of pages (when there isn't a huge change in activity that you're aware of) may be a clue that a "spam robot" is automatically posting garbage to one or more of your pages - take a quick peek at the recent changes of each forum (main group and projects) to see if this is the case. Are your users suddenly attaching multiple large attachments? Again, if this is a change in normal behavior, you may want to investigate further.

If you're not using certain data that is being collected, it makes sense to clean it up, which will not only keep the size of your group down, but also give a bit of a speed boost to many operations (like any other system, the more stuff that ProjectForum has to keep track of, the longer certain things will take). Are older versions of pages important to you? If not, periodically remove them. Do you even look at user activity logs? If not, make sure to clean them up, and think about just turning them off altogether.

September 13, 2007

Strengths and Weaknesses.

We received an interesting email from someone who has been evaluating ProjectForum as well as a number of other systems (various free and open source wikis, CMS-type tools like Plone, and other collaborative tools like SharePoint) for use in their small business.

We thought others might also be interested, and more importantly, we also wanted to hear what others thought. Are these the same areas that are important to you? Are there other things you either really like, or things that are missing that you'd really like to see?

Summarizing and paraphrasing what they thought helped ProjectForum stand out:


  • Ease of installation ("essential" for small business)
  • Cross-platform ("we're not the only SME to be contemplating the move over to Mac, away from the horrors of Vista") and cross-browser
  • Speed ("one of the fastest wikis out there")
  • Genuine Unicode support (they're a language company, so this is particularly important... many others they looked at that claimed to be Unicode compliant didn't handle things like Unicode searches)
  • Ease of configuration/administration (again, like installation, particularly important for SMEs)
  • "Friendlier than most of the rest" (simplicity, predictability, lack of interface clutter)

On the other side, there were two main areas where they found ProjectForum lacking. The first thing they wanted to see was an option to use a more-WYSIWYG editor, and the second was more flexibility and power in search: better control of what areas to search, and also ways to specify what you're searching for. (Both of these are areas where you should be seeing changes soon, btw).

So, what do you think? Does this miss out some of the things you think are important? Are some of the things mentioned not really so important to you? We'd love to hear what makes ProjectForum work (or not) for you.

Q: How can I move everything to a different machine?

Moving your entire site to a different machine is easy. First, install ProjectForum on the other machine, and then shut it down. Make sure the application really isn't running, e.g. by checking in Task Manager on Windows. Then copy the entire content of the "Group Data" folder from the original machine to the new machine, overwriting the "Group Data" folder that was created when you first started up on the new machine. Start ProjectForum on the new machine, and it will have picked up all your data, including passwords, forums, license etc. For CourseForum, use the "Course Data" folder instead.

September 12, 2007

Power Users: Taking advantage of other Web 2.0 tools.

Because you can easily include information from other websites into a forum, it becomes possible to take advantage of all kinds of Web 2.0 tools that are available today. These offer a variety of web services, often focused on social networking, and providing new ways for your group to share things with each other. You can do that with ProjectForum too of course, but if you're using one of these more specialized tools already, why duplicate the effort?

Many of these tools rely on "tags" to group things together, allowing you to easily find all items having a specific tag. A tag is a short word, of the group's choosing, that you all agree to use. Let's see how we can take advantage of two of the popular Web 2.0 services: del.icio.us and flickr.

del.icio.us is a social bookmarking service that lets you share interesting web sites that you've found. The service also provides an RSS feed showing all the latest bookmarks for a specific tag. To include it into a forum page, you can just add this to the forum: "[rss:http://del.icio.us/rss/tag/MYGROUPTAG]".

Flickr is a well-known photo sharing site. To include the latest photos associated with a given tag, you can do something similar to what we just did with del.icio.us, just with a different URL (the "rssfull:" instead of "rss:" makes sure we show the photo, not just its name): [rssfull:http://api.flickr.com/services/feeds/photos_public.gne?tags=MYGROUPTAG&lang=en-us&format=rss]

You can also use Flickr to create slideshows, which can then be embedded into any web page by copying and pasting a small piece of HTML like the following:

<iframe align=center src=http://www.flickr.com/slideShow/index.gne?user_id=XXXXXXXX@XXX
     frameBorder=0 width=500 scrolling=no height=500></iframe>

To include this in a forum page, just put a line containing "===html===" just before and just after it, and make sure "enable HTML formatting" is turned on for the forum. This is also a prime example of where using a custom link would be very useful.

September 11, 2007

Q: What is the cost of upgrades after one year?

When you purchase a license, you get access to support and all updates of the software released for the first year. To continue accessing upgrades past the one year, you need to pay an upgrade fee. This fee is 50% of the cost of a full license, at the time you purchase the upgrade, which will provide you with another full year of updates and support. For the last couple of years, we've also been offering a 25% discount on that fee when the upgrade is purchased before or at the one year date.

September 10, 2007

Tip: Showing news to your group.

Many news sources provide RSS feeds which help people with feedreaders keep track of breaking news on a particular topic. But not everyone uses a feedreader, or wants to dig out what feeds are worth tracking.

ProjectForum and CourseForum contain a built-in RSS feedreader, making it easy to embed an RSS feed right into a forum page. That way, the latest headlines from the feed will automatically be shown to everyone, even if they don't know a thing about feeds or RSS.

To display a feed, use the "rss:" tag, followed by the URL of the feed. For example, to include Yahoo's top stories feed in your forum, use "[rss:http://rss.news.yahoo.com/rss/topstories]".

September 06, 2007

Q: How can I get ProjectForum to automatically start when the machine restarts?

The way to do this depends on what type of machine you're running on. Under Windows, you'd install the Windows service version which we've talked about before.

On Mac OS X, you'll want to create a Launch Daemon entry (or previous to Tiger, a Startup Item). You can find info on doing that in our HOWTO.

On Linux and other Unixes, having programs automatically run is normally the job of the "init" program, which you control by entering a record into the "inittab" file. Do "man init" and "man inittab" to see the exact steps on your particular version.

September 05, 2007

Power Users: Reading and writing datafiles directly.

There's normally no reason at all to directly access the underlying database files (i.e. the "*.db" files) that hold the majority of the system's data. But for some people, particularly those wanting to run automated external tools to e.g. generate their own reports on usage, having a way to do so could be helpful.

The "*.db" files you see in the Course Data or Group Data directories are managed by an open source embedded database library called Metakit, which is included as part of the CourseForum or ProjectForum binaries. We've provided a HOWTO which provides a bit more information, and includes pointers to some tools that are useful for examining Metakit datafiles. They'll provide all you need to extract any data for use in another program.

Is the Metakit datafiles can be read from using these tools, can they also be written to? The answer here is a definite "yes, BUT". For starters, when CourseForum or ProjectForum are running, they assume they have exclusive access to these datafiles, meaning that if you try to write to them, there is the potential for data corruption. Therefore, make sure that any changes you want to make are done when the programs are not running. Second, as with any data modification, make sure that you understand exactly what you're modifying, so as to prevent creating data that doesn't make sense to the application.

There is actually a better way to programmatically make changes to the data stored in the Metakit datafiles, but we'll save that for another time.

September 04, 2007

Q: Can I install ProjectForum on a Oracle/MySql/etc. database?

We get this question sometimes, particularly from people who have been looking at other wiki software which requires an external database to be set up, and then the wiki software configured to access that database to store all of its information.

In CourseForum and ProjectForum, this isn't necessary. All of the database code needed is built right into the software, so no external database is needed.

September 03, 2007

Tip: Displaying links as images.

Placing a link to a web page into a forum is as easy as typing in the URL. Changing the name of the link (i.e. what is displayed in the page) can also be done: put a space after the URL, then type what you'd like to have displayed, and then put the whole thing in square brackets, e.g. "[http://www.foo.com my link]".

You can also have that link display as an image. Say for example you've got an image that you've uploaded into your forum that you'd like to make into a link. If you edit the page, you'll see that the place the image is shown in the page is marked with a tag like "[image:1234]" (the 1234 will be different for each image). To make it into a link, just put the URL inside the opening bracket, e.g. "[http://www.foo.com image:1234]".