RSS Feed
HomeBlog2009 › August

Announcing new vTools.Voting tool

We are excited to offer a new custom developed voting tool and will present the opportunity to use the software to a limited number of sections, chapters, and affinity groups. To list just a few system features: voter authentication via IEEE web accounts; intuitive user interface for creating election ballots; online tutorials for voters and volunteers, ability to create professionally looking ballots; printable ballots, ability to send e-mail to voters; IEEE branded look and feel.

The Voting system can be accessed by clicking HERE.


August 31st, 2009

A Novel Radix-2 Sorting Algorithm

2 Buckets in 1!

A radix-2 sort processes keys one bit at a time, splitting the current partially sorted list – based on the current bit – into two lists - often called buckets - that must normally be concatenated to form a single list before the next pass. 

The following code avoids the space and time overhead of the final concatenation step by using opporiste ends of the same array as the buckets.  When splitting is complete, the array is full.

void sort(unsigned *a, unsigned len)
{
  unsigned *s = a, *d = malloc(len * sizeof *d), *t;
  unsigned bit, is, id0, id1;

  for (bit = 1; bit; bit <<= 1, t = s, s = d, d = t)
    for (is = id0 = 0, id1 = len; id1 > id0; ++is)
      if (((s[is] >> 1) ^ s[is]) & bit)
        d[--id1] = s[is];
      else
        d[id0++] = s[is];
  free(d);
}

The trick is that the list is being built back-to-front at the end of the destination buffer — reverse order!  What’s going on here?

To see it, first consider this simpler algorithm:

void gray_code_order_sort(unsigned *a, unsigned len)
{
  unsigned *s = a, *d = malloc(len * sizeof *d), *t;
  unsigned bit, is, id0, id1;

  for (bit = 1; bit; bit <<= 1, t = s, s = d, d = t)
    for (is = id0 = 0, id1 = len; id1 > id0; ++is)
      if (s[is] & bit)
        d[--id1] = s[is];
      else
        d[id0++] = s[is];
  free(d);
}

We start with the low order bit and make as many passes as the key has bits (32 on my machine), moving to successively higher-order bit positions for each pass. The pass copies all the keys with a 0 at the current bit to the low end of the destination buffer and those with a 1 to the high end. Original order is of course maintained for the 0 keys, but the 1 keys’ order is reversed. After each pass, source and destination buffer pointers are swapped.

It isn’t hard to see that the resulting sort order is gray code! A nice little proof by induction can show this rigorously. We let this as an exercise.

The final trick is to convert the keys to gray code for the ordinal given by the key “on the fly” as the sort occurs.

Happily this is an efficient bit-parallel computation! For the ordinal N, a corresponding Gray code is just:

(N >> 1) ^ N)

This explains the rather elaborate test in the conditional of the first code above. By converting the keys to gray code and then sorting in gray code order, the final sort is in normal arithmetic order! Pretty cool.

Even though it’s theoretically O(n) in performance for a list of n elements, this sort is not normally super  fast. A good qucksort beats it sorting up to 10 million 32-bit unsigned integers for lists of up to 10 million or so.

My thought, however, is that this sort might work well in hardware, where its simplicity ought to be very helpful. How about it hardware hackers? Will someone build an FPGA and let me know?


August 17th, 2009

Useful Software

True to the goal of vTools project, we are always trying to streamline the administrative tasks to get the most efficiency out of the time we spend on the project. We use a number of various freeware software to achieve that. We would like to share the list of this software with you and hope it will help you as well.

Coordinating meeting time for a team is challenging and even more so if members are distributed over various time zones.  This is where http://www.doodle.com comes to help. It uses poll like interface to allow every meeting attendee to specify his or her time availability. The Meeting organizer then looks at the results to find the time that will work for everyone and communicates this time to meeting attendees.

doodle

Once you scheduled a meeting you need to find means of brining everyone together in the same space. We find that virtual meetings via teleconferencing software are the most convenient. There is a number of free tools that provide that capability. One tool that we use on a regular basis is DimDim. Dimdim is easy to use, works in various browsers, does not require downloads for attendees, provides live presentations, whiteboards and allows for sharing voice and video.

dimdim



Are there tools that you find useful? Please share your knowledge by posting a comment to this post.


August 12th, 2009

Welcome to vTools!

Welcome to the vTools Blog! We created this blog for anyone interested in vTools: IEEE volunteers, IEEE members, and general public. It contains information related to the vTools project such as product updates, technical information, thoughts on tactical and strategic direction, as well as notes on software outside of vTools project that we think we be useful to you.

Make sure to subscribe to our RSS feed to stay up to date on vTools!

RSS2


August 6th, 2009

vTools Mission

 

     Providing tools to the volunteers and staff who support our members.   

 

Archives

Categories