Abstract:
The subject matter of this specification can be embodied in, among other things, a method that includes receiving an electronic voting request from an originating mobile device at a recipient mobile device. Each mobile device is associated with a member of a voting group. The electronic voting request includes a voting ballot and instructions, that when executed by a processor, perform operations including generating a vote based on information in the voting ballot and transmitting the voting request to at least a portion of other members of the voting group that have not received the voting request. The operations also include receiving votes from the portion of the other members to which the voting request was transmitted and transmitting a tally of the received votes to the originating mobile device.

Description:
TECHNICAL FIELD 
     This instant specification relates to communication. 
     BACKGROUND 
     Mobile communication devices such as cellular telephones and personal digital assistants have become increasingly popular. People often rely on these devices to communicate with one another, especially to arrange impromptu gatherings or quickly reach a consensus on an issue. For example, a group of friends may call one another to discuss which movie they are going to see or where they should meet to have dinner. 
     A popular way of communicating using these devices is by means of Short Message Service (SMS) text messages. These text messages may be transmitted from device to device and are particularly useful in situations where placing or taking a call maybe inappropriate (e.g., in a library). However, many service providers charge a fee for each text message sent and received by the device. Consequently, communicating with a group using SMS messages can be expensive for the user responsible for sending and receiving the bulk of the text messages. 
     SUMMARY 
     In general, this document describes systems and techniques for cost-effective voting using mobile devices. For example, an SMS text message including a voting request (e.g., a ballot) and forwarding instructions may be propagated among a set of mobile devices in a first sequence. Responses to the ballot may be transmitted among the mobile devices in a second sequence that is different from the first sequence. The result of the vote may be transmitted among the devices in a third sequence that is also different from the first sequence. 
     For example, an originating device can transmit an SMS text message that includes a ballot and forwarding instructions to a first set of mobile devices. The first set of mobile devices can, in turn, transmit the text message to a second set of mobile devices specified by the forwarding instructions. This forwarding process can be repeated until the message has reached a specified set of mobile devices. Responses to the ballot can be transmitted from a receiving device to a device that transmitted the ballot to the receiving device until, in some cases, the responses reach the originating device. These responses may be tabulated, and an SMS message containing the result of the vote and forwarding instructions may be transmitted to another set of the devices. Then the forwarding process described above may be repeated. Transmitting messages in this way can disperse the cost of transmitting the messages among the mobile devices. 
    
    
     
       DESCRIPTION OF DRAWINGS 
         FIGS. 1A and 1B  are conceptual diagrams of an example cost-effective voting system. 
         FIG. 2  illustrates an example block diagram of a cost-effective mobile voting system. 
         FIG. 3  shows an example flowchart of a process of transmitting ballots. 
         FIG. 4  shows an example flowchart of a process of transmitting votes. 
         FIG. 5  shows an example flowchart of a method of distributing voting results. 
         FIG. 6  is a schematic representation of an exemplary mobile device that can be used to implement the techniques described herein. 
         FIG. 7  is a block diagram illustrating the internal architecture of the device of  FIG. 6 . 
         FIG. 8  is a block diagram illustrating exemplary components of the operating system used by the device of  FIG. 6 . 
         FIG. 9  is a block diagram illustrating exemplary processes implemented by the operating system kernel of  FIG. 8 . 
     
    
    
     Like reference symbols in the various drawings indicate like elements. 
     DETAILED DESCRIPTION 
     In general, this document describes systems and techniques for dispersing communication costs across a group. In some implementations, the cost of conducting a vote via text message may be spread across a group of cellular telephone users. For example, a text message may include transmission instructions and a voting request. The text message may be disseminated among a group of devices according to the forwarding instructions. Responses to the voting request may be transmitted from receiving devices to the devices that transmitted the message to the receiving devices. The responses may be tabulated and the result may be broadcast among the participating devices in an order different from the initial transmission order. 
       FIG. 1A  shows a system  100  for creating and sending one or more messages using a voting application and receiving voting response messages in a cost-effective manner. A mobile device  102  can include a voting application. The mobile device  102  can be a cell phone, personal digital assistant (PDA), or other mobile device capable of sending and receiving messages. The voting application can also include a graphic user interface (GUI)  104  that can allow a user of the mobile device  102  to create a ballot for selecting among several options. For example, the user can create a ballot for voting on what activity people would like to do that evening. As shown in the example depicted, the user of the mobile device  102  can use the GUI  104  to create a ballot that can allow a group of people to vote on where to have dinner. 
     In some implementations, the voting application can access a contacts list associated with the mobile device  102 . The user can select contacts to receive the ballot from the contacts list. In some implementations, in addition to or in place of selecting contacts from a contacts list, the user can manually enter contacts to receive the ballot. For example, the user can select three contacts from a contact list stored on the mobile device  102 , and manually enter a phone number for a fourth person. Each contact, whether entered manually or selected from a contacts list, can be associated with a mobile device. 
     In some implementations, the voting application can separate mobile devices associated with contacts into voting groups. In the example depicted, the user has selected six contacts to receive the ballot. The voting application has divided recipient devices associated with the selected contacts into two voting groups, with mobile devices  106 ,  108 , and  110  in a first group and mobile devices  112 ,  114 , and  116  in a second group. In some implementations, the voting application can separate recipient devices into more than two groups. In some implementations, the voting application can separate recipient devices into uneven voting groups, with one group having more recipient devices than another. 
     The voting application can select a voting coordinator for each voting group. In the example depicted, the voting application has selected the mobile device  106  as the voting coordinator for the first group and the mobile device  112  as the voting coordinator for the second group. In some implementations, the voting application can select voting coordinators randomly. In some implementations, the voting application can select voting coordinators based on past selections of voting coordinators. For example, a voting group may include first and second mobile devices. If the first mobile device has been selected as a voting coordinator during a previous voting coordinator selection process, the voting coordinator can select the second mobile device as a voting coordinator for the current voting coordinator selection process. As another example, a voting group may include first, second, and third mobile devices. The first mobile device may have been previously selected as a voting coordinator five times. The second mobile device may have been previously selected as a voting coordinator three times. The third mobile device may have been previously selected as a voting coordinator eight times. In this example, the second mobile device can be selected as a voting coordinator for the voting group since it has been previously selected as a voting coordinator the least number of times. 
     In some implementations, the voting application can select voting coordinators based on the messaging plans of the mobile devices in a voting group. For example, a voting group can include a first mobile device with a messaging plan of 500 messages per month, a second mobile device with a messaging plan of 300 messages per month, and a third mobile device with a messaging plan of 1,000 messages per month. The voting application can select the third mobile device as a voting coordinator for the voting group since the third mobile device has a messaging plan that includes more messages than the other mobile devices in the voting group. In some implementations, the voting application can select voting coordinators based on the number of messages that each mobile device in a voting group has available. For example, a voting group can include first, second, and third mobile devices. The first mobile device may have 130 messages left for the month. The second mobile device may have 20 messages left for the month. The third mobile device may have 87 messages left for the month. The voting application can select the first mobile device as a voting coordinator for the voting group since the first mobile device has more messages left to use in the current month than the other mobile devices in the group. 
     In some implementations, the voting application can select voting coordinators based on one or more relationships between recipients of a ballot. For example, the users of mobile devices in a voting group may all be co-workers. One of the users may be the head of a department. The mobile device belonging to the head of the department may be selected as a voting coordinator since the other recipients may be more willing to view and respond to a message received from the head of the department than a message received from a co-worker. 
     In some implementations, the voting application can select voting coordinators based on a cost associated with sending a message for each mobile device. For example, a voting group may include first, second, and third mobile devices. The first mobile device may have to pay a fee of $0.10 for each message sent. The second mobile device may have to pay a fee of $0.12 for each message sent. The third mobile device may have to pay a fee of $0.07 for each message sent. The voting application may select the third mobile device as a voting coordinator for the voting group since the third mobile device pays a lower fee for sending messages than the other mobile devices in the voting group. In some implementations, the voting application can separate the voting groups into subgroups and select a subgroup voting coordinator for each subgroup. 
     The voting application can create voting inquiry messages that include the ballot to send to the voting coordinators. In addition to the ballot, the voting inquiry messages can include forwarding instructions. The forwarding instructions can indicate to the voting coordinators that the ballot should be forwarded to one or more other mobile devices. For example, the mobile device  102  can create a voting inquiry message  118  to send to the mobile device  106 . The voting inquiry message  118  can include the ballot and forwarding instructions instructing the mobile device  106  to forward the ballot to the mobile devices  108  and  110 . In some implementations, the forwarding instructions can instruct a voting coordinator to forward the ballot and additional forwarding instructions to one or more subgroup voting coordinators. The forwarding instructions can indicate subgroup voting coordinators and other subgroup members to allow the voting coordinator to create forwarding instructions for one or more subgroup voting coordinators. In some implementations, the forwarding instructions can instruct a voting coordinator to wait for one or more response messages containing user ballot selections. In some implementations, the forwarding instructions can instruct a voting coordinator to compile the user ballot selections contained in one or more response messages with a ballot selection made by a user of the voting coordinator device into a single response message. The forwarding instructions can instruct the voting coordinator to send the single response message to a mobile device that sent the voting inquiry message that included the forwarding instructions. 
     The mobile device  102  can send a voting inquiry message to the voting coordinators. In some implementations, the mobile device  102  can send the voting inquiry messages as text messages using Short Message Service (SMS) protocol. The voting application can present the received ballot to the user of the mobile device  102  and may allow the user to select one of the options from the ballot. 
     The mobile device  106  and the mobile device  112 , acting as voting coordinators, can each receive a voting inquiry message that includes the ballot from the mobile device  102 . For example, the mobile device  106  can receive the voting inquiry message  118 . A voting application running on the mobile device  106  can determine that the voting inquiry message  118  includes forwarding instructions and extract the forwarding instructions from the voting inquiry message  118 . The forwarding instructions can indicate additional mobile devices to which the mobile device  106  should forward the ballot. Additionally, the forwarding instructions can indicate if one or more of the additional mobile devices are subgroup voting coordinators and indicate forwarding instructions that should be sent to the subgroup voting coordinators. In the example depicted, the forwarding instructions included in the voting inquiry message  118  can indicate that the mobile device  106  should forward the ballot to the mobile devices  108  and  110 . The mobile device  106  can create voting inquiry messages to send to the mobile devices  108  and  110  that include the ballot. The mobile device  106  can then send the voting inquiry messages to the mobile devices  108  and  110 . 
     In some implementations, a voting coordinator for a voting group may separate the remaining mobile devices in the voting group into one or more subgroups and select subgroup voting coordinators for each of the subgroups. For example, a voting group can include a total of five mobile devices. A voting coordinator for the voting group can separate the other four mobile devices in the voting group into to subgroups of two devices each. The voting coordinator can select a subgroup voting coordinator for each subgroup. The voting coordinator can send a voting inquiry message that includes the ballot and additional forwarding instructions to one or more of the subgroup voting coordinators. 
     The mobile device  106  can present a received ballot to a user. The voting application running on the mobile device  106  can include a GUI that allows the user to select one of the options presented as part of the ballot. In some implementations, the voting application can wait to receive responses from the mobile devices  108  and  110  after the user of the mobile device  106  has selected one of the presented options. 
     The mobile devices  108  and  110  can receive the forwarded voting inquiry messages from the mobile device  106 . A voting application running on each of the mobile devices  108  and  110  can present the ballot to a user of each of the mobile devices. Each user can then vote for one of the options presented in the ballot and the mobile devices  108  and  110  can send response messages that include the users&#39; selections to the mobile device  106 . For example, the mobile device  108  can receive a voting inquiry message that includes a ballot from the mobile device  106 . A voting application running on the mobile device  108  can present the ballot to a user. The ballot can provide several options for a restaurant to have dinner. The user can select one of the restaurants, and the mobile device  108  can send a response message to the mobile device  106  indicating the user&#39;s selection. 
     In another example, the mobile device  108  may be a subgroup voting coordinator for a subgroup. In this example, the mobile device  108  can send voting inquiry messages including the ballot to one or more other mobile devices as directed by forwarding instructions received from the mobile device  106 . The mobile device  108  can present the ballot to a user and allow the user to make a selection. The mobile device  108  can wait for responses from the mobile devices to which the mobile device  108  had forwarded the ballot. The mobile device  108  can send a response message to the mobile device  106  that includes the selection of the user of the mobile device  108  and the selections of users of the mobile devices to which the mobile device  108  had forwarded the ballot. 
     The mobile device  106  can receive response messages from the mobile devices  108  and  110 . In some implementations, a voting coordinator will only receive response messages from mobile devices to which the voting coordinator sent a voting inquiry message. For example, in some implementations, the mobile device  106  will only receive response messages from the mobile devices  108  and  110 . In some implementations, a mobile device will only send a response message to a device that sent an voting inquiry message to the mobile device. For example, in some implementations, the mobile device  108  will only send a response message to the mobile device  106  in response to receiving a voting inquiry message from the mobile device  106 . 
     The voting application running on the mobile device  106  can compile selections indicated in one or more response messages with a selection made by a user of the mobile device  106  into a single response message and send the single response message to the mobile device  102 . For example, the ballot may present several options for restaurants as depicted. A user of the mobile device  108  can select M&amp;S Grill, a user of the mobile device  110  can select Betty&#39;s Diner, and a user of the mobile device  106  can also select Betty&#39;s Diner. The mobile device  108  can send a response message to the mobile device  106  indicating M&amp;S Grill and the mobile device  110  can send a response message to the mobile device  106  indicating Betty&#39;s Diner. The voting application running on the mobile device  106  can create a single response message indicating one vote for M&amp;S Grill and two votes for Betty&#39;s Diner and send the single response message to the mobile device  102 . 
     The mobile device  112  can forward the ballot to the mobile devices  114  and  116 , receive response messages from the mobile devices  114  and  116 , and compile the results in the same manner as described above. The mobile device  112  can send a single response to the mobile device  102  indicating the selections of users of the mobile devices  112 ,  114 , and  116 . 
     The mobile device  102  can receive response messages from the voting coordinator mobile devices  106  and  112  and tabulate the response messages to determine which option has won the voting. The voting application running on the mobile device  102  can determine the winner based on selections indicated in the response messages as well as a selection made by the user of the mobile device  102 . The mobile device  102  can indicate the winning selection to the other mobile devices in the system  100 . 
     In some implementations, a mobile device associated with a contact selected or input by the user of the mobile device  102  may have an unlimited messaging plan. For example, the mobile device  112  may be associated with a text message plan that allows the mobile device  112  to send an unlimited number of SMS text messages per month. 
     The mobile device  102  can select a mobile device with the unlimited messaging plan as a lone voting coordinator. The mobile device  102  can send a voting inquiry message including a ballot and forwarding instructions to the lone voting coordinator. The forwarding instructions can direct the lone voting coordinator to send voting inquiry message that include the ballot directly to all of the other mobile devices that have been selected to receive the ballot. For example, the mobile device  112  may be associated with an unlimited messaging plan. The mobile device  102  can select the mobile device  112  as a lone voting coordinator. The mobile device  102  can send a voting inquiry message to the mobile device  112  that includes a ballot and forwarding instructions directing the mobile device  112  to send voting inquiry messages that include the ballot to the rest of the mobile devices. Upon receiving the voting inquiry message, the mobile device  112  can send voting inquiry messages including the ballot directly to each of the mobile devices  106 ,  108 ,  110 ,  114 , and  116 . Since the lone voting coordinator device is associated with an unlimited messaging plan, the lone voting coordinator does not incur extra charges for sending messages to the rest of the recipient mobile devices. 
     In some implementations, the mobile device  102  can send a voting inquiry message to a lone voting coordinator that indicates a ballot option selected by the user of the mobile device  102  along with the ballot and forwarding instructions. This can allow the lone vote coordinator to tabulate the votes once responses are received from one or more recipient mobile devices and send results messages to the mobile devices, including the mobile device  102 , rather than compiling the selections of the other recipient mobile devices and sending a response message to the mobile device  102  that indicates all of the selections. In some implementations, the lone voting coordinator can compile all of the votes received from the other mobile devices along with the vote of a user of the lone voting coordinator into a single response message and forward the single response message to the mobile device  102 . 
     In some implementations, one or more of the recipient mobile devices may not have a voting application installed that is needed for interpreting forwarding instructions and displaying a ballot. For example, the mobile device  106  may not have a voting application installed. When the mobile device  106  receives a voting inquiry message that includes a ballot and forwarding instructions from the mobile device  102 , the voting inquiry message may include instructions on how to access and install a voting application for interpreting forwarding instructions and displaying a ballot. The user of the mobile device  106  can choose whether or not to install the voting application. If the user chooses to install the voting application, the voting application can access the previously received voting inquiry message, display the ballot to the user, and follow any forwarding instructions included in the voting inquiry message. 
     In some implementations, a mobile device may not be capable of accessing and installing the voting application. This may be because the mobile device is an older model mobile device and is not capable of running the voting application software. If a mobile device does not have, or is incapable of running the voting application, a voting inquiry message received by the mobile device can be presented to the user of the mobile device in a user readable format. In some implementations, the user can respond to the voting inquiry message with a standard message, such as a text message. For example, the mobile device  112  may not be able to run the voting application. The user of the mobile device can indicate a selection by typing in the selection and sending the selection as a text message. A voting application running on the mobile device  102  can recognize that the mobile device  112  has responded with a standard text message instead of a response message formatted to interact with the voting application. The mobile device  102  can select a different voting coordinator for the voting group that includes the mobile device  112  to ensure that the ballot reaches all of the intended recipient mobile devices in the voting group. In some implementations, the voting application running on the mobile device  102  can parse the text response from the mobile device  112  to extract the user&#39;s selection from the text message and incorporate the selection with results received from other mobile devices. 
     In some implementations, a time limit can be specified in a voting inquiry message. For example, the mobile device  102  can indicate in the voting inquiry message  118  that mobile device  106 , acting as a voting coordinator, should wait no more than 30 minutes for response messages from the mobile devices  108  and  110 . In this example, if the mobile device  108  is not on or does not receive a voting inquiry message, or if the user of the mobile device  108  chooses to ignore the voting inquiry message, the selections made by the users of the mobile devices  106  and  110  can still be propagated back to the mobile device  102  and tabulated to determine a winning selection. 
     In some implementations, the time limit can be automatically set by the voting software based on a time of an event or activity indicated in the ballot. For example, a ballot can include the text “Dinner at 8:00, where should we go?” If the current time is 6:00 pm, the voting application can set a time limit of 60 minutes so that a winning option can be selected an hour before dinner to allow the recipients of the ballot adequate time to prepare for dinner. In some implementations, the user of the mobile device  102  can manually indicate a time limit. 
     In some implementations, if the mobile device  102  does not receive a response from a voting coordinator within a specified time, the mobile device  102  can select another mobile device from the same voting group as a new voting coordinator. This ensures that the ballot is sent to all of the intended recipients. For example, the mobile device  102  may initially select the mobile device  106  as a voting coordinator and send a voting inquiry message that includes a ballot and forwarding instructions to the mobile device  106 . The mobile device  106  may be turned off, out of service range, or have voting software disabled. If the mobile device  102  does not receive a response from the mobile device  106  within a specified time, the mobile device  102  can select the mobile device  108  as a new voting coordinator for the voting group. The mobile device  102  can send a voting inquiry message that includes the ballot and forwarding instructions to the mobile device  108 . The forwarding instructions can direct the mobile device  108  to forward the ballot to the mobile device  110 . The specified time can be set in a manner as described above. 
     In some implementations, a recipient mobile device can include additional information in a response message that includes a vote of a user of the recipient mobile device. The additional information can include details of a messaging plan associated with the recipient mobile device. For example, the mobile device  106  can send a response message to the mobile device  102  that indicates that the mobile device  106  has a messaging plan that allows for 1,000 messages to be sent in a month. In another example, the mobile device  108  can send a response message to the mobile device  106  that indicates that the mobile device  106  has 27 messages available to use for the remainder of the month. 
       FIG. 1B  shows the system  100  from  FIG. 1A . In this figure, the system  100  is used as an example system for sending voting results to one or more mobile devices. The mobile device  102  can compile votes from the other mobile devices in the system  100  as well as a vote made by the user of the mobile device  102 . The votes can be selections made by users of the mobile devices in the system  100  as described above. A voting application included in the mobile device  102  can tabulate the votes to select a winning option. For example, following the example depicted in  FIGS. 1A and 1B , the voting application can determine that the winning option is Betty&#39;s Diner. The voting application can present the results of the vote to a user of the mobile device  102 . 
     The mobile device  102  can propagate the results of the vote to the other mobile devices in the system  100 . In some implementations, the mobile device  102  can select one or more new voting coordinators from each of the previously determined voting groups. For example, the voting application can select the mobile devices  108  and  114  as new voting coordinators. In some implementations, the voting application can determine one or more new voting groups and select one or more new voting coordinators from each of the new voting groups. For example, when sending out voting inquiry messages, a first group may have contained mobile devices that did not respond with voting response messages, possibly because the mobile devices were powered down or out of service range. The mobile device  102  can select new voting groups so that each of the new voting groups includes at least one mobile device that provided a response message in response to a voting inquiry message. One or more previously responsive devices from each of the new voting groups can be selected as a new voting coordinator. This can increase the probability that a results message is forwarded to all of the intended recipient mobile devices. 
     In some implementations, the voting application running on the mobile device  102  can verify that the new voting coordinators have the voting application installed and responded to the originally sent voting inquiry. For example, if the mobile device did not send a response message in response to a voting inquiry message, the mobile device  102  can avoid selecting the mobile device  110  as a new voting coordinator for the first voting group. In another example, the mobile device  116  may have responded to a voting inquiry message with a standard text message, indicating that the mobile device does not have a voting application installed. The mobile device  102  can avoid selecting the mobile device  116  as a new voting coordinator for the second voting group because the mobile device  116  may not have the ability to interpret and execute forwarding instructions. Verifying that new voting coordinators have the voting application installed and responded to the originally sent voting inquiry message can increase the probability that a results message is forwarded to all of the intended recipient mobile devices. 
     The mobile device  102  can create a results message. The results message can include the results of the vote and forwarding instructions. The mobile device  102  can send the results message to the new voting coordinators. For example, the mobile device  102  can send a results message that includes forwarding instructions that indicates Betty&#39;s diner as the winning selection to the mobile device  108 . The forwarding instructions can indicate that the mobile device  108  should forward the results to the mobile device  106  and the mobile device  110 . 
     The new voting coordinators can receive a results message that includes voting results and forwarding instructions from the mobile device  102 . A new voting coordinator can extract forwarding instructions from the results message and forward the results to additional mobile devices. For example, the mobile device  114  can extract forwarding instructions from a results message received from the mobile device  102 . The forwarding instructions can indicate that the mobile device  114  should forward the results to the mobile devices  112  and  116 . In some implementations the results message can include no forwarding instructions. 
     In some implementations, a new voting coordinator can define one or more subgroups and one or more subgroup voting coordinators. In some implementations, forwarding instructions included in a results message received by a new voting coordinator can specify one or more subgroups and one or more subgroup voting coordinators. The new voting coordinator can send a results message that includes the results and additional forwarding instructions to subgroup voting coordinators. 
     A new voting coordinator can present the results of the vote to a user of the new voting coordinator. Mobile devices that have received a results message from a new voting coordinator or subgroup voting coordinator can present the results of the vote to users. 
     By selecting a new voting coordinator for a voting group, the voting application can more evenly distribute the cost of sending messages among the mobile devices in the voting group. For example, following the example shown in  FIGS. 1A and 1B , the mobile device  106  can be chosen as the original voting coordinator for the first voting group. As described previously, the mobile device  106  can send two voting inquiry messages to the mobile devices  108  and  110  and can send one response message that includes user selections to the mobile device  102 , for a total of three messages. The mobile device  108  can be selected as a new voting coordinator for the first voting group. The mobile device  108  can send one response message to the mobile device  106  when the mobile device  106  is acting as the original voting coordinator. Additionally, the mobile device  108  can send two results messages to the mobile devices  106  and  110  when the mobile device  108  is acting as the new voting coordinator. In an implementation in which mobile devices are charged for each message sent, the users of the mobile devices  106  and  108  would each be charged for three messages in this example. 
     Comparing this example to an implementation in which the same mobile device is chosen as both the original and new voting coordinator demonstrates that the cost of propagating voting inquiry messages, response messages, and results messages among the mobile devices in a voting group can be more evenly distributed when a new voting coordinator is selected so as to be different from an originally selected voting coordinator. For example, in an implementation in which the same mobile device is chosen as both the original and new voting coordinator for a voting group that includes three mobile devices, the voting coordinator device sends a total of 5 messages while the other mobile devices in the voting group each send 1 message. This much less evenly distributes the cost of sending messages among mobile devices in a voting group than an implementation in which a new voting coordinator is selected so as to be different from an originally selected voting coordinator. 
     In the example depicted in  FIGS. 1A and 1B , the mobile device  102  sends a total of four messages, the mobile devices  106 ,  108 ,  112  and  114  each send a total of three messages, and the mobile devices  110  and  116  each send one message. Additionally, the mobile device  102  receives a total of two messages, the mobile devices  106  and  112  each receive a total of four messages, and the mobile devices  108 ,  110 ,  114  and  116  each receive a total of two messages. In implementations in which the mobile devices in the system  100  incur a charge for each message sent and received, the above described process can more evenly distribute the cost of propagating voting inquiry messages, response messages, and results messages among the mobile devices. In an implementation in which the mobile device  102  sends voting inquiry messages and results messages directly to the recipient mobile devices in the system  100  and the recipient mobile devices send response messages directly to the mobile device  102 , the mobile device  102  would send a total of 12 messages and receive a total of six messages while the recipient mobile devices would send a total of one message each and receive a total of two messages each. 
       FIG. 2  illustrates an example block diagram of a cost-effective mobile voting system  200 . A mobile device  202  can include a voting application  204  capable of creating and sending voting inquiry messages. The voting application  204  can include a GUI  206  capable of presenting information to a user of the mobile device  202  and receiving input from the user. The GUI  206  can interact with a display manager  208  of the mobile device  202  for displaying information to the user. The GUI  206  can also interact with an input manager  210  to receive input from the user, for example, through a keypad or touch screen. 
     The GUI  206  can allow the user to input information for creating a voting ballot. For example, the user can input a question, and input one or more options for others to choose from. The voting application  204  can include a ballot generator  212  for creating one or more ballots using information input by the user. The GUI  206  can display a ballot generated by the ballot generator  212  to the user and allow the user to vote by selecting an option listed as part of the ballot. 
     The voting application  204  can access a contact list  214  of the mobile device  202 . The voting application  204  can allow the user to select one or more contacts from the contact list  214  to receive a ballot generated by the ballot generator  212 . In some implementations, the voting application  204  can allow the user to manually input one or more contacts to receive a ballot. Each contact, whether selected from the contact list  214  or input manually by the user, can be associated with a recipient mobile device. 
     The voting application  204  can include a grouping module  216 . The grouping module  216  can separate intended recipients into one or more voting groups as described above with reference to  FIG. 1A . In some implementations, the grouping module  216  can separate voting groups into subgroups. The grouping module  216  can select one or more voting coordinators for a voting group. In some implementations, the grouping module  216  can select one or more subgroup voting coordinators for a sub group. 
     The voting application  204  can create a voting inquiry message that includes a ballot generated by the ballot generator  212  and forwarding instructions. The forwarding instructions can instruct voting coordinator mobile devices to forward the ballot to other mobile devices in a voting group. The voting application  204  can access an input/output interface  218  of the mobile device  202  to transmit the voting inquiry message to voting coordinator mobile devices. In some implementations, the voting inquiry message can be transmitted as an SMS text message. The voting application  204  can also access the input/output interface  218  to receive response messages. 
     The voting application  204  can include a tabulator  220  for determining a result of a vote. The tabulator can extract selections made by users of recipient mobile devices from response messages. The tabulator can also access a selection made by the user of the mobile device  202 . The tabulator  220  can tabulate the selections to determine a winning selection. The voting application  204  can create a results message that indicates a winning selection as determined by the tabulator  220 . The voting application  204  can access the input/output interface  218  to transmit the results message to recipient mobile devices. 
     The mobile device  202  can include a processor  222  for executing application code and performing instructions. The mobile device  202  can include memory  224  for storing the contact list  214 , program code, user input, and other program data. The mobile device  202  can include additional applications  226  that can be related or unrelated to the voting application  204 . For example, a photo application may allow a user of the mobile device  202  to include a photo or graphic in a ballot generated using the ballot generator  212 . In another example, a web browser may allow the user to look up restaurants listed on a ballot and include web links in the ballot. 
     The mobile device  202  can transmit a voting inquiry message  228 . The voting inquiry message  228  can include a ballot, for example, a ballot generated by the ballot generator  212 . The ballot can include an inquiry and a number of options for users of recipient mobile devices to select. The voting inquiry message  228  can also include forwarding instructions. The forwarding instructions can instruct voting coordinator mobile devices to forward the ballot to other mobile devices in a voting group. The forwarding instructions can also include subgroup and subgroup voting coordinator information. 
     The voting inquiry message  228  can be received by a relay device  230  such as, for example, a cell phone tower. In some implementations, the relay device  230  can relay the voting inquiry message  228  to another relay device such as, for example, a second cell phone tower, or a satellite. The voting inquiry message  228  is transmitted to one or more recipient mobile devices via the relay device  230  or another relay device. For example, the relay device  230  can transmit the voting inquiry message  228  to mobile devices  232  and  234 . In another example, the relay device  230  can transmit the voting inquiry message  228  to a satellite and the satellite can transmit the voting inquiry message to the mobile devices  232  and  234 . The recipient mobile devices  232  and  234  can include similar components to those of the mobile device  202  such as a GUI, voting application, grouping module, I/O, input manager, display manager, etc. 
       FIG. 3  shows an example flowchart of a process  300  of transmitting ballots. In some implementations, the process  300  can be performed by a processor executing instructions stored in a computer-readable medium, such as for example, the processor  222  shown in  FIG. 2 . In some implementations, the process  300  can be performed by a mobile device, such as for example, the mobile device  202  shown in  FIG. 2 . 
     A ballot can be created at step  302 . The ballot can include an inquiry and one or more options that can be selected in response to the inquiry. For example, the ballot can include the inquiry “What time should we meet for racquet ball?” and several options, such as “10:00,” “10:30,” and “11:00.” The ballot can be created based on input received from a user of a mobile device such as, for example, the mobile device  202  shown in  FIG. 2 . 
     Voting groups can be determined at step  304 . A number of intended recipients of a message that includes the ballot can be separated into one or more voting groups. For example, eight intended recipient mobile devices can be separated into two voting groups, with each voting group including four of the intended recipient mobile devices. In some implementations, voting groups can be separated into subgroups. 
     A voting coordinator for each voting group can be selected at step  306 . A voting coordinator device for a voting group can be selected using methods previously described with reference to  FIG. 1A . In some implementations, it can be verified that a mobile device includes appropriate software for executing voting coordinator functionality before the mobile device is selected as a voting coordinator for a voting group. In some implementations, subgroup voting coordinators can be selected from subgroups. 
     A message can be created at step  308 . For example, referring to  FIG. 2 , the mobile device  202  can create the message  228 . The message can include the ballot created at stage  302  as well as forwarding instructions. The forwarding instructions can instruct voting coordinators selected at stage  306  to forward the ballot to other mobile devices in a voting group. 
     A message can be transmitted to the voting coordinators at step  310 . For example, referring to  FIG. 2 , the mobile device  202  can use the input/output interface  218  to transmit the message  228  to the relay device  230 . The relay device  230  can propagate the message  228  to the recipient mobile devices  232  and  234 . 
       FIG. 4  shows an example flowchart of a process  400  of transmitting votes. In some implementations, the process  400  can be performed by a processor executing instructions stored in a computer-readable medium, such as for example, the processor  222  shown in  FIG. 2 . In some implementations, the process  400  can be performed by a mobile device, such as for example, the mobile device  106  shown in  FIG. 1A . 
     A message can be received at step  402 . For example, referring to  FIG. 1A , the mobile device  106  can receive the voting inquiry message  118 . The message can include a ballot. In some implementations the message can include forwarding instructions. 
     A ballot can be extracted from the message at step  404 . For example, referring to  FIG. 1A , the mobile device  106  can extract a ballot created by the mobile device  102  from the message  118 . The ballot can include an inquiry and one or more options that a user can select in response to the inquiry. 
     The message can be assessed to determine if forwarding instructions are included with the message at step  406 . For example, a mobile device can include a voting application that can determine if a message includes forwarding instructions. The forwarding instructions can include telephone numbers, e-mail addresses, screen names, or other identifiers for one or more mobile devices to which the ballot should be forwarded. In some implementations, forwarding instructions can identify one or more subgroups and one or more subgroup voting coordinators. The forwarding instructions can indicate that a subgroup voting coordinator should receive additional forwarding instructions. 
     In some implementations, if, at step  406 , it is determined that the message does not include forwarding instructions, a user can be allowed to vote at step  408 . For example, a user can vote for an option in response to an inquiry included in the ballot. As another example, referring to  FIG. 1A , the mobile device  108  can include a GUI capable of presenting the ballot to a user and receiving a selection from the user. 
     A response message can be created at step  410 . The response message can indicate a selection made by the user. For example, referring to  FIG. 1A , the mobile device  108  can create a response message that indicates a restaurant selected from the ballot by a user of the mobile device  106 . 
     The response message can be sent to a previous nodes at step  412 . For example, referring to  FIG. 1A , the mobile device  108  can send a response message which includes a user selection to the mobile device  106 . As another example, a mobile device can access an input/output interface, such as the input/output interface  218  shown in  FIG. 2 , to transmit a response message to a mobile device that transmitted the original message received at stage  402 . 
     In some implementations, if, at step  406 , it is determined that the message includes forwarding instructions, the ballot can be forwarded according to the forwarding instructions at step  414 . For example, referring to  FIG. 1A , the mobile device  106  can forward a ballot included in the message  118  to the mobile devices  108  and  110 . In some implementations, the ballot can be forwarded in a message that includes additional forwarding instructions. In some implementations, at step  414 , the group of devices that the ballot may be forwarded to can be further divided into subgroups, and the ballot can be forwarded to the voting coordinator in those subgroups in a message that includes additional forwarding instructions. 
     A user can be allowed to vote at step  416 . For example, a user can vote for an option in response to an inquiry included in the ballot. As another example, referring to  FIG. 1A , the mobile device  106  can include a GUI capable of presenting the ballot to a user and receiving a selection from the user. 
     It can be determined if response messages have been received from nodes to which the ballot was forwarded at step  418 . For example, referring to  FIG. 1A , the mobile device  106  can check if response messages have been received from the mobile devices  108  and  110 . If response messages have not been received from all nodes to which the ballot was forwarded, step  418  can be repeated. If response messages have been received from all nodes to which the ballot was forwarded, the process  400  can continue to step  420 . For example, referring to  FIG. 1A , upon receiving response messages from the mobile devices  108  and  110 , the mobile device  106  can continue with the process  400 . In some implementations, if a specified time limit has been reached, process  400  can continue to step  420 . 
     Votes can be compiled at step  420 . Votes can be extracted from response messages received from nodes to which the ballot was forwarded. The votes extracted from response messages can be compiled together with the vote received from the user at Stage  416  into a single message. For example, in response to an inquiry for a time to meet, a mobile device can receive a first response message indicating a vote for “10:00” and a second response message indicating a vote for “11:00”. A user of the mobile device can input a vote for “10:00”. The mobile device can compile the votes and create a message that indicates two votes for “10:00” and one vote for “11:00”. 
     Voting response messages can be transmitted to a previous node at step  422 . For example, referring to  FIG. 1A , the mobile device  106  can transmit a message to the mobile device  102  that indicates votes made by users of the mobile devices  106 ,  108 , and  110 . 
       FIG. 5  shows an example flowchart of a method  500  of distributing voting results. In some implementations, the method  500  can be performed by a processor executing instructions stored in a computer-readable medium, such as for example, the processor  222  shown in  FIG. 2 . In some implementations, the method  500  can be performed by a mobile device, such as for example, the mobile device  202  shown in  FIG. 2 . 
     Voting results can be received and tabulated at step  502 . For example, referring to  FIG. 1A , the mobile device  102  can receive response messages from the mobile devices  106  and  112 . The response message received from the mobile device  106  can include votes from users of the mobile devices  106 ,  108 , and  110 . The response message received from the mobile device  112  can include votes from users of the mobile devices  112 ,  114 , and  116 . The mobile device  102  can tabulate the votes received in the response messages along with a vote of a user of the mobile device  102  to determine a winning selection of a vote. 
     Groups for transmitting voting results can be determined at step  504 . For example, a mobile device an separate six recipient mobile devices into two groups with each group including three mobile devices. In some implementations, groups for transmitting voting results can be the same as voting groups determined as part of a process for transmitting ballots, such as the process  300  shown in  FIG. 3 . 
     Voting coordinators for each group can be selected at step  506 . For example, referring to  FIG. 1B , the mobile device  102  can select the mobile device  108  as a voting coordinator of a first group of mobile devices. The mobile device  102  can select the mobile device  114  as a voting coordinator of a second group of mobile devices. In some implementations, a voting coordinator for a group can be selected so as to be different from a voting coordinator selected as part of a process for transmitting ballots, such as the process  300  shown in  FIG. 3 . 
     A results message can be created at step  508 . The results message can indicate a winning selection of a vote as determined at Stage  502 . For example, referring to  FIG. 1B , the mobile device  102  can create a results message indicating Betty&#39;s Diner as the winning selection of a vote. Additionally, the results message can include forwarding instructions. The forwarding instructions can instruct voting coordinators selected at stage  506  to forward the ballot to other mobile devices in a voting group. 
     The results message can be transmitted to the voting coordinators at step  510 . For example, referring to  FIG. 1B , the mobile device  102  can transmit the results message to the mobile devices  108  and  114 . As another example, referring to  FIG. 2 , the mobile device  202  can use the input/output interface  218  to transmit a results message. 
     Referring now to  FIG. 6 , the exterior appearance of an exemplary device  600  that implements the cost-effective voting system and method is illustrated. Briefly, and among other things, the device  600  includes a processor configured to create and transmit a ballot that includes a voting inquiry upon request of a user of the mobile device. 
     In more detail, the hardware environment of the device  600  includes a display  601  for displaying text, images, and video to a user; a keyboard  602  for entering text data and user commands into the device  600 ; a pointing device  604  for pointing, selecting, and adjusting objects displayed on the display  601 ; an antenna  605 ; a network connection  606 ; a camera  607 ; a microphone  609 ; and a speaker  610 . Although the device  600  shows an external antenna  605 , the device  600  can include an internal antenna, which is not visible to the user. 
     The display  601  can display video, graphics, images, and text that make up the user interface for the software applications used by the device  600 , and the operating system programs used to operate the device  600 . Among the possible elements that may be displayed on the display  601  are a new mail indicator  611  that alerts a user to the presence of a new message; an active call indicator  612  that indicates that a telephone call is being received, placed, or is occurring; a data standard indicator  614  that indicates the data standard currently being used by the device  600  to transmit and receive data; a signal strength indicator  615  that indicates a measurement of the strength of a signal received by via the antenna  605 , such as by using signal strength bars; a battery life indicator  616  that indicates a measurement of the remaining battery life; or a clock  617  that outputs the current time. 
     The display  601  may also show application icons representing various applications available to the user, such as a web browser application icon  619 , a phone application icon  620 , a search application icon  621 , a contacts application icon  622 , a mapping application icon  624 , an email application icon  625 , or other application icons. In one example implementation, the display  601  is a quarter video graphics array (QVGA) thin film transistor (TFT) liquid crystal display (LCD), capable of 16-bit or better color. 
     A user uses the keyboard (or “keypad”)  602  to enter commands and data to operate and control the operating system and applications that provide for the creation and transmission of a ballot that includes a voting inquiry. The keyboard  602  includes standard keyboard buttons or keys associated with alphanumeric characters, such as keys  626  and  627  that are associated with the alphanumeric characters “Q” and “W” when selected alone, or are associated with the characters “*” and “1” when pressed in combination with key  629 . A single key may also be associated with special characters or functions, including unlabeled functions, based upon the state of the operating system or applications invoked by the operating system. For example, when an application calls for the input of a numeric character, a selection of the key  627  alone may cause a “1” to be input. 
     In addition to keys traditionally associated with an alphanumeric keypad, the keyboard  602  also includes other special function keys, such as an establish call key  630  that causes a received call to be answered or a new call to be originated; a terminate call key  631  that causes the termination of an active call; a drop down menu key  632  that causes a menu to appear within the display  601 ; a backward navigation key  634  that causes a previously accessed network address to be accessed again; a favorites key  635  that causes an active web page to be placed in a bookmarks folder of favorite sites, or causes a bookmarks folder to appear; a home page key  636  that causes an application invoked on the device  600  to navigate to a predetermined network address; or other keys that provide for multiple-way navigation, application selection, and power and volume control. 
     The user uses the pointing device  604  to select and adjust graphics and text objects displayed on the display  601  as part of the interaction with and control of the device  600  and the applications invoked on the device  600 . The pointing device  604  is any appropriate type of pointing device, and may be a joystick, a trackball, a touch-pad, a camera, a voice input device, a touch screen device implemented in combination with the display  601 , or any other input device. 
     The antenna  605 , which can be an external antenna or an internal antenna, is a directional or omni-directional antenna used for the transmission and reception of radiofrequency (RF) signals that implement point-to-point radio communication, wireless local area network (LAN) communication, or location determination. The antenna  605  may facilitate point-to-point radio communication using the Specialized Mobile Radio (SMR), cellular, or Personal Communication Service (PCS) frequency bands, and may implement the transmission of data using any number or data standards. For example, the antenna  605  may allow data to be transmitted between the device  600  and a base station using technologies such as Wireless Broadband (WiBro), Worldwide Interoperability for Microwave ACCess (WiMAX), 6GPP Long Term Evolution (LTE), Ultra Mobile Broadband (UMB), High Performance Radio Metropolitan Network (HIPERMAN), iBurst or High Capacity Spatial Division Multiple Access (HC-SDMA), High Speed OFDM Packet Access (HSOPA), High-Speed Packet Access (HSPA), HSPA Evolution, HSPA+, High Speed Upload Packet Access (HSUPA), High Speed Downlink Packet Access (HSDPA), Generic Access Network (GAN), Time Division-Synchronous Code Division Multiple Access (TD-SCDMA), Evolution-Data Optimized (or Evolution-Data Only)(EVDO), Time Division-Code Division Multiple Access (TD-CDMA), Freedom Of Mobile Multimedia Access (FOMA), Universal Mobile Telecommunications System (UMTS), Wideband Code Division Multiple Access (W-CDMA), Enhanced Data rates for GSM Evolution (EDGE), Enhanced GPRS (EGPRS), Code Division Multiple Access-2000 (CDMA2000), Wideband Integrated Dispatch Enhanced Network (WiDEN), High-Speed Circuit-Switched Data (HSCSD), General Packet Radio Service (GPRS), Personal Handy-Phone System (PHS), Circuit Switched Data (CSD), Personal Digital Cellular (PDC), CDMAone, Digital Advanced Mobile Phone System (D-AMPS), Integrated Digital Enhanced Network (IDEN), Global System for Mobile communications (GSM), DataTAC, Mobitex, Cellular Digital Packet Data (CDPD), Hicap, Advanced Mobile Phone System (AMPS), Nordic Mobile Phone (NMP), Autoradiopuhelin (ARP), Autotel or Public Automated Land Mobile (PALM), Mobiltelefonisystem D (MTD), Offentlig Landmobil Telefoni (OLT), Advanced Mobile Telephone System (AMTS), Improved Mobile Telephone Service (IMTS), Mobile Telephone System (MTS), Push-To-Talk (PTT), or other technologies. Communication via W-CDMA, HSUPA, GSM, GPRS, and EDGE networks may occur, for example, using a QUALCOMM MSM7200A chipset with an QUALCOMM RTR6285™ transceiver and PM7540™ power management circuit. 
     The wireless or wired computer network connection  606  may be a modem connection, a local-area network (LAN) connection including the Ethernet, or a broadband wide-area network (WAN) connection such as a digital subscriber line (DSL), cable high-speed internet connection, dial-up connection, T-1 line, T-6 line, fiber optic connection, or satellite connection. The network connection  606  may connect to a LAN network, a corporate or government WAN network, the Internet, a telephone network, or other network. The network connection  606  uses a wired or wireless connector. Example wireless connectors include, for example, an INFRARED DATA ASSOCIATION (IrDA) wireless connector, a Wi-Fi wireless connector, an optical wireless connector, an INSTITUTE OF ELECTRICAL AND ELECTRONICS ENGINEERS (IEEE) Standard 802.11 wireless connector, a BLUETOOTH wireless connector (such as a BLUETOOTH version 1.2 or 6.0 connector), a near field communications (NFC) connector, an orthogonal frequency division multiplexing (OFDM) ultra wide band (UWB) wireless connector, a time-modulated ultra wide band (TM-UWB) wireless connector, or other wireless connector. Example wired connectors include, for example, a IEEE-1694 FIREWIRE connector, a Universal Serial Bus (USB) connector (including a mini-B USB interface connector), a serial port connector, a parallel port connector, or other wired connector. In another implementation, the functions of the network connection  606  and the antenna  605  are integrated into a single component. 
     The camera  607  allows the device  600  to capture digital images, and may be a scanner, a digital still camera, a digital video camera, other digital input device. In one example implementation, the camera  607  is a 6 mega-pixel (MP) camera that utilizes a complementary metal-oxide semiconductor (CMOS). 
     The microphone  609  allows the device  600  to capture sound, and may be an omni-directional microphone, a unidirectional microphone, a bi-directional microphone, a shotgun microphone, or other type of apparatus that converts sound to an electrical signal. The microphone  609  may be used to capture sound generated by a user, for example when the user is speaking to another user during a telephone call via the device  600 . Conversely, the speaker  610  allows the device to convert an electrical signal into sound, such as a voice from another user generated by a telephone application program, or a ring tone generated from a ring tone application program. Furthermore, although the device  600  is illustrated in  FIG. 6  as a handheld device, in further implementations the device  600  may be a laptop, a workstation, a midrange computer, a mainframe, an embedded system, telephone, desktop PC, a tablet computer, a PDA, or other type of computing device. 
       FIG. 7  is a block diagram illustrating an internal architecture  700  of the device  600 . The architecture includes a central processing unit (CPU)  701  where the computer instructions that comprise an operating system or an application are processed; a display interface  702  that provides a communication interface and processing functions for rendering video, graphics, images, and texts on the display  601 , provides a set of built-in controls (such as buttons, text and lists), and supports diverse screen sizes; a keyboard interface  704  that provides a communication interface to the keyboard  602 ; a pointing device interface  705  that provides a communication interface to the pointing device  607 ; an antenna interface  706  that provides a communication interface to the antenna  605 ; a network connection interface  707  that provides a communication interface to a network over the computer network connection  606 ; a camera interface  708  that provides a communication interface and processing functions for capturing digital images from the camera  607 ; a sound interface  709  that provides a communication interface for converting sound into electrical signals using the microphone  609  and for converting electrical signals into sound using the speaker  610 ; a random access memory (RAM)  710  where computer instructions and data are stored in a volatile memory device for processing by the CPU  701 ; a read-only memory (ROM)  711  where invariant low-level systems code or data for basic system functions such as basic input and output (I/O), startup, or reception of keystrokes from the keyboard  602  are stored in a non-volatile memory device; a storage medium  712  or other suitable type of memory (e.g. such as RAM, ROM, programmable read-only memory (PROM), erasable programmable read-only memory (EPROM), electrically erasable programmable read-only memory (EEPROM), magnetic disks, optical disks, floppy disks, hard disks, removable cartridges, flash drives), where the files that comprise an operating system  714 , application programs  715  (including, for example, a web browser application, a widget or gadget engine, and or other applications, as necessary) and data files  716  are stored; a navigation module  717  that provides a real-world or relative position or geographic location of the device  600 ; a power source  719  that provides an appropriate alternating current (AC) or direct current (DC) to power components; and a telephony subsystem  720  that allows the device  600  to transmit and receive sound over a telephone network. The constituent devices and the CPU  701  communicate with each other over a bus  721 . 
     The CPU  701  can be one of a number of computer processors. In one arrangement, the computer CPU  701  is more than one processing unit. The RAM  710  interfaces with the computer bus  721  so as to provide quick RAM storage to the CPU  701  during the execution of software programs such as the operating system application programs, and device drivers. More specifically, the CPU  701  loads computer-executable process steps from the storage medium  712  or other media into a field of the RAM  710  in order to execute software programs. Data is stored in the RAM  710 , where the data is accessed by the computer CPU  701  during execution. In one example configuration, the device  600  includes at least 128 MB of RAM, and 256 MB of flash memory. 
     The storage medium  712  itself may include a number of physical drive units, such as a redundant array of independent disks (RAID), a floppy disk drive, a flash memory, a USB flash drive, an external hard disk drive, thumb drive, pen drive, key drive, a High-Density Digital Versatile Disc (HD-DVD) optical disc drive, an internal hard disk drive, a Blu-Ray optical disc drive, or a Holographic Digital Data Storage (HDDS) optical disc drive, an external mini-dual in-line memory module (DIMM) synchronous dynamic random access memory (SDRAM), or an external micro-DIMM SDRAM. Such computer readable storage media allow the device  600  to access computer-executable process steps, application programs and the like, stored on removable and non-removable memory media, to off-load data from the device  600 , or to upload data onto the device  600 . 
     A computer program product is tangibly embodied in storage medium  712 , a machine-readable storage medium. The computer program product includes instructions that, when read by a machine, operate to cause a data processing apparatus to store image data in the mobile device. In some implementations, the computer program product includes instructions that generate a ballot that includes a voting inquiry. 
     The operating system  714  may be a LINUX-based operating system such as the GOOGLE mobile device platform; Symbian; APPLE MAC OS X; MICROSOFT WINDOWS NT/WINDOWS 2000NT/WINDOWS XP/WINDOWS MOBILE; a variety of UNIX-flavored operating systems; or a proprietary operating system for computers or embedded systems. The application development platform or framework for the operating system  714  may be: BINARY RUNTIME ENVIRONMENT FOR WIRELESS (BREW); JAVA Platform, Micro Edition (JAVA ME) or JAVA 2 Platform, Micro Edition (J2ME) using the SUN MICROSYSTEMS JAVASCRIPT programming language; PYTHON™, FLASH LITE, or MICROSOFT .NET Compact, or another appropriate environment. 
     The device stores computer-executable code for the operating system  714 , and the application programs  715  such as an email, instant messaging, a video service application, a mapping application word processing, spreadsheet, presentation, gaming, mapping, web browsing, JAVASCRIPT engine, or other applications. For example, one implementation may allow a user to access the GOOGLE GMAIL email application, the GOOGLE TALK instant messaging application, a YOUTUBE video service application, a GOOGLE MAPS or GOOGLE EARTH mapping application, or a GOOGLE PICASA imaging editing and presentation application. The application programs  715  may also include a widget or gadget engine, such as a TAFRI™ widget engine, a MICROSOFT gadget engine such as the WINDOWS SIDEBAR gadget engine or the KAPSULES™ gadget engine, a YAHOO! widget engine such as the KONFABULTOR™ widget engine, the APPLE DASHBOARD widget engine, the GOOGLE gadget engine, the KLIPFOLIO widget engine, an OPERA™ widget engine, the WIDSETS™ widget engine, a proprietary widget or gadget engine, or other widget or gadget engine the provides host system software for a physically-inspired applet on a desktop. 
     Although it is possible to provide for the creation and transmission of a ballot that includes a voting inquiry using the above-described implementation, it is also possible to implement the functions according to the present disclosure as a dynamic link library (DLL), or as a plug-in to other application programs such as an Internet web-browser such as the FOXFIRE web browser, the APPLE SAFARI web browser or the MICROSOFT INTERNET EXPLORER web browser. 
     The navigation module  717  may determine an absolute or relative position of the device, such as by using the Global Positioning System (GPS) signals, the GLObal NAvigation Satellite System (GLONASS), the Galileo positioning system, the Beidou Satellite Navigation and Positioning System, an inertial navigation system, a dead reckoning system, or by accessing address, Internet protocol (IP) address, or location information in a database. The navigation module  717  may also be used to measure angular displacement, orientation, or velocity of the device  600 , such as by using one or more accelerometers. 
       FIG. 8  is a block diagram illustrating exemplary components of the operating system  714  used by the device  600 , in the case where the operating system  714  is the GOOGLE mobile device platform. The operating system  714  invokes multiple processes, while ensuring that the associated phone application is responsive, and that wayward applications do not cause a fault (or “crash”) of the operating system. Using task switching, the operating system  714  allows for the switching of applications while on a telephone call, without losing the state of each associated application. The operating system  714  may use an application framework to encourage reuse of components, and provide a scalable user experience by combining pointing device and keyboard inputs and by allowing for pivoting. Thus, the operating system can provide a rich graphics system and media experience, while using an advanced, standards-based web browser. 
     The operating system  714  can generally be organized into six components: a kernel  800 , libraries  801 , an operating system runtime  802 , application libraries  804 , system services  805 , and applications  806 . The kernel  800  includes a display driver  807  that allows software such as the operating system  714  and the application programs  815  to interact with the display  601  via the display interface  702 , a camera driver  809  that allows the software to interact with the camera  607 ; a BLUETOOTH driver  810 ; a M-Systems driver  811 ; a binder (IPC) driver  812 , a USB driver  814  a keypad driver  815  that allows the software to interact with the keyboard  602  via the keyboard interface  704 ; a WiFi driver  816 ; audio drivers  817  that allow the software to interact with the microphone  609  and the speaker  610  via the sound interface  709 ; and a power management component  819  that allows the software to interact with and manage the power source  819 . 
     The BLUETOOTH driver, which in one implementation is based on the BlueZ BLUETOOTH stack for LINUX-based operating systems, provides profile support for headsets and hands-free devices, dial-up networking, personal area networking (PAN), or audio streaming (such as by Advance Audio Distribution Profile (A2DP) or AudioNideo Remote Control Profile (AVRCP). The BLUETOOTH driver provides JAVA bindings for scanning, pairing and unpairing, and service queries. 
     The libraries  801  include a media framework  820  that supports standard video, audio and still-frame formats (such as Moving Picture Experts Group (MPEG)-4, H.264, MPEG-1 Audio Layer-3 (MP3), Advanced Audio Coding (AAC), Adaptive Multi-Rate (AMR), Joint Photographic Experts Group (JREG), and others) using an efficient JAVA Application Programming Interface (API) layer; a surface manager  821 ; a simple graphics library (SGL)  822  for two-dimensional application drawing; an Open Graphics Library for Embedded Systems (OpenGL ES)  824  for gaming and three-dimensional rendering; a C standard library (LIBC)  825 ; a LIBWEBCORE library  826 ; a FreeType library  827 ; an SSL  829 ; and an SQLite library  830 . 
     The operating system runtime  802  includes core JAVA libraries  831 , and a Dalvik virtual machine  832 . The Dalvik virtual machine  832  is a custom, virtual machine that runs a customized file format (.DEX). 
     The operating system  714  can also include Mobile Information Device Profile (MIDP) components such as the MIDP JAVA Specification Requests (JSRs) components, MIDP runtime, and MIDP applications as shown in  FIG. 8 . The MIDP components can support MIDP applications running on the device  600 . 
     With regard to graphics rendering, a system-wide composer manages surfaces and a frame buffer and handles window transitions, using the OpenGL ES  824  and two-dimensional hardware accelerators for its compositions. 
     The Dalvik virtual machine  832  may be used with an embedded environment, since it uses runtime memory very efficiently, implements a CPU-optimized bytecode interpreter, and supports multiple virtual machine processes per device. The custom file format (.DEX) is designed for runtime efficiency, using a shared constant pool to reduce memory, read-only structures to improve cross-process sharing, concise, and fixed-width instructions to reduce parse time, thereby allowing installed applications to be translated into the custom file formal at build-time. The associated bytecodes are designed for quick interpretation, since register-based instead of stack-based instructions reduce memory and dispatch overhead, since using fixed width instructions simplifies parsing, and since the 16-bit code units minimize reads. 
     The application libraries  804  include a view system  834 , a resource manager  835 , and content providers  837 . The system services  805  includes a status bar  839 ; an application launcher  840 ; a package manager  841  that maintains information for all installed applications; a telephony manager  842  that provides an application level JAVA interface to the telephony subsystem  720 ; a notification manager  844  that allows all applications access to the status bar and on-screen notifications; a window manager  845  that allows multiple applications with multiple windows to share the display  601 ; and an activity manager  846  that runs each application in a separate process, manages an application life cycle, and maintains a cross-application history. 
     The applications  806  include a home application  847 , a dialer application  849 , a contacts application  850 , a browser application  851 , and a voting application  852 . 
     The telephony manager  842  provides event notifications (such as phone state, network state, Subscriber Identity Module (SIM) status, or voicemail status), allows access to state information (such as network information, SIM information, or voicemail presence), initiates calls, and queries and controls the call state. The browser application  851  renders web pages in a full, desktop-like manager, including navigation functions. Furthermore, the browser application  851  allows single column, small screen rendering, and provides for the embedding of HTML views into other applications. 
       FIG. 9  is a block diagram illustrating exemplary processes implemented by the operating system kernel  900 . Generally, applications and system services run in separate processes, where the activity manager  846  runs each application in a separate process and manages the application life cycle. The applications run in their own processes, although many activities or services can also run in the same process. Processes are started and stopped as needed to run an application&#39;s components, and processes may be terminated to reclaim resources. Each application is assigned its own process, whose name is the application&#39;s package name, and individual parts of an application can be assigned another process name. 
     Some processes can be persistent. For example, processes associated with core system components such as the surface manager  916 , the window manager  914 , or the activity manager  910  can be continuously executed while the device  900  is powered. Additionally, some application-specific process can also be persistent. For example, processes associated with the dialer application  921 , may also be persistent. 
     The processes implemented by the operating system kernel  900  may generally be categorized as system services processes  901 , dialer processes  902 , browser processes  904 , and maps processes  905 . The system services processes  901  include status bar processes  906  associated with the status bar  839 ; application launcher processes  907  associated with the application launcher  840 ; package manager processes  909  associated with the package manager  841 ; activity manager processes  910  associated with the activity manager  846 ; resource manager processes  911  associated with a resource manager  911  that provides access to graphics, localized strings, and XML layout descriptions; notification manger processes  912  associated with the notification manager  844 ; window manager processes  914  associated with the window manager  845 ; core JAVA libraries processes  915  associated with the core JAVA libraries  831 ; surface manager processes  916  associated with the surface manager  821 ; and Dalvik virtual machine processes  917  associated with the Dalvik virtual machine  832 , LIBC processes  919  associated with the LIBC library  825 . 
     The dialer processes  902  include dialer application processes  921  associated with the dialer application  849 ; telephony manager processes  922  associated with the telephony manager  842 ; core JAVA libraries processes  924  associated with the core JAVA libraries  831 ; Dalvik virtual machine processes  925  associated with the Dalvik Virtual machine  832 ; and LIBC processes  926  associated with the LIBC library  825 . The browser processes  904  include browser application processes  927  associated with the browser application  851 ; core JAVA libraries processes  929  associated with the core JAVA libraries  831 ; Dalvik virtual machine processes  930  associated with the Dalvik virtual machine  832 ; LIBWEBCORE processes  931  associated with the LIBWEBCORE library  826 ; and LIBC processes  932  associated with the LIBC library  825 . 
     The maps processes  905  include maps application processes  934 , core JAVA libraries processes  935 , Dalvik virtual machine processes  936 , and LIBC processes  937 . Notably, some processes, such as the Dalvik virtual machine processes, may exist within one or more of the systems services processes  901 , the dialer processes  902 , the browser processes  904 , and the maps processes  905 . 
     A number of embodiments have been described. Nevertheless, it will be understood that various modifications may be made without departing from the spirit and scope of the invention. For example, the logic flows depicted in the figures do not require the particular order shown, or sequential order, to achieve desirable results. In addition, other steps may be provided, or steps may be eliminated, from the described flows, and other components may be added to, or removed from, the described systems. Accordingly, other embodiments are within the scope of the following claims.