Forum OpenACS Q&A: AdServer for OpenACS 4.x

Posted by Gilbert Wong on

I have a very early development version (0.1d :-) of an Ad Server package for OpenACS 4.x. This is a result of some work I am doing for a client. I don't quite remember what the old 3.x adserver package did so I can't compare the features list. Here is a list of current features:

  • Ability for Admins to define companies, company contact information, assign registered users to the company, and define ad rates.
  • Users assigned to a company can manage campaigns (regular users cannot access the Ad Management pages):
    • add/edit/delete banners and rich media ads
    • set start/end dates of campaigns
    • submit payments (nothing fancy here, just place holders)
  • Admins can approve payments, campaigns, and companies
  • Banner are cached using nsv_array for quick access and to reduce DB hits.
  • Impressions and clickthroughs tracked in nsv_arrays
  • Scheduled procs refresh payment information, banner code and links, store impressions and clickthroughs to the db
  • Banner code can be retrieved using one TCL command in your default-master page

As of today, I don't see any sign of the old adserver package in the CVS repository. Would people be interested in using the package I wrote? If so, I will release it to the OpenACS community. I'd like to release it using a BSD license because it seems cleaner. Would that be compatible with the GPL license for the OpenACS core?

Since this is an early version of the Ad Server, I am open to adding new features to it before I release it. Some major things I need to do are:

  • Improve the queuing of the ads. Right now, I cycle through the ads in a round robin fashion, equally distributing the impressions. My client wants to have a priority setting which shows ads more often if the advertiser pays more.
  • Automate the payment and payment validation process (probably tied to the payment gateway work for the ecommerce package)

If people are interested in this package, please let me know and tell me what your requirements are. I'll try to accomodate as many requirements as possible, but no guarantees. I should be able to provide code clean enough to release in January and I'll look into putting a demo site on the internet.

Posted by Tom Mizukami on
Since OpenACS is a toolkit for building database backed websites shouldn't the Ad Server take advantage of the database and be able to server Ads based on the user profile, log clickthroughs, then serve related ads, etc.
Posted by Gilbert Wong on
Well, I cache the ad information from the DB into nsv arrays.  The reason is that those don't change very often so the server does not need to make calls to the DB each time it serves an ad.  It's the same idea as using util_memoize to cache data that doesn't change very often.  You can then use the information stored in the arrays to serve specific ads based on user profile information, the section of the site, etc.  I probably didn't explain it very well in my inital post, but clickthroughs and impressions are logged in the DB at set intervals.
Posted by Jun Yamog on
Hi Gilbert,

Hmmm it seems that there is double work that is being done here.  My
officemate Roel ( is almost finished with his
ad_server.  I dont know the real diffrence right now but it is
working already in Postgres.  We will be putting up a demo site
about this week or later this week.

Not really sure if we asked Don B's permisssion to port.

Don B,

What do we do if apparently 2 people are working on the same module?
I think maybe Gilbert and Roel and work things out together.

Posted by Gilbert Wong on
Well, to me it's not a duplication because my client will use my package.  They have a specific requirement and it is much easier for me to start from "scratch" than to decypher what someone else wrote. :)
Posted by Don Baccus on
Jun - yes,  you guys mentioned to me that you'd be looking into porting the old ad server package.  Robert e-mailed me.  I need to put it into the status sheet, my screw-up.

As far as duplication, we'll see a lot of this given that quite a few folks here work for small companies doing client work under contract.  I don't see how we can avoid it.

It would be good to communicate earlier, though, so folks can cooperate where practical, possibly through subcontracts.  But if two companies are serving two clients who each need roughly the same thing at the same time duplication's probably unavoidable.  We're just too loosely coupled.

As to which ad server "wins" I dunno, people will have to compare them at some point.  I doubt if they'll differ to the extent that CMS and ETP differ ... but that's an example where (for now at least) we've kept both packages around.

Posted by Janine Ohmer on
Just to add to the fun - furfly's port of the 3.x adserver to ACS Classic 4.x is available from We're not using it in production, but someone (whose name escapes me at the moment) sent me some fixes a while back (which are included) so I guess he's using it, hopefully successfully.

We don't have time to port it right now but if anyone wants to, be my guest.

Posted by Roel Canicula on
Season's Greetings! :)

I'm Roel from Infiniteinfo and I've been doing some porting of the Ad Server to OpenACS 4.x.  I've ported most of the code and am down to tracking down a couple of bugs.  Still need to check on Oracle though.