Last updated on July 30th 2006

click on thumbnails for full-sized images!


(July 30, 2006)
I've freshly updated iVote to work on the latest Apache, MySQL, Perl and all related modules and underlying libraries under Solaris 10 (SPARC). All good - even the graphs!

(February 19, 2001)
This is hot people... I've added support for GD and GD::Graph/GD::Graph3d to iVote v0.06, which is the forthcoming release of iVote. What is it and what does it do? I've added a separate script that outputs a .png image of your entries and their votes. This way, you can imbed the plot into your own Website scheme, or use it within the context of iVote. But wait, it gets better! You can display a bar graph that's flat or in 3d, or a pie chart! Note that these graphs and charts are created on the fly each time it is called!

As a side note, check out iVote on The CGI Resource Index!

(January 29, 2001)
The latest version, v0.05 was released!

What is "iVote?"

In a nutshell, iVote is a very high-performance image voting/polling system.

It was designed from the ground up to take advantage of persistant database connections and the benefits of mod_perl under the Apache Web server. It should work anywhere Apache and Perl can; Unix or Windows. It works with MySQL currently as the RDBMS back-end, although changes to other databases is trivial, thanks to the use of DBI::DBD methods.

What you see above is the database administration screen to a new image voting system that I'm working on called "iVote." It came from the primordial ooze on March 10th, 2000 and has been steadily developed since that time. On March 19th, 2000 - a live demonstration version was made available for previewing (see below). It is currently at 830 lines of code and growing more each day.

It all started when I wanted to create some simple CGI applications to make a "best desktop contest" feature for this Web site. As I started coding it, I realized that it could equally apply to photos for a photo competition as much as desktops - or any other image(s) where you wish to have people select, vote or choose their favorite. Think of it as a visual poll.

Features and Status

In short, it works and works well. In the year that it's been up and running so far, it has not crashed or lost data once. It has proven itself to be tamper-proof via the Web as well thus far. Database connectivity workd smoothly and quickly and the system in general required no hand holding. As it is, iVote is fully functional and ready to deploy on your Web site!

Here are the current features (along with upcoming ones as noted) that are working:

Upcoming Features

Of course, iVote is not "finished" yet but it's under steady development. It is however in a fully usable state should you wish to deploy it on your Web site. All that's missing are some of the creature comforts, but nothing that prevents you from using it, or making it a fully usable system. It will probably never truly be "finished" as I'll be forever making it better, faster, more flexible and more robust. Don't let it's current pre-1.0 version scare you off. I just don't want to release it as such until I'm satisfied...

There are a list of things that I wish to implement in upcoming versions either to finish missing pieces or extend the current functionality. Some of the features in iVote are already quite unique as far as polling systems go.

So, without further a do, here are the things I'm looking to add, fix or improve...

Watch for the announcements here and on Freshmeat. Also listed on The CGI Resource Index.


The current documentation for iVote is available, and goes into great detail about all the configuration options of iVote and how things work as well as installation instructions.

Current Development

There are a few key features that I'm working on right now, and you can see what's been added by looking at the feature list above, paying attention to the features proceeded by the "(v0.05)" text. Below are some details that I'll fill in as I go along, as a sort of running note.

So far, the rated voting system is in place and working nicely up to a +/- of two vote values. That is, if you set $vote_limit to 0, it functions as a normal one vote increment as in previous versions. If you set $vote_limit to 1, then you get a -1 or +1 vote and if you set $vote_limit to 2, then you get a range of -2, -1, +1 or +2 vote. Depending on what $vote_limit is set to (0, 1 or 2) the vote buttons on the voting page are automatically generated. Support for higher ranges is built-in, but you don't get the automatic button generation. In the current developmental version of iVote you'll notice that rather than a simple option to "VOTE!" you get instead a "- / +" display for either decrementing the vote or incrementing it!

As it is, pre-v0.05 and in development, the new voting system has one major drawback. I just have to tackle a flaw introduced by this system in the vote counting and voting page to handle "negative votes." The problem is that in counting the "number of votes" the early code simply tallied up the total votes for a given entry. I had not planned for this new style of voting, so there's no field for "total votes" just one for the actual "score." So, if an entry gets a negative vote, not only does the score go down, but so does the "total number of votes" on an entry. This may be fine for your particular situation, but you need to be aware of it.

Also added is the option to set $ivote_down so that when the script is run, you're told that the system is "temporarily unavailable" which is good if you have some unforseen issues with the database or system in general. It alerts your visitors, but effectively shuts down the system completely. It exits before anything else happens within the script, like database connections, etc. If you wish to disable voting, but allow yourself the option of adding or deleting entries (as you would when first setting up iVote) set "$cutoff = 1" instead.

Three more quickie options; the ability to toggle displaying the blurb on the voting page via $blurb as well as toggling the hyperlinking via a "mailto:" of the name. This is useful if you wish to hide people's Email addresses, cut down on clutter on the vote page or have a simple name based on an object like color, style or whatever - rather than a person's name. Lastly, through $image_type you can specify "gif" or "jpg" as the file types, among others. Currently, having mixed image file types is NOT supported.

Another change allows you to set $db_name & $db_votes in the script so that you can easily change the table used for storing the vote information. This allows for multiple simultaneous polls to be running. Not that you couldn't do this beofre, as you'll still need multiple copies of the iVote script, but now it's easy to set, up top, rather than hacking into the code...

Another neat feature is the embeddable rankings display, which will show to the top $max_rank entries, sorting by score in a descending manner. That is, the entry with the highest number of votes will be up top. This is useful if you want to embed this information within a Web page.

I'm not sure what else will be in the next version, but rest assured, it's getting better and better. Be patient. :)

What is it written in?

I'm designing it from the ground up to be fast, lean and mean. It uses DBI::DBD currently connecting to a MySQL database. It's written in Perl and is being designed to be mod_perl friendly for speed, and it IS fast. Using the Apache::DBI module (part of mod_perl) you will have persistant database connections and with mod_perl, iVote will only be compiled once and cached thereafter. Think FAST.

Perhaps the best way to express this is by looking at a small piece of the iVote statistics page, which shows if you've got it goin' on:

iVote Information
iVote version v0.06
Mod_perl enabled Yes: mod_perl/1.25

Sites Using iVote

There are a few sites out there that are already using iVote! If you know of one that isn't listed - or would like to list yours, then let us know!


Copyright © 2001-2005 Michael Holve.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

One additional stipulation to this license is that you must leave the copyright notice generated by the program at the foot of it's generated pages as-is. You must not disable it or it's inherent links. You may however, at your discretion - reduce the font size or change it's coloring to suit your needs. It must however, remain legible without an electron microscope... :)


Download the latest (v0.05) version!

iVote revision history:

All images are (C) 1994-2005 by Michael Holve