U.S. patent application number 15/596116 was filed with the patent office on 2017-10-26 for displaying a stream of content.
The applicant listed for this patent is Google Inc.. Invention is credited to Anand Agarawala, Daniel Burka, Karl Channell, Chikezie Ejiasi, Leslie Ikemoto, Brian Laird, Frank Petterson.
Application Number | 20170308249 15/596116 |
Document ID | / |
Family ID | 50882437 |
Filed Date | 2017-10-26 |
United States Patent
Application |
20170308249 |
Kind Code |
A1 |
Petterson; Frank ; et
al. |
October 26, 2017 |
Displaying a Stream of Content
Abstract
A system and method for generating and providing user interfaces
for interacting with a stream of content are disclosed. A system
having one or more processors and a memory is configured to perform
operations including receiving a stream of content including one or
more content items; selecting a content item; determining a tile
type for providing the content item based upon an attribute of the
content item; populating tile components for the tile type using
the content item; organizing content tiles in a dynamic grid using
the attribute of the content items; and providing the dynamic grid
of content tiles for display.
Inventors: |
Petterson; Frank; (Redwood
City, CA) ; Laird; Brian; (San Francisco, CA)
; Ejiasi; Chikezie; (Sunnyvale, CA) ; Agarawala;
Anand; (San Francisco, CA) ; Ikemoto; Leslie;
(Mountain View, CA) ; Burka; Daniel; (San
Francisco, CA) ; Channell; Karl; (San Francisco,
CA) |
|
Applicant: |
Name |
City |
State |
Country |
Type |
Google Inc. |
Mountain View |
CA |
US |
|
|
Family ID: |
50882437 |
Appl. No.: |
15/596116 |
Filed: |
May 16, 2017 |
Related U.S. Patent Documents
|
|
|
|
|
|
Application
Number |
Filing Date |
Patent Number |
|
|
13966997 |
Aug 14, 2013 |
|
|
|
15596116 |
|
|
|
|
61734926 |
Dec 7, 2012 |
|
|
|
Current U.S.
Class: |
1/1 |
Current CPC
Class: |
G06F 3/048 20130101;
G06F 2203/04803 20130101; G06F 3/0482 20130101; G06F 3/0485
20130101 |
International
Class: |
G06F 3/0482 20130101
G06F003/0482; G06F 3/048 20130101 G06F003/048; G06F 3/0485 20130101
G06F003/0485 |
Claims
1. (canceled)
2. A method comprising: determining a content item for a first
user; determining a plurality of comments on the content item, the
plurality of comments associated with a plurality of users;
selecting, from the plurality of users, a second user based on a
relationship between the second user and the first user; generating
a content tile for providing the content item to the first user,
the content tile including a social area and a comment area;
populating the social area of the content tile with the second
user; populating the comment area of the content tile with the
plurality of comments associated with the content item; and
providing the populated content tile for display to the first
user.
3. The method of claim 2, wherein selecting the second user
includes: selecting, from the plurality of users, the second user
having an affinity with the first user that satisfies a
threshold.
4. The method of claim 2, wherein selecting the second user
includes selecting a set of second users from the plurality of
user, and the method includes: ordering the set of second users in
the social area of the content tile based on a first factor; and
ordering the plurality of comments in the comment area of the
content tile based on a second factor.
5. The method of claim 2, wherein populating the social area of the
content tile includes: populating the social area of the content
tile with the second user and a first comment associated with the
second user in the plurality of comments.
6. The method of claim 5, wherein the social area of the content
tile includes a graphic element for transitioning to a conversation
associated with the first comment.
7. The method of claim 2, wherein selecting the second user
includes selecting the second user and a third user from the
plurality of user, and wherein populating the social area of the
content tile includes: populating a list of commenters field in the
social area with the second user and the third user; populating a
comment box in the social area with a first comment associated with
the second user in the plurality of comments; and positioning an
indicator to associate the first comment in the comment box with
the second user in the list of commenters field.
8. The method of claim 7, wherein the first comment is populated in
the comment box of the social area for a predetermined time
period.
9. The method of claim 7, further comprising: determining a second
comment associated with the third user in the plurality of
comments; replacing the first comment populated in the comment box
of the social area with the second comment; and positioning the
indicator to associate the second comment in the comment box with
the third user in the list of commenters field.
10. A system comprising: a processor; and a memory storing
instructions that, when executed, cause the system to: determine a
content item for a first user; determine a plurality of comments on
the content item, the plurality of comments associated with a
plurality of users; select, from the plurality of users, a second
user based on a relationship between the second user and the first
user; generate a content tile for providing the content item to the
first user, the content tile including a social area and a comment
area; populate the social area of the content tile with the second
user; populate the comment area of the content tile with the
plurality of comments associated with the content item; and provide
the populated content tile for display to the first user.
11. The system of claim 10, wherein to select the second user, the
instructions, when executed, cause the system to: select, from the
plurality of users, the second user having an affinity with the
first user that satisfies a threshold.
12. The system of claim 10, wherein selecting the second user
includes selecting a set of second users from the plurality of
user, and wherein the instructions, when executed, cause the system
to: order the set of second users in the social area of the content
tile based on a first factor; and order the plurality of comments
in the comment area of the content tile based on a second
factor.
13. The system of claim 10, wherein to populate the social area of
the content tile, the instructions, when executed, cause the system
to: populate the social area of the content tile with the second
user and a first comment associated with the second user in the
plurality of comments.
14. The system of claim 13, wherein the social area of the content
tile includes a graphic element for transitioning to a conversation
associated with the first comment.
15. The system of claim 10, wherein selecting the second user
includes selecting the second user and a third user from the
plurality of user, and wherein to populate the social area of the
content tile, the instructions, when executed, cause the system to:
populate a list of commenters field in the social area with the
second user and the third user; populate a comment box in the
social area with a first comment associated with the second user in
the plurality of comments; and position an indicator to associate
the first comment in the comment box with the second user in the
list of commenters field.
16. The system of claim 15, wherein the first comment is populated
in the comment box of the social area for a predetermined time
period.
17. The system of claim 15, wherein the instructions, when
executed, cause the system to: determine a second comment
associated with the third user in the plurality of comments;
replace the first comment populated in the comment box of the
social area with the second comment; and position the indicator to
associate the second comment in the comment box with the third user
in the list of commenters field.
18. A computer program product comprising a non-transitory computer
usable medium including a computer readable program, wherein the
computer readable program when executed on a computer causes the
computer to: determine a content item for a first user; determine a
plurality of comments on the content item, the plurality of
comments associated with a plurality of users; select, from the
plurality of users, a second user based on a relationship between
the second user and the first user; generate a content tile for
providing the content item to the first user, the content tile
including a social area and a comment area; populate the social
area of the content tile with the second user; populate the comment
area of the content tile with the plurality of comments associated
with the content item; and provide the populated content tile for
display to the first user.
19. The computer program product of claim 18, wherein to select the
second user, the computer readable program causes the computer to:
select, from the plurality of users, the second user having an
affinity with the first user that satisfies a threshold.
20. The computer program product of claim 18, wherein selecting the
second user includes selecting a set of second users from the
plurality of user, and wherein the computer readable program causes
the computer to: order the set of second users in the social area
of the content tile based on a first factor; and order the
plurality of comments in the comment area of the content tile based
on a second factor.
21. The computer program product of claim 18, wherein to populate
the social area of the content tile, the computer readable program
causes the computer to: populate the social area of the content
tile with the second user and a first comment associated with the
second user in the plurality of comments.
Description
CROSS-REFERENCE TO RELATED APPLICATIONS
[0001] The present application claims is a continuation of U.S.
patent application Ser. No. 13/966,997, filed Aug. 14, 2013, and
entitled "Displaying a Stream of Content," which claims priority,
under 35 U.S.C. .sctn.119, of U.S. Provisional Patent Application
No. 61/734,926, filed Dec. 7, 2012, and entitled "Displaying a
Stream of Content," the entireties of which are hereby incorporated
by reference.
BACKGROUND
[0002] The specification relates to displaying a stream of content
for a user. Consumers of digital media may have goals of keeping
apprised of information in areas they already find interesting and
discovering new content that is also enjoyable. Keeping apprised of
information can become burdensome in the digital age because of the
amount of available information. Also, users are viewing content
including that from a social network on multiple different types of
devices including smart phones, tablets and desktop computers.
SUMMARY
[0003] The specification relates to generating user interfaces for
presenting a stream of content. According to one innovative aspect
of the subject matter described in this disclosure, a system having
one or more processors and a memory is configured to perform
operations including receiving a stream of content including one or
more content items; selecting a content item; determining a tile
type for providing the content item based upon an attribute of the
content item; populating tile components for the tile type using
the content item; organizing content tiles in a dynamic grid using
the attribute of the content items; and providing the dynamic grid
of content tiles for display. The tile components of the system can
include a reason bar, an author area, a re-share area, a media
area, a social bar area, and a comment area. The system may also be
configured to perform operations including: receiving an input
selecting a tile in the dynamic grid; identifying the tile and
content item associated with the input; retrieving additional
information related to the content item; and providing the content
item and the additional information in a user interface over the
dynamic grid. The system may also be configured to perform
operations including: receiving a second input; and removing the
user interface for display and restoring the display of the dynamic
grid of content tiles. The system contains at least one tile that
includes a social bar identifying an author of a comment and
displaying a portion of the comment. The system has the social bar
that is dynamically updated with new authors that have posted
comments. The system has the social bar that includes a comment
window and different portions of comments are dynamically displayed
in the window.
[0004] In general, another innovative aspect of the subject matter
described in this disclosure may be embodied in a method including:
receiving a stream of content including one or more content items;
selecting a content item; determining a tile type for providing the
content item based upon an attribute of the content item;
populating tile components for the tile type using the content
item; organizing content tiles in a dynamic grid using the
attribute of the content items; and providing the dynamic grid of
content tiles for display. The method has the tile components
include that a reason bar, an author area, a re-share area, a media
area, a social bar area, and a comment area. The method may further
include receiving an input selecting a tile in the dynamic grid;
identifying the tile and content item associated with the input;
retrieving additional information related to the content item; and
providing the content item and the additional information in a user
interface over the dynamic grid. The method may further include
receiving a second input; and removing the user interface for
display and restoring the display of the dynamic grid of content
tiles. The method contains at least one tile that includes a social
bar identifying an author of a comment and displaying a portion of
the comment. The method has the social bar that is dynamically
updated with new authors that have posted comments. The method
wherein the social bar includes a comment window and different
portions of comments are dynamically displayed in the window.
[0005] Another innovative aspect of the subject matter described in
this disclosure may be embodied in a computer readable medium
storing instructions that when executed by one or more processors
cause the one or more processors to perform operations including:
receiving a stream of content including one or more content items;
selecting a content item; determining a tile type for providing the
content item based upon an attribute of the content item;
populating tile components for the tile type using the content
item; organizing content tiles in a dynamic grid using the
attribute of the content items; and providing the dynamic grid of
content tiles for display. The computer readable medium may have
tile components including a reason bar, an author area, a re-share
area, a media area, a social bar area, and a comment area. The
computer readable medium may also store instructions to perform
operations of: receiving an input selecting a tile in the dynamic
grid; identifying the tile and content item associated with the
input; retrieving additional information related to the content
item; and providing the content item and the additional information
in a user interface over the dynamic grid. The computer readable
medium may also store instructions to perform operations of:
receiving a second input; removing the user interface for display
and restoring the display of the dynamic grid of content tiles. The
computer readable medium may also have at least one tile including
a social bar identifying an author of a comment and displaying a
portion of the comment. The computer readable medium may also have
the social bar dynamically updated with new authors that have
posted comments. The computer readable medium may also have the
social bar including a comment window and different portions of
comments are dynamically displayed in the window.
[0006] In general, another innovative aspect of the subject matter
described in this disclosure may be embodied in a method including:
identifying a list of commenters, identifying a first comment
associated with a first commenter in the list, providing the first
comment for display in a comment box, identifying a second comment
associated with a second commenter in the list, transitioning from
providing the first comment for display to providing the second
comment for display; and providing the second comment for display
in the comment box. The method may also include providing the list
of commenters for display. The method may also include providing an
indicator for display that identifies which commenter provided the
comment being provided for display. The method may also include
receiving an updated content item including a third comment,
updating the list of commenters, providing a new list of commenters
for display, transitioning to providing the third comment for
display; and providing the third comment for display in the comment
box. The method may also perform the receiving, updating, providing
and transitioning in real-time.
[0007] According to one innovative aspect of the subject matter
described in this disclosure, a system having one or more
processors and a memory is configured to perform operations
including identifying a list of commenters, identifying a first
comment associated with a first commenter in the list, providing
the first comment for display in a comment box, identifying a
second comment associated with a second commenter in the list,
transitioning from providing the first comment for display to
providing the second comment for display; and providing the second
comment for display in the comment box. The system may also be
configured to perform operations including providing the list of
commenters for display. The system may also be configured to
perform operations including providing an indicator for display
that identifies which commenter provided the comment being provided
for display. The system may also be configured to perform
operations including receiving an updated content item including a
third comment, updating the list of commenters, providing a new
list of commenters for display, transitioning to providing the
third comment for display; and providing the third comment for
display in the comment box. The system may also be configured to
perform operations including receiving, updating, providing and
transitioning in real-time.
[0008] The systems, methods and computer readable medium described
below are advantageous in a number of respects. First, the dynamic
grid structure of the user interface generated by the system and
methods of this disclosure allows use of a common interface across
different devices independent of form factor. For example, whether
the user is using a smart phone, a tablet or a desktop computer,
the user interface and interaction are similar providing ease of
use and efficiency of presentation of information. Second, the
order of presentation and the size of the tiles can be adapted
based on the attributes of the content items being presented in the
tile, user preferences and data format of the content. Third, the
use of tiles allows the information in the user interface to be
dynamically updated as well as allowing the user to transition to
obtain more information about content presented in the specific
tile. Fourth, the first systems and methods abstract content items
and present the more interesting information to the user.
[0009] The features and advantages described herein are not
all-inclusive and many additional features and advantages will be
apparent in view of the figures and description. Moreover, it
should be noted that the language used in the specification has
been principally selected for readability and instructional
purposes, and not to limit the scope of the subject matter
disclosed herein.
BRIEF DESCRIPTION OF THE DRAWINGS
[0010] The specification is illustrated by way of example, and not
by way of limitation in the figures of the accompanying drawings in
which like reference numerals are used to refer to similar
elements.
[0011] FIG. 1A is a block diagram illustrating an example system
for generating a stream of content for display.
[0012] FIG. 1B is a block diagram illustrating an example content
application for producing content items.
[0013] FIG. 2 is a block diagram illustrating an example system for
generating a stream of content for display.
[0014] FIGS. 3A-3K are graphic representations of an example user
interfaces for a dynamic grid that includes tiles with content.
[0015] FIG. 4 is a block diagram of example components for a
tile.
[0016] FIG. 5 is a graphic representation of an example user
interface that includes tiles with content.
[0017] FIGS. 6A-C are graphic representations of example user
interfaces with additional detail for tiles from the interface of
FIG. 5.
[0018] FIGS. 7A-7C are graphic representations of example user
interfaces that include tiles with content for a mobile device.
[0019] FIGS. 8A and 8B are graphic representations of an example
social bar.
[0020] FIG. 9 is a flow diagram of an example method for generating
a user interface including a dynamic grid having one or more
tiles.
[0021] FIG. 10 is a flow diagram of an example method for
generating a user interface providing detailed information about a
tile from a dynamic grid of tiles.
[0022] FIG. 11 is a flow diagram of an example method for updating
a tile or dynamic grid in real-time for new content.
[0023] FIGS. 12A-121 are graphic representations of example user
interfaces for interacting with communities.
DETAILED DESCRIPTION
[0024] Systems, methods and interfaces are disclosed. While the
systems, methods and interfaces of the present disclosure are
described in the context of a social network and presenting
information from a content stream generated by a social network
application, it should be understood that the systems, methods and
interfaces can be applied to present various types of other
information (e.g., content from heterogeneous data sources).
[0025] FIG. 1A illustrates a block diagram of a system 100 for
generating a stream of content for display according to some
implementations. The system 100 for generating a stream of content
for display includes user devices 115a . . . 115n that are accessed
by users 125a . . . 125n, a social network server 101, a
third-party server 107, a search server 135, an entertainment
server 137, a ratings server 139, an electronic messages server
141, and a social graph 179. In the illustrated implementations,
these entities are communicatively coupled via a network 105.
[0026] In some implementations, the content application 103a is
operable on the social network server 101, which is coupled to the
network 105 via signal line 104. The social network server 101 also
contains a social network application 109 and a social graph 179.
In some implementations, the content application 103a is a
component of the social network application 109. Although only one
social network server 101 is shown, multiple social network servers
may be present. A social network is any type of social structure
where the users are connected by a common feature. Examples of a
social network include, but are not limited to, blogs, micro blogs
and Internet forums. Examples of common features include
friendship, family, work, a common interest, etc. The common
features are provided by one or more social networking systems, for
example those included in the system 100, including
explicitly-defined relationships and relationships implied by
social connections with other users, where the relationships are
defined in a social graph 179. The social graph 179 is a mapping of
users in a social network and how they are related to each
other.
[0027] In some implementations, the content application 103b is
stored on a third-party server 107, which is connected to the
network 105 via signal line 106. The third-party server 107
includes, for example, an application that generates a website that
includes information generated by the content application 103b. For
example, the website includes a section of embeddable code for
displaying a stream of content generated by the content application
103b. Furthermore, while only one third-party server 107 is shown,
the system 100 could include one or more third-party servers
107.
[0028] The user devices 115a . . . 115n in FIG. 1A are used by way
of example. While FIG. 1A illustrates two devices, the description
applies to any system architecture having one or more user devices.
The user device 115a is any computing device that includes a memory
and a processor, for example a personal computer, a laptop, a
Smartphone, a cellular phone, a personal digital assistant (PDA),
etc. The user 125a interacts with the user device 115a via signal
line 110. Although only two user devices 115a . . . 115n are
illustrated, any number of user devices 115n may be available to
any number of users 125n. In some implementations, the system 100
includes a combination of different types of client devices 115.
For example, a combination of a personal computer and a mobile
phone. The user 125a is a human user of the user device 115a.
[0029] The network 105 enables communications between the user
devices 115a-n, the social graph 179, the third party server 107,
the social network server 101, the ratings server 139, the
electronic messages server 141, the entertainment server 137, and
the search server 135. Thus, the network 105 can include links
using technologies including, for example, Wi-Fi, Wi-Max, 2G,
Universal Mobile Telecommunications System (UMTS), 3G, Ethernet,
802.11, integrated services digital network (ISDN), digital
subscriber line (DSL), asynchronous transfer mode (ATM),
InfiniBand, PCI Express Advanced Switching, etc. Similarly, the
networking protocols used on the network 105 can include the
transmission control protocol/Internet protocol (TCP/IP),
multi-protocol label switching (MPLS), the User Datagram Protocol
(UDP), the hypertext transport protocol (HTTP), the simple mail
transfer protocol (SMTP), the file transfer protocol (FTP),
lightweight directory access protocol (LDAP), Code Division
Multiple Access (CDMA), Wideband Code Division Multiple Access
(WCDMA), Global System for Mobile communications (GSM), High-Speed
Downlink Packet Access (HSDPA), etc. The data exchanged over the
network 105 can be represented using technologies and/or formats
including the hypertext markup language (HTML), the extensible
markup language (XML), etc. In addition, all or some of links can
be encrypted using conventional encryption technologies, for
example, the secure sockets layer (SSL), Secure HTTP and/or virtual
private networks (VPNs) or Internet Protocol security (IPsec). In
some implementations, the entities can use custom and/or dedicated
data communications technologies instead of, or in addition to, the
ones described above. Depending upon the implementation, the
network 105 can also include links to other networks.
[0030] In some implementations, the network 105 is a partially
public or a wholly public network, for example, the Internet. The
network 105 can also be a private network or include one or more
distinct or logical private networks (e.g., virtual private
networks, Wide Area Networks ("WAN") and/or Local Area Networks
("LAN")). Additionally, the communication links to and from the
network 105 can be wired or wireless (i.e., terrestrial or
satellite-based transceivers). In some implementations, the network
105 is an IP-based wide or metropolitan area network.
[0031] The network 105 may have any number of configurations
including a star configuration, token ring configuration or other
configurations. Furthermore, the network 105 may include a local
area network (LAN), a wide area network (WAN) (e.g., the Internet),
and/or any other interconnected data path across which multiple
devices may communicate. In some implementations, the network 105
may be a peer-to-peer network. The network 105 may also be coupled
to or include portions of a telecommunications network for sending
data in a variety of different communication protocols. In some
implementations, the network 105 includes short-wavelength
communication networks or a cellular communications network for
sending and receiving data including via short messaging service
(SMS), multimedia messaging service (MMS), hypertext transfer
protocol (HTTP), direct data connection, wireless application
protocol (WAP), electronic messages, etc.
[0032] In some implementations, the network 105 helps to form a set
of online relationships between users 125, for example, those
provided by one or more social networking systems including
explicitly-defined relationships and relationships implied by
social connections with other online users, where the relationships
form a social graph 179.
[0033] The content application 103 receives data and generates a
stream of content for display. In some implementations, the content
application 103 receives data and generates a stream of content for
display from heterogeneous data sources. In some implementations,
the content application 103 receives data from heterogeneous data
sources including a third-party server 107, a social network server
101, user devices 115a . . . 115n, a search server 135 that is
coupled to the network 105 via signal line 136, an entertainment
server 137 that is coupled to the network 105 via signal line 138,
a ratings server 139 that is coupled to the network 105 via signal
line 140, an electronic messages server 141 that is coupled to the
network 105 via signal line 142. In some implementations, the
search server 135 includes a search engine 143 for retrieving
results that match search terms from the Internet.
[0034] A public stream of content with multiple users is referred
to as a channel and is available for other users. In some
implementations, the content application 103 generates a channel
for a topic, receives candidate content items from heterogeneous
data sources, generates a stream of content for the channel from
the candidate content items and populates the channel with the
stream of content for the channel. In some implementations, the
stream of content for the channel has a same or similar topic to
the channel (e.g., each content item is associated with keywords
related to the channel topic).
[0035] In some implementations, the content application 103
personalizes the channel for a user by rescoring the candidate
content items for a user and generating a personalized content
stream. For rescoring the candidate content items for a user, the
content application 103 compares the candidate content items to a
model. In some implementations, the content application 103 updates
the model based at least in part on the user's selection and
generates an updated content stream according to the updated
model.
[0036] Referring now to FIG. 1B, the content application 103 is
shown in more detail according to one implementation. FIG. 1B is a
block diagram of a computing device 200 that includes the content
application 103, a communication unit 245, a memory 237 and a
processor 235. In some implementations, the computing device 200 is
a social network server 101. In some implementations, the computing
device 200 is a third-party server 107. In some implementations,
the computing device 200 is a user device 115a.
[0037] The communication unit 245 sends data to and receives data
from the various system 100 components (e.g., user devices 115,
third party application server 107, social network server 101,
etc.). The communication unit 245 is coupled to the bus 221. In
some implementations, the communication unit 245 includes a port
for direct physical connection to the network 105 or to another
communication channel. For example, the communication unit 245
includes a USB, SD, CAT-5 or similar port for wired communication
with the network 105. In some implementations, the communication
unit 245 includes a wireless transceiver for exchanging data with
the network 105, or with another communication channel, using one
or more wireless communication methods, such as IEEE 802.11, IEEE
802.16, BLUETOOTH.RTM., near field communication (NFC) or another
suitable wireless communication method.
[0038] The processor 235 includes an arithmetic logic unit, a
microprocessor, a general purpose controller or some other
processor array to perform computations and provide electronic
display signals to a display device. The processor 235 is coupled
to the bus 221 for communication with the other components.
Processor 235 processes data signals and may include various
computing architectures including a complex instruction set
computer (CISC) architecture, a reduced instruction set computer
(RISC) architecture, or an architecture implementing a combination
of instruction sets. Although only a single processor is shown in
FIG. 1B, multiple processors may be included. The processing
capability may be limited to supporting the display of images and
the capture and transmission of images. The processing capability
might be enough to perform more complex tasks, including various
types of feature determination and sampling. The computing device
200 also includes an operating system executable by the processor
235 including but not limited to WINDOWS.RTM., MacOS X, Android or
UNIX.RTM. based operating systems. Other processors, operating
systems, sensors, displays and physical configurations are
possible.
[0039] The memory 237 stores instructions and/or data that may be
executed by processor 235. The memory 237 is coupled to the bus 221
for communication with the other components. The instructions
and/or data may include code for performing any and/or all of the
techniques described herein. The memory 237 may be a dynamic random
access memory (DRAM) device, a static random access memory (SRAM)
device, flash memory or some other memory device known in the art.
In some implementations, the memory 237 also includes a
non-volatile memory or similar permanent storage device and media
including a hard disk drive, a floppy disk drive, a CD-ROM device,
a DVD-ROM device, a DVD-RAM device, a DVD-RW device, a flash memory
device, or some other mass storage device for storing information
on a more permanent basis.
[0040] In some implementations, the content application 103
includes a processing module 202, a model generation engine 207, a
contextual module 213, a scoring engine 211, a channel engine 220,
a collaborative filtering engine 217, and a user interface module
230. These components are coupled for communication and interaction
by bus 221. In some implementations, the activities of the content
application 103 or a component thereof 202, 207, 211, 213, 217,
220, 230 are subject to user consent.
[0041] The processing module 202 may be software including routines
for receiving information about a user's interests and social
connections and for processing the information. In some
implementations, the processing module 202 is a set of instructions
executable by the processor 235 to provide the functionality
described below for processing the information. In some
implementations, the processing module 202 is stored in the memory
237 of the computing device 200 and is accessible and executable by
the processor 235. In some implementations, the processing module
202 is adapted for cooperation and communication with the processor
235 and other components of the computing device 200 via the bus
221.
[0042] The processing module 202 receives information via the
communication unit 245 about users from user input and/or prior
actions of a user across a range of heterogeneous data sources
including search (for example, web, video, news, maps, alerts),
entertainment (for example, news, video, a personalized homepage,
blogs, a reader, gadget subscriptions), social activity (for
example, interactions through electronic messages, profile
information, text messaging including short message service (SMS),
micro blogs, geographical locations, comments on photos, a social
graph 179, and other social networking information) and activity on
third-party sites (for example, websites that provide ratings,
reviews and social networks where users indicate that they approve
of content). This information is derived, for example, from a
user's search history, browsing history and other interactions with
the Internet.
[0043] In some implementations, there are multiple processing
modules 202 that each receive data from a different heterogeneous
data source. In some implementations, the data is received by the
same processing module 202. The processing module 202 transmits the
data to the memory 237 for storage. In some implementations, the
memory 237 partitions the data from each heterogeneous data source
in a separate data storage location. In some implementations, the
data from heterogeneous data sources is stored in the same location
in the memory 237. In some implementations, the memory 237
partitions the model and the stream of content into separate
storage locations as well.
[0044] The model generation engine 207 may be software including
routines for retrieving the data from the memory 237 and generating
a model for a user based on the data. In some implementations, the
model generation engine 207 may be a set of instructions executable
by the processor 235 to provide the functionality described below
for generating the model. In some implementations, the model
generation engine 207 is stored in the memory 237 of the computing
device 200 and is accessible and executable by the processor 235.
In some implementations, the model generation engine 207 may be
adapted for cooperation and communication with the processor 235
and other components of the computing device 200 via bus 221.
[0045] The model generation engine 207 may receive user information
from a variety of sources including, for example, queries, clicks,
news clicks, gadgets, electronic message interactions, etc.;
determine features from the information; and generate a model of
the user based on the determined features. The model may include
various types of relevance of items to users, along with floating
point values to indicate the extent to which the relevance holds.
Examples of types of relevance include the relevance of an item's
source to a user, the relevance of an item's primary location to a
user, and the relevance of an item to a list of interests of a
user. The interests are generated from explicit information and
inferred information. Explicit information is derived, for example,
from a user's list of interests on a social network or indicating
that the user found a particular content item interesting. Inferred
information takes into account a user's activities.
[0046] In some implementations, the model generation engine 207 may
also generate a model that contains several pieces of global
meta-information about the user's consumption patterns including
how frequently the user consumes the stream of content and global
statistics on how likely the user is to re-share various types of
items. Lastly, the model includes a sequence of weights and
multipliers that are used to make predictions about the user's
likelihood of clicking on, sharing or otherwise engaging with
content stream items.
[0047] In some implementations, the model generation engine 207
generates the model from the data across the heterogeneous data
sources. In some implementations, the model generation engine 207
builds extensions to the model that employ the patterns of behavior
of other users. For example, the model predicts the user's behavior
based on the reaction of similar users. The data for the other
users may be anonymized before it is incorporated into the
model.
[0048] In some implementations, the model generation engine 207 may
also update a model based on the user's reaction to the stream of
content. The user's reaction includes, for example, selecting a
button for reading items that are similar to a content item that is
part of the stream of content, removing an interest from the list
of interests and choosing related interests. Responsive to the
user's reaction, the model generation engine 207 updates the model.
When the user selects the button for reading similar content items,
the model generation engine 207 adds the corresponding interest to
the model. When the user removes an interest from the list, the
model generation engine 207 adjusts the model accordingly, e.g., by
deleting the interest from the model.
[0049] The contextual module 213 may be software including routines
for identifying contextual clues from a request, e.g., a request
for a content stream for a user and/or a request for a channel. In
some implementations, the contextual module 213 may be a set of
instructions executable by the processor 235 to provide the
functionality described below for identifying contextual clues. In
some implementations, the contextual module 213 may be stored in
the memory 237 of the computing device 200 and is accessible and
executable by the processor 235. In either implementation, the
contextual module 213 may be adapted for cooperation and
communication with the processor 235 and other components of the
computing device 200 via the bus 221.
[0050] In some implementations, the contextual module 213 may
receive a request for a stream of content for a user or a request
for a channel each time the user visits a website or activates an
application that includes the content application 103. In some
implementations, the user requests the stream of content or
requests the content stream from the channel. Regardless of the
request, the contextual module 213 receives the request and
determines contextual clues from the request. For example, the
contextual module 213 determines the location of the user (based,
for example, on the user's IP address), the time of day and any
other contextual clues. The contextual module 213 transmits the
contextual clues to the scoring engine 211.
[0051] The scoring engine 211 may be software including routines
for generating a stream of content for a user or a channel from
candidate content items and for personalizing a channel for a user.
In some implementations, the scoring engine 211 may be a set of
instructions executable by the processor 235 to provide the
functionality described below for generating a stream of content
for a user and for personalizing a channel for a user. In some
implementations, the scoring engine 211 may be stored in the memory
237 of the computing device 200 and is accessible and executable by
the processor 235. In some implementations, the scoring engine 211
may be adapted for cooperation and communication with the processor
235 and other components of the computing device 200 via bus
221.
[0052] In some implementations, the scoring engine 211 queries
heterogeneous data sources for candidate content items related to
search terms, receives the candidate content items and compares the
candidate content items to the model to determine whether the user
would find the candidate content items interesting. In some
implementations, the heterogeneous data sources include a search
engine 143, an entertainment server 137, an electronic messages
server 141, a ratings server 139, a social network server 101, and
a third-party server 107 as illustrated in FIG. 1A.
[0053] When the request is for a user, the query is derived from
the user's interests, social connections and, in some
implementations, recent search terms input by the user. When the
request is for a channel, the query includes the topic and keywords
for the channel. In some implementations, the scoring engine 211
also uses contextual clues transmitted from the contextual module
213 to further narrow the number of candidate content items.
[0054] In some implementations, the scoring engine 211 first
performs the query and then compares the results to the model to
determine whether the user would find the candidate content items
interesting. In some implementations, these steps are performed
simultaneously. In some implementations, the scoring engine 211
compares candidate content items to the model and then filters the
results according to the subject matter of the queries.
[0055] The scoring engine 211 may determine interestingness based
on social relevance and an interest match between the item and the
user. Social relevance can be used to measure a likelihood that the
user would be interested in an item based on information from the
user's social graph (e.g., how other people with similar
demographics reacted to an item). For example, assuming the user
lives in the United States and enjoys pop music, the user might be
interested in content items about a new artist named Artist X. The
interest match of the item to the user is determined based on
similarity of the content item to the model.
[0056] Interestingness is measured by calculating a score for each
candidate content item. In some implementations, the scoring engine
211 incorporates historical interaction feeds into the scoring. In
some implementations, the candidate items are not displayed unless
their candidate scores exceed a certain threshold. Once the scores
are calculated and the threshold is exceeded, the scoring engine
211 generates a stream of content for a user that is ordered
according to the candidate content item scores.
[0057] In some implementations, the scoring engine 211 may also
generate an explanation for each item in the stream of content for
display. The explanation is presented in a variety of ways
including a tag that contains the subject matter of the content
item (for example, skiing) or a more detailed explanation (for
example, your friends enjoyed this article). Other explanations
include that the content item matches a specific user interest or
is similar to other content items that the user has endorsed in the
past. The user's reaction to the explanation may be used to further
refine the model.
[0058] In some implementations, the scoring engine 211 may
personalize a channel for a user. The scoring engine 211 queries
the channel for content items in the stream of content for the
channel based on the topic of the channel. The scoring engine 211
receives candidate content items that match the query. In some
implementations, the content items in the channel are directly
transmitted from the channel engine 220 to the scoring engine 211.
In some implementations, the scoring engine 211 queries a data
storage server 265 (discussed below with reference to FIG. 2) or
the memory 237 for candidate content items based on the topic and
keywords for the channel.
[0059] The scoring engine 211 compares the candidate content items
to a model and calculates a score for each candidate content item
using the model and based upon interestingness of the candidate
content item to the user. In some implementations, the scoring
engine 211 receives the contextual clues from the contextual module
213 and uses the contextual clues to further narrow the number of
candidate content items.
[0060] In some implementations, the scoring engine 211 selects a
set of content items from the candidate content items according to
their scores. The scoring engine 211 identifies the content items
in the selected content items and in the stream of content for the
user, removes the duplicate content items from the selected set of
content items and generates a stream of content for the channel
(e.g., a personalized channel for the user) from the selected
content items for a user. In some implementations, the scoring
engine 211 distributes the personalized channel for the user into
the overall content stream for the user.
[0061] Referring still to FIG. 1B, the collaborative filtering
engine 217 may be software including routines for generating
additional candidate content items with a social component through
collaborative filtering and transmitting the additional candidate
content items to the scoring engine 211 that were derived from
collaborative filtering. In some implementations, the collaborative
filtering engine 217 may be a set of instructions executable by the
processor 235 to provide the functionality described below for
generating additional candidate content items. In some
implementations, the collaborative filtering engine 217 may be
stored in the memory 237 of the computing device 200 and is
accessible and executable by the processor 235. In some
implementations, the collaborative filtering engine 217 may be
adapted for cooperation and communication with the processor 235
and other components of the computing device via bus 221.
[0062] The collaborative filtering engine 217 may obtain candidate
content items that are socially relevant from a stream of content
for a user derived from people with whom the user has a
relationship and transmits the candidate content items to the
scoring engine 211. The collaborative filtering engine 217 receives
information about the relationships from the social graph 179. For
example, the stream of content for a user is derived from friends
in a social network or people to which the user frequently sends
electronic messages. The more important a person appears to be to
the user, the more likely that the user is interested in the
content item. Thus, in some implementations, the collaborative
filtering engine 217 applies a weight to candidate content items
based on the social relationship of the user to the friend. For
example, candidate content items generated by or consumed by users
that are friends receive higher weights than candidate content
items from second-generation friends of the user (e.g., a friend of
a friend).
[0063] The collaborative filtering engine 217 may increase the
weights applied to candidate content items from friends when the
user positively responds to the items. For example, when the user
comments on the item or indicates that the user found the item
interesting, the collaborative filtering engine 217 increases the
weight of that friend so that more candidate content items from
that friend become part of the stream of content for the user.
[0064] The channel engine 220 may be software including routines
for generating a channel for a topic, retrieving candidate content
items based on the topic and keywords, generating a stream of
content for the channel from the candidate content items and
populating the channel with the stream of content for the channel.
In some implementations, the channel engine 220 may be a set of
instructions executable by the processor 235 to provide the
functionality described below for generating the channel populated
with the stream of content for the channel. In some
implementations, the channel engine 220 may be stored in the memory
237 of the computing device 200 and is accessible and executable by
the processor 235. In either implementation, the channel engine 220
may be adapted for cooperation and communication with the processor
235 and other components of the computing device 200 via the bus
221.
[0065] In some implementations, the channel engine 220 may
determine a topic for a channel (e.g., a bicycler) and identifies
corresponding keywords (e.g., bicycle, bike, bicycling, biking,
cycle, cycling, racer). In some implementations, the channel engine
220 receives a request for creating a channel from third parties or
individuals. The request for creating a channel includes a topic
and possibly a brief description of the channel that the channel
engine 220 uses to generate keywords. For example, the channel
engine 220 receives a request for creating a channel for a topic
about birds. In some implementations, the channel engine 220
determines the keywords for this channel of birds, for example,
birds, parrots, cockatiels, eagles, owls, pigeons, etc. The channel
engine 220 generates a channel for the determined topic.
[0066] The channel engine 220 may query heterogeneous data sources
for candidate content items based on the keywords, receive the
candidate content items and select a set of content items from the
candidate content items according to their global scores. In some
implementations, the global score represents the popularity of a
candidate content item among users (e.g., based on clicks, views,
unique views, ratings, resharing or another metric indicating
popularity). Examples of heterogeneous data sources include a
search engine 143, an entertainment server 137, an electronic
messages server 141, a ratings server 139, a social network server
101, and a third-party server 107. The query is derived from
keywords associated with the topic. For example, the channel engine
queries the search engine 143 for items including gourmet, cuisine
and restaurant because the topic of the channel is gourmand.
[0067] In some implementations, the channel engine 220 first
performs the query based on keywords and then selects the results
according to their global scores. For example, the channel engine
220 selects a set of content items, each with a global score
satisfying a threshold, from the candidate content items. In some
implementations, the query and selection are performed
simultaneously, e.g., the channel engine 220 queries heterogeneous
data sources for candidate content items based on the keywords and
their associated global scores. For example, the channel engine 220
queries a data storage server (not shown) for items containing the
word skiing and with global scores higher than a threshold amount.
The data storage server is further described below with reference
to FIG. 2. In some implementations, the channel engine 220 selects
from the candidate content items based on their global scores and
then filters the results according to the keywords. In many of
these examples, the channel engine 220 receives a set of candidate
content items related to the topic that is popular.
[0068] The channel engine 220 generates a stream of content for the
channel using the selected content items and populates the channel
with the stream of content for the channel. Once the channel is
created, the channel engine 220 transmits the stream of content for
the channel to the user interface module 230 for incorporation into
a user interface that is displayed to users. In some
implementations, the stream of content is stored in the memory 237
for a data storage server 265.
[0069] In some implementations, the channel engine 220 updates the
channel periodically (e.g., every hour, day, week, or month) and
invites and accepts people to join the channel as members/users. In
some implementations, the channel engine 220 also receives input or
activities from users through the user interface module 230 and
publishes these activities in the channel.
[0070] In some implementations, the channel engine 220 determines a
reputation for each user in the channel based on reactions to the
user's submitted content and according to a level of satisfaction
of one or more rules. The channel engine 220 assigns a reputation
to each user indicating whether a user is trustworthy. In some
implementations, a user's reputation is based on whether the user
submits content that a threshold number of other users read, watch
or positively react to by submitting comments or by providing
indications of approval for the content. For example, the channel
engine 220 assigns a high reputation indicating trustworthiness
when the user exceeds a threshold. In another example, the channel
engine 220 assigns a low reputation indicating trustworthiness when
the user exceeds a threshold.
[0071] The channel engine 220 determines whether to publish content
items submitted by the users in the channel based on the
reputations of the users and arranges the content items in the
stream of content for the channel according to a ranking of the
content. In some implementations, the channel engine 220
automatically publishes the content items submitted by users with
high reputations in the channel. In some implementations, the
channel engine 220 asks a moderator or a user with a high
reputation for approval to publish content items from users with
low reputations.
[0072] The channel engine 220 also deletes obsolete content items
and items older than a certain period of time, for example, a
month. In some implementations, the channel engine 220 identifies
the content items in the stream of content for the channel and in a
stream of content for a user as well, removes duplicate content
items from the stream of content for the channel and distributes
the stream of content for the channel into the stream of content
for the user. In some implementations, the channel engine 220
transmits the stream of content for the channel to the scoring
engine 211 to remove the duplicates.
[0073] In some implementations, the channel engine 220 further
refines the topic of the channel based on the activities of the
users. In some implementations, the channel engine 220 divides a
channel into two or more channels with related topics. For example,
the channel engine 220 creates two new channels from the gourmand
channel: for vegetarian gourmands and another for carnivorous
gourmands. In some implementations, a new channel with a narrowed
topic is derived from a current channel based on user feedback. In
some implementations, the channel engine 220 generates a new
channel for a narrowed topic, for example, a sushi channel
generated from a gourmand channel.
[0074] A public stream of content with multiple users is referred
to as a channel and is available for other users. The users join
the channel and the channel appears as part of a user's stream of
content. In some implementations, the channel is a bucket and each
time a content item is placed in the bucket, the channel engine 220
automatically routes the item to the user. In some implementations,
the user selects the channel button generated by the user interface
module 230 to view the items in the bucket.
[0075] There are three different ways to implement a channel: (1)
an algorithmic channel; (2) a moderated channel; and (3) an
un-moderated channel. The user inputs information for creating an
algorithmic channel by specifying different entities and sources
(e.g. 5, 15, 20, etc.) that collectively pull together content
about a particular interest. Other users subscribe to the channel
by following it or indicating that they approve of the stream of
content. Other implementations exist. For example, a channel may be
a mix of two or more of the ways described.
[0076] For a moderated channel, at least one moderator is
specified. In some implementations, the creator of the channel is
automatically designated as a moderator. Other moderators are
designed via the user interface. The user interface module 230
presents the moderator with candidate content items to include in
the channel from various places including items that match a query
for the specified interest and other users. When the moderator
approves a candidate content item, it appears in the content stream
for the channel. Other users offer content to the channel by
indicating that they approve of an item in their content stream.
Content items from other users are designed as candidate content
items until the moderator approves or rejects them.
[0077] For an un-moderated channel, any user can join the channel
and add an item to the channel's content stream by approving of an
item. Approved items are sorted by their global scores and
subsequently modified in response to the item receiving many views,
indications of approval and comments from users that are members of
the channel. By rearranging the content items according to user
responses, the stream of content of the channel is effectively
moderated.
[0078] The user interface module 230 may be software including
routines for generating instructions for displaying a user
interface on a user device 115 that includes the stream of content
for a user including an overall stream of content and a channel
stream of content, receives user feedbacks, allows the user to add
or remove explicit interests and generates a widget for display on
websites that include an option to share the articles in the
channel. The user interface can be displayed as part of another
application, for example a social network, or as its own standalone
application. In some implementations, the user interface module 230
may be a set of instructions executable by the processor 235 to
provide the functionality described below for providing a stream of
content for a user or a channel. In some implementations, the user
interface module 230 may be stored in the memory 237 of the
computing device 200 and is accessible and executable by the
processor 235. In some implementations, the user interface module
230 is adapted for cooperation and communication with the processor
235 and other components of the computing device 200 via bus 221.
The operation of the user interface module 230 and user interfaces
generated by it are described in more detail below with reference
to FIGS. 3A-11.
[0079] FIG. 2 is a block diagram illustrating another
implementation of a system for generating a stream of content for
display. In the illustrated implementation, the components of the
content application 103 are divided among various servers so that
the information is efficiently processed. The illustrated system
includes a search server 135, an entertainment server 137, a
ratings server 139, an electronic messages server 141, a content
acquisition pipeline 250, a data storage server 265, a model server
255, a scoring server 260, a social graph 179, a social server 270,
and a content application 103.
[0080] In some implementations, the heterogeneous data sources
(e.g., the search server 135, entertainment server 137, ratings
server 139, and electronic messages server 141) are crawled by a
content acquisition pipeline 250. In some implementations, the
heterogeneous data sources transmit the content items to the
content acquisition pipeline 250.
[0081] The content acquisition pipeline 250 includes a processing
module 202 for annotating the content items with specific tags, for
example, features and a global score generated by the scoring
engine 211, and processes the data about user activities. In some
implementations, the activities described herein are subject to the
user consenting to data collection. Once the content items are
annotated, the processing module 202 transmits the data to the data
storage server 265. The data storage server 265 indexes the
features of each content item and stores them in at least one
database. In some implementations, the content items are organized
according to an identification format (SourceType#UniqueItemID, for
example, "VIDEOSERVICE#video_id" and "NEWS#doc_id"), an item static
feature column that holds an item's static features (for example,
title, content, content classification, etc.), an item dynamic
feature column that holds an item's dynamic features (for example,
global score, number of clicks, number of following, etc.), a
source (src) static feature column where the source is a publisher
of an item (for example, Newspaper A in news, video uploader A in
Video Hosting Site A, etc.), a src dynamic feature column holds the
source's dynamic features, a content column holds activities that
were used to create activities and a scoring feature holds a
message that is used for user scoring.
[0082] In some implementations, the data storage server 265
dynamically phases out the content items. For example, news items
expire after 24 hours, videos expire after 48 hours and feeds are
kept for 24 hours or only the 10 most recent items are kept, while
the rest of the items are phased out.
[0083] The content acquisition pipeline 250 also transmits the
content items to the scoring server 260 for a global user ranking.
The global scores are transmitted from the scoring server 260 to
the data storage server 265, which stores the global scores in
association with the content items. The global scores are helpful
for organizing the content items in the data storage server
265.
[0084] Turning now to the model server 255, the model server 255
receives the user activity from the processing module 202 or the
data storage server 265. The model generation engine 207 generates
the model based on user input and/or prior actions. The model
server 255 transmits a model to the scoring server 260 periodically
or upon request.
[0085] In some implementations, the scoring server 260 requests the
model responsive to receiving a request for a stream of content for
a user or a request for a channel from the user. The scoring server
260 receives the model from the model server 255. The scoring
server 260 requests and receives user candidates from the social
graph 179. The scoring server 260 requests and receives candidate
content items from the data storage server 265. The scoring server
260 requests and receives candidate content items from people that
the user is connected to in the social graph 179 from the
collaborative filtering engine 217 that is stored on the social
server 270. The candidate content items from the social server 270
are pre-scored and, in some implementations, the unread candidate
content items are saved to a cache on the social server 270. These
items are saved to a cache because the quantity of social updates
can be large enough that performing the scoring during write time
enables faster reads.
[0086] The scoring engine 211 compares the candidate content items
to the model and scores the candidate content items. In the case of
candidate content items from the social server 270, the scoring
engine 211 receives the candidate content items from the social
server 270, compares the candidate content items to the model and
rescores the candidate content items according to the model. The
scoring engine 211 generates a stream of content for a user based
on the scored candidate content items and transmits the stream of
content for a user to the content application 103.
[0087] The content application 103 includes a channel engine 220 as
described above and a user interface module 230 that receives the
stream of content for a user from the scoring server 260 and
displays it in a user interface. In some implementations, the user
interface module 230 generates a widget for display on third-party
websites that allows a user to share content with the channel.
Additionally, the user interface module 230 provides the user with
a user interface for reviewing the content items, retrieving
additional information about a specific content item, transitioning
between different content items, and taking various actions with
regard to a content item.
[0088] Referring now to FIGS. 3A-3K, graphic representations of
various implementations of the user interface 300 of the present
disclosure are described. The user interface module 230
advantageously provides a user interface 300 that includes a fluid
grid structure with a plurality of tiles. While the interface 300
is described in the context of a 2.times.2 grid implementation of
tiles, it should be understood that different grid increments may
be possible. FIGS. 3A-3H illustrate an implementation of the user
interface 300 where the grid increment is 2.times.2 and there are
three possible tile sizes: small, medium and large. In this example
and as shown in FIG. 3A, the user interface 300 has a size of
approximately two small tiles by two small tiles. Thus as shown in
FIG. 3A, assuming the content items to be presented in the user
interface 300 are represented by four small tiles, then tiles A
302, B 304, C 306 and D 308 are laid out in a 2.times.2 grid
covering most of the displayable area of the user interface 300.
However, the user interface 300 also allows medium-sized tiles and
large-size tiles. The medium-sized tiles are approximately double
the size of a small tile; and thus, may be 2 small tiles wide and 1
small tile vertically or 1 small tile wide and 2 small tiles
vertically. Examples of such tiles are shown in FIG. 3C (see tile A
302) and FIG. 3D (see tile B 304), respectively. These tiles can be
positioned within the user interface 300 in the top portion, the
bottom portion, left portion of the right portion. The large-size
tiles are double the size of a medium-sized tile or four times as
large and small tile. An example is shown in FIG. 3H (see tile A
302). As described in more detail below with reference to FIGS. 9
to 11, the systems and methods of the present disclosure
advantageously select a tile size and a tile position based on the
attributes of the content item being presented to the user. Thus,
the grid structure shown in FIGS. 3A-3K is dynamic in at least two
respects. First, the size of each tile is dynamically sized based
upon individual attributes of the content items and the content
itself. For example, tiles with content more interesting to the
user may be presented in a larger tile than less interesting
content. In another example, tiles that include a photograph may be
displayed larger than tiles that include only textual content.
Second, the order in which the tiles are presented is dynamic,
again based on the content of the item as well as the attributes of
the content. For example, tiles with content more interesting to
the user may be presented before those with less interesting
content.
[0089] FIGS. 3A-3H illustrates possible layouts for content items
from the stream of content using the dynamic grid that is 2.times.2
and has small, medium and large tiles sized as described above. As
noted above, FIG. 3A illustrates a graphic representation of an
example user interface 300 with four small tiles (tiles A 302, B
304, C 306 and D 308) laid out in a 2.times.2 array. FIG. 3B
illustrates a graphic representation of an example user interface
320 having two small tiles (tile A 302 and tile B 304) and a
medium-sized tile (tile C 306). The small tiles 302, 304 are both
positioned above the medium-sized tile 306. FIG. 3C illustrates a
graphic representation of an example user interface 322 having a
medium-sized tile (tile A 302) and two small tiles (tile B 304 and
tile C 306). The medium-sized tile 302 is positioned above the
small tiles 304 and 306. FIG. 3D illustrates a graphic
representation of an example user interface 324 having a
medium-sized tile (tile B 304) and two small tiles (tile A 302 and
tile C 306). The medium-sized tile 304 is positioned on the right
side of the user interface 324 with the two small tiles (tile A 302
and tile C 306) stacked vertically to the left of the medium tile
(tile B 304). FIG. 3E illustrates a graphic representation of an
example user interface 326 having a medium-sized tile (tile A 302)
and two small tiles (tile B 304 and tile C 306). The medium-sized
tile 302 is positioned on the left side of the user interface 326
with the two small tiles (tile B 304 and tile C 306) stacked
vertically to the right of the medium tile (tile A 302). FIG. 3F
illustrates a graphic representation of an example user interface
328 having two medium-sized tiles (tile A 302 and tile B 304) with
one medium tile above the other. FIG. 3G illustrates a graphic
representation of an example user interface 330 having two
medium-sized tiles (tile A 302 and tile B 304) with the medium
tiles side by side. FIG. 3H illustrates a graphic representation of
an example user interface 332 having one large tile (tile A 302)
that occupies most of the user interface. One particular advantage
with regard to the dynamic grid described above is that the
2.times.2 grid supports rotation of devices. In other words, the
presentation of the data in tiles allows the device to be rotated
from a portrait mode to landscape mode and the appearance and
functionality of the user interface largely remain the same with
only modest dimensional changes.
[0090] Referring now to FIGS. 3I-3K, three graphic representations
of various implementations of the user interfaces 340, 342 and 344
are shown. These FIGS. 3I-3K illustrate how the grid is dynamic and
may be incremented in width by the user interface module 230 based
on the device upon which the user interface is being presented. In
FIG. 3I, the interface 340 is three columns wide while in FIG. 3J
the interface 342 is two columns wide and in FIG. 3K the interface
344 is one column wide. This may correspond to the available
displayable real estate, e.g., for a desktop computer, a tablet,
and a smart phone, respectively.
[0091] It should be understood that FIGS. 3A-3K illustrate only the
information that is being provided for display on a device at a
given time. The user may use inputs to the device, for example,
scrolling or gestures (e.g., swiping), to advance the user
interface to show additional tiles below or above the tiles
currently being shown. For example, FIG. 3K is an interface that
provides a linear list of tiles that may be appropriate for display
on a smart phone. The tiles are ordered from top to bottom in the
list based on their relevance or interestingness to the user.
Similarly, FIG. 3J is a dynamic grid two columns wide for placing
tiles in configurations described in FIGS. 3A-3H and ordered in
that grid from top to bottom of those two columns again in order of
relevance or interestingness to the user. In some implementations,
the presentation of the tiles is optimized for presentation to the
user. For example, the tiles may be ordered at least in part to
ensure that there are no blank spaces in the 2.times.2 visible
area. In another example, tile sizes may be selected at least in
part to ensure that there are no blank spaces in the 2.times.2
visible area. In some implementations, as many as ten (10)
successor user interfaces are calculated and ordered for a given
content stream.
[0092] FIG. 4 is a block diagram of an example of components for a
tile 400. The user interface generated by the user interface module
230 may be dynamic in yet another respect. The user interface
module 230 generates tiles based upon one or more of the components
for tile 400. Many of the components that are described below are
optional and may not be included in every tile, for example, when
the corresponding content is not available.
[0093] Referring now to FIG. 4A, the basic components of a tile 400
include a reason bar 402, an author area 404, a re-share area 406,
a media area 408, a social bar 410, and a comment area 412. The
reason bar 402 is presented at the top of the tile 400 and provides
information about the reason this content item is being displayed
to the user, why the content item is in the user's stream or other
attribution information. The author area 404 is positioned below
the reason bar 402 and provides text information about the author,
for example, name, handle, etc. The author area 404 may also
include a photo or image used by the author. The author area 404
may also be used to display text that was input by the author. The
re-share area 406 appears below the author area 404 and includes
tools or buttons that can be used by the reader to share the
content item, comment on the content item or take other action with
regard to the content item. Below the re-share area 406 is a media
area 408. The media area 408 is used to display media or
representations of media. For example, photos, emojis, multi-party
communications session (e.g., a multi-party video chat) with or
without a link to the session, thumbnails of images,
representations of videos that are selectable, representations of
audio that are selectable, etc., may be displayed in the media area
408. It should be noted that in some implementations the media and
its attributes may dictate the size of the tile. For example, when
the image is a panoramic image, a medium-sized tile may be used
instead of the small-sized tile. A social bar 410 is provided below
the media area 408. The social bar 410 may include indications of
the number of endorsements or the number of comments, buttons for
transitioning to a conversation related to the comment,
identification of the author of a comment, an abstract of the
comment, etc. In some implementations, the information in the
social bar 410 is dynamic and updated in real-time. For example,
new comments or authors introduced into the user's stream of
content items may be added or removed from the social bar 410 based
on a number of social affinity factors. The information provided by
the social bar 410 is described in more detail below with reference
to FIGS. 8A and 8B. Below the social bar 410 is a comment area 412.
The comment area 412 provides the full text of the comments as well
as additional information about the authors and is ordered in a
different format than the social bar 410. For example, the comment
area 412 may provide the comments in reverse chronological order
with the most recent comments presented at the top. Although not
shown in FIG. 4A, the tile 400 may also include an ad area for
including advertisements within the tile. It should be understood
that the described order and position of the various bars and areas
included in tile 400 is merely one implementation and other
implementations using a different position and order exist.
[0094] In some implementations, the tile 400 may include additional
or different components. For example, in some implementations, the
tile 400 components include a title bar with a navigation bar and
other buttons (not shown). In some implementations, the title bar
is locked to the top of the interface. In some implementations, the
tile 400 includes a preposition bar (not shown), e.g., positioned
below the title bar, which includes icons for current or popular
information. In some implementations, the preposition bar is also
used to display community information/ posts or location
information. In some implementations, the tile 400 includes a
location area (not shown). For example, when the user shares the
location from which the media was shared or generated, this
information may be provided in the location area. Additional
information, e.g., links to mapping programs for the location, may
also be provided in the location area. In some implementations, the
tile 400 includes a photo activity area (not shown) which is
separate from the media area 408. Although not shown, the tile 400
components may also include other action pallets, for example,
keyboards or emoticons, that can be added to the tile 400 when the
content is re-shared, commented upon or endorsed.
[0095] FIG. 5 is a graphic representation of an example user
interface 500 that includes tiles 502, 504, 506 with content for a
tablet device. As shown in FIG. 5, the user interface 500 includes
three tiles 502, 504, 506. The layout of the tiles 502, 504, 506 is
similar to that described above with reference to FIG. 3D. However,
FIG. 5 shows another variation of the tiles 502, 504, 506 in which
they are still rectangular but they are not sized exactly with
predefined proportions as set forth in FIGS. 3A-3H. In this
implementation, the tile size may have more variance. For example,
a first tile 502 is slightly greater than a quarter of the user
interface 500 while a second tile 504 has the same width as the
first tile 502 but a small portion of it is visible in the
interface 500 Likewise the third tile 506 covers more than half the
user interface 500. As noted above, in some implementations the
user interface module 230 may size the tiles 502, 504, 506
according to the content in the tiles 502, 504 and 506. In this
example, the tiles 502, 504, 506 are sized according to the
attributes of the media that is included within each tile 502, 504
and 506. The first tile 502 has a picture that is presented in a
small tile. The second tile 504 has a selectable link to a video
which is also presented in a smaller tile. The third tile 506
includes a photo that is presented in a medium to large tile.
Sizing and ordering the tiles based on the type of media included
in the tile is merely one implementation.
[0096] It should be understood that the order of the tiles and the
size of the tiles may be adjusted based upon a variety of factors
including: image resolution, image orientation, album resolution,
the amount of text, social data (e.g., interestingness of the
content, whether the user is following an author, closeness in the
social graph of the author to the user, closeness in the social
graph of commenter to the user, proximity of location of the user
to the content, diversity, number of endorsements, number of
re-shares, number of comments, affinity to the author, recommended
by the system, and various other social signals), and any
combination of the foregoing. For example, when the image
resolution of photo included within a tile is low, that content
item may be assigned to a small tile. In contrast, when the image
resolution of the photo is high, that content item may be assigned
a large tile. Similarly, when a content item includes 3 photos that
have narrow width dimensions (skinny), the 3 skinny photos may only
require a small sized tile; however, when the content item includes
3 photos that have a normal landscape orientation, a medium sized
tile, for example, tile C 306 of FIG. 3B may be used to provide the
content item in a tile on a grid.
[0097] Another feature of the tiles 502, 504, 506 that is
advantageous is that some of the functionality provided by the
tiles 502, 504, 506 is accessible when the tiles 502, 504, 506 are
displayed on the grid, e.g., as shown in FIG. 5. For example, the
tiles 502, 504, 506 need not be transitioned to a more detailed
interface, e.g., those of FIGS. 6A-6C, to access functionality. For
example, assuming tile 506 is showing one photo of a photo album,
using the interface grid level as shown in FIG. 5, the user needs
only swipe left or right (or scroll left or right) on the photo of
tile 506 to update the tile 506 to show the next photo in the photo
album in tile 506. Essentially, this allows the user in the stream
view of the dynamic grid to view a bunch of photos from a photo
album. Similarly, this access to functionality may be extended to
any action buttons on tiles that are visible to the user in the
dynamic grid view of FIG. 5. Examples of action buttons include,
but are not limited to, endorsement buttons, sharing buttons,
comments, etc. Similarly, swipe left or right (or scroll left or
right) on the tile can be used to access content above or below the
tile. In some implementations, scrolling or gestures (e.g.,
swiping) may be used within a tile to expand or contract content of
the tile.
[0098] Referring now also to FIGS. 6A-6C, the transitions between
interfaces 500, 600, 620 and 640 is described. With the user
interface 500 being displayed, the user may select a tile 502, 504,
506, for example, by inputting a selection command or by tapping on
the tile 502, 504, 506 and the user interface transitions from the
interface 500 shown in FIG. 5 to a corresponding interface 600, 620
and 640 shown in FIGS. 6A-6C.
[0099] More specifically, in some implementations, when the first
tile 502 is selected, the display transitions from the user
interface 500 to user interface 600 shown in FIG. 6A. The user
interface 600 has an expanded version of the tile 602 with the full
text associated with the content item. Additionally, the user
interface advantageously presents the tile 602 overlaid upon a
shaded version of the user interface 500 from which the user has
transitioned. This is particularly advantageous because it allows
the user to review more detailed information about the content item
while having the context of the item displayed in a shaded manner.
A comparison of the two tiles 502, 602 illustrates how much more
text from the content item is shown. It should be understood that
this is merely one example of a tile including more detailed
information and the more detailed information that may be provided.
Another example is that a photo or any other component associated
with the content item or tile may be shown in expanded format.
[0100] When the third tile 506 is selected, the display transitions
from the user interface 500 to user interface 620 shown in FIG. 6B.
The transition between the user interface 500 of FIG. 5 and the
user interface 620 of FIG. 6B shows another implementation for
transitioning between interfaces. In this implementation, the media
area 408 (e.g., the photo) the tile is expanded to be shown in full
screen and the author area 404, re-share area 406, social bar 410
and comment area 412 are overlaid on the media area 408. This
implementation is particularly advantageous because it allows
almost all the information associated with the content item to be
presented to the user in a single user interface. The portion of
the other components 404, 406, 410 and 412 of the tile are overlaid
over the media area 408 at the bottom left corner. This has the
advantage of minimally obstructing the view of the media area. It
should be understood that this overlay could be positioned at
various other positions within the interface 620.
[0101] In some implementations, when the third tile 506 is
selected, the display transitions from the user interface 500 to
user interface 640 shown in FIG. 6C. The transition between the
user interface 500 of FIG. 5 and the user interface 640 of FIG. 6C
shows another implementation for transitioning between interfaces.
In this implementation, a photo album presented with images in a
grid is overlaid upon the media area 408 (e.g., photo) expanded to
cover the full screen. The new tile shown in FIG. 6C may include a
button to allow the user to transition to the photo album and
indicating the number of photos, associated text, and a grid of the
first n thumbnail images of the photos from the photo album. It
should be understood that FIGS. 6A, 6B and 6C are merely three
examples of how additional details from a content item may be
presented in a secondary interface accessed through the primary
interface 500 of FIG. 5.
[0102] Referring now to FIGS. 7A-7C, graphic representations of
example user interfaces for a mobile device are described. FIG. 7A
illustrates how the tile components may be presented in a reduced
fashion as a single tile for a mobile device. FIG. 7B illustrates
how a photo album can be presented in a tile for mobile device.
FIG. 7C illustrates an implementation of how a secondary interface
for composing a share or comment on a tile may be presented. It
should be understood that the components of the tile may be reduced
in size, reducing content or completely eliminated from
presentation on a mobile device. Similarly, buttons or
functionality offered by the tile may also be reduced or eliminated
to accommodate the functionality available on the mobile
device.
[0103] FIGS. 8A and 8B are graphic representations of an example
social bar 410. FIG. 8A shows an implementation for the social bar
410. In this implementation, the social bar 410 includes an
endorsement button 802, an expansion button 804, a list of
commenters 806, an indication of the number of comments 808, a
comments box 810 and an indicator 812 that identifies the commenter
that made the comments in the comment box 810. In some
implementations, the endorsement button 802 causes the interface to
transition to another interface that allows the user to endorse the
content presented in the tile. The expansion button 804 transitions
the interface (e.g., interface 600) to another interface (e.g.,
interface 620) where more information about the content item is
displayed in an individual expanded tile. The list of commenters
806 is a list of users that have posted comments about the content
item in the tile. In some implementations, images of the commenters
are shown. For example, FIG. 8A shows 4 commenters and their
images. In some implementations, names or handles rather than
images are presented in 806. In some implementations, the
commenters most related to the user are added to the list of
commenters 806. In some implementations, the commenters that are
added to the list of commenters 806 can be determined by relevance,
for example, a threshold related to one or more of affinity to the
user, proximity in time, whether the commenter is endorsed or
followed by the user, whether the commenter is popular or often
endorsed, etc. is satisfied and the commenter is added to the list
of commenters 806. In some implementations, the list of commenters
806 is dynamically updated in real-time as new comments are added
to the user stream. It should be understood that as new comments
are received those commenters satisfying the threshold and included
in the list 806 may change such that the commenters in the list 806
are dynamic. The number of comments indicator 808 tells the user
how many comments have been posted about the content item in the
tile. The comment box 810 provides the comment or a portion of the
comment. In some implementations, the comments provided for
presentation to the user in the comment box 810 are changed at
predetermined intervals. For example, comments from different users
may be transitioned through the comment box 810 like a ticker tape.
As another example, comments may be changed at predetermined
intervals of time (e.g., every 15 seconds). The indicator 812 is
used to indicate the user to which the comment corresponds. For
example in FIG. 8A, the comment in the comment box 810 corresponds
to the first user and the indicator 812 is positioned below the
image of the first user to indicate that the first user is the
source of the comment. By comparison, in FIG. 8B, the comment in
the comment box corresponds to a second user, the user to the right
of the first user, and the indicator 812 is positioned below the
image of the second user to identify that the second user is the
source of the comment. In some implementations, the comment box 810
is updated and cycles through each of the users shown in the list
of commenters 806 and as the comments are changed the indicator 812
moves to be positioned under the user that is the source of the
comment. It should be recognized that the indicator 812 is merely
one example of an indicator and that other indicators exist.
[0104] Referring now to FIG. 9, an example method 900 for
generating a user interface including a dynamic grid having one or
more tiles is described. The method 900 begins by receiving 902 a
stream of content including one or more content items. For example,
the stream of content may be received by the user interface module
230 from the content application 103. The user interface module 230
selects a content item from the stream of content. The user
interface module 230 then determines 904 a tile type for providing
the content item based upon an attribute of the content item. For
example, an attribute of the content item may be media and its
attributes, image resolution or any of the factors described above
with reference to FIG. 5. Next, the method 900 uses 906 the content
item to populate the tile components. Then the method organizes
content tiles in a dynamic grid using the attribute of the content
items. The content tiles may be ordered 908 in the dynamic grid
using the attributes of the content files. For example, the tiles
may be ordered according to two rules: first making sure there is
no blank space in the dynamic grid (e.g., 2.times.2 grid) provided
to the user and second providing the tiles in order of relevance
with the more relevant content being presented at the top of the
grid. In some implementations, the method 900 continues by
diversifying 910 the tiles. The tiles may be diversified based upon
the type of content presented, type or size of tile presented,
source of content for tile or other factors. As noted above, in
some implementations up to 10 interfaces are generated. For
example, assuming a 2.times.2 dynamic grid is visible to the user,
in some implementations, a grid of 2.times.20 is arranged and
created so that successive portions of the 2.times.20 grid can be
provided to the user in response to input to transition to
successive portions of the grid. The method continues by providing
912 a portion of the dynamic grid of tiles for display.
[0105] In some implementations, a tile may have a predefined
maximum size. In some such implementations, the step of populating
906 the tile components with content from the content item may
include an iterative process of reducing the size of different
components until the sum of the components' sizes is below the
maximum size for a tile. For example, the processes may be to first
reduce the size of text, then to reduce the size photo, then to
reduce functionality provided in the tile and then evaluate whether
the tile size is below the maximum allowed. If so, the tile is
populated; if not, the method may select each of the components
again and determine whether their size cannot be reduced until the
total size of all the components is below the maximum allowed.
Additionally or alternatively, certain components of the tile may
be eliminated if the tile size needs to be reduced. In some
implementations, a tile may have a predefined minimum size. In some
such implementations, content items with no additional media or
little content may be expanded. In such an example, the size of the
font of text may be increased, the icon size may be increased, or
other buttons may be added to reduce the amount of whitespace for a
tile that has limited content.
[0106] FIG. 10 shows an example method 1000 for generating a user
interface providing detailed information about a tile from a
dynamic grid of tiles. The method 1000 begins by receiving 1002 an
input selecting a tile in the dynamic grid. The method 1000
identifies the tile and the content item associated with the input,
and then retrieves 1004 additional information related to the
content item. Then the user interface module 230 creates 1006 the
detailed tile interface. The detailed tile interface is populated
with the information retrieved in step 1004. Then the detailed tile
interface is provided 1008 for display to the user. The user may
input additional commands to manipulate the secondary interfaces.
The user interface module 230 receives 1010 a request for further
detail about the content item. The detailed user interface is
updated 1012 with additional information and the updated detailed
user interface is provided 1014 for display to the user. An example
of this method is shown in the interfaces of FIGS. 6A and 6B. These
user interfaces can receive input to retrieve additional text other
than that provided and displayed. In such cases, the user can
scroll to additional text below the text currently displayed in the
user interfaces shown FIGS. 6A and 6B. This additional text is
retrieved and the interface is updated and provided back to the
user as described above in steps 1012 and 1014.
[0107] In some implementations, when additional text is provided
and the user scrolls through that text, the detailed user interface
is automatically closed and the user returns to the initial dynamic
grid tile interface. In some implementations rather than
automatically closing the secondary user interface, a button is
provided when the user reaches the end of the text to make that
transition. For example, when the user scrolls to the end of text
in interface 602 of FIG. 6A, the interface would automatically
transition back to interface 500 of FIG. 5. It should be understood
that the secondary user interfaces may have a variety of different
mechanisms to return to the interface 500 of FIG. 5. For example,
various features may include a pull to close, pull to show next
post, scroll past the end to automatically close, pull to retrieve
next post or release to close.
[0108] FIG. 11 shows an example method 1100 for updating a tile or
dynamic grid in real-time for new content. The method 1100 begins
by providing 1102 a tile or a dynamic grid interface for display.
Next the user interface module 230 receives 1104 content related to
a tile or dynamic grid that is being displayed. The user interface
module 230 updates 1106 the interface with the new content that was
received and provides 1108 the updated tile interface for display
to the user.
[0109] Referring now to FIGS. 12A-12I, additional example user
interfaces for interacting with communities are shown. Other
sources of content include communities which may be public or
private, but are groups of users that are interested in a
particular topic and want to exchange information about a
particular topic or subject matter of interest. The information
exchanged may include, but is not limited to one or more of posts,
blogs, comments, shares, photos, movies, audio, rich conversations,
multi-party communication sessions, etc. The topics can be about
anything and the formation of communities on topics is dynamic and
adaptive. The interfaces, systems and methods described above can
also be applied to communities and be used to provide a similar
user experience and ease of interaction. The user interfaces in
FIGS. 12A-12I can be adapted to have dynamic grid organization, use
tiles to present different portions of the user interfaces shown in
FIGS. 12A-12I, and have modified tiles with functions specific to
communities, e.g., creating a community, joining a community and
sharing media of various types with the community.
[0110] In the above description, for purposes of explanation,
numerous specific details are indicated in order to provide a
thorough understanding of the technology described. It should be
apparent, however, that this technology may be practiced without
these specific details. In other instances, structures and devices
are shown in block diagram form in order to avoid obscuring the
technology. For example, the present technology is described with
some implementations below, with reference to user interfaces and
particular hardware. However, the present technology applies to any
type of computing device that may receive data and commands, and
any devices providing services.
[0111] Moreover, the present technology is described above
primarily in the context of creating and providing personas in
social networks for the purpose of filtering connections, content,
and applications, relating to users of the social networks, based
on the personas; however, the present technology may apply to any
type of online communities and other applications beyond just
online communities. In particular, this technology for creating
personas and filtering connections, content, and applications
relating to the users of the social networks, based on persona
types, may be used in other contexts besides social networks.
[0112] Reference in the specification to "one implementation or
instance," "an implementation or instance," or "some
implementations or instances" simply means that one or more
particular features, structures, or characteristics, described in
connection with the one or more implementations or instances is
included in at least one or more implementations or instances that
are described. Any appearance of the phrase "in one implementation
or instance" in various places in the specification is not
necessarily referring to the same implementation or instance.
[0113] Some portions of the detailed descriptions above are
presented in terms of algorithms and symbolic representations of
operations on data bits within a computer memory of either one or
more computing devices. These algorithmic descriptions and
representations are the means used in the data processing arts to
most effectively convey the substance of their work to others. An
algorithm as indicated here, and generally, is conceived to be a
self-consistent sequence of steps leading to a desired result. The
steps are those requiring physical manipulations of physical
quantities. Usually, though not necessarily, these quantities take
the form of electrical or magnetic signals capable of being stored,
transferred, combined, compared, and otherwise manipulated. It has
proven convenient at times, principally for reasons of common
usage, to refer to these signals as bits, values, elements,
symbols, characters, terms, numbers, or the like.
[0114] It should be understood, however, that all of these and
similar terms are to be associated with the appropriate physical
quantities and are merely convenient labels applied to these
quantities. Unless specifically stated otherwise, as apparent from
the following discussion, it should be appreciated that throughout
the description, discussions utilizing the terms "processing,"
"computing," "calculating," "determining," or "displaying" or the
like, refer to the action and processes of a computer system, or
similar electronic computing device, that manipulates and
transforms data represented as physical (electronic) quantities
within the computer system's registers and memories into other data
similarly represented as physical quantities within the computer
system memories or registers or other such information storage,
transmission, or display devices.
[0115] The present technology also relates to an apparatus for
performing the operations described here. This apparatus may be
specially constructed for the required purposes, or it may include
a general-purpose computer selectively activated or reconfigured by
a computer program stored in the computer. Such a computer program
may be stored in a computer-readable storage medium, for example,
but not limited to, any type of disk including floppy disks,
optical disks, CD-ROMs, magnetic disks, read-only memories (ROMs),
random access memories (RAMs), EPROMs, EEPROMs, magnetic or optical
cards, flash memories including USB keys with non-volatile memory
or any type of media suitable for storing electronic instructions,
each coupled to a computer system bus.
[0116] This technology may take the form of an entirely hardware
implementation, an entirely software implementation, or an
implementation including both hardware and software components. In
some implementations, this technology is implemented in software,
which includes but is not limited to firmware, resident software,
microcode, etc.
[0117] Furthermore, this technology may take the form of a computer
program product accessible from a computer-usable or
computer-readable medium providing program code for use by or in
connection with a computer or any instruction execution system. For
the purposes of this description, a computer-usable or
computer-readable medium may be any apparatus that may include,
store, communicate, propagate, or transport the program for use by
or in connection with the instruction execution system, apparatus,
or device.
[0118] A data processing system suitable for storing and/or
executing program code includes at least one processor coupled
directly or indirectly to memory elements through a system bus. The
memory elements may include local memory employed during actual
execution of the program code, bulk storage, and cache memories,
which provide temporary storage of at least some program code in
order to reduce the number of times, code must be retrieved from
bulk storage during execution.
[0119] Input/output or I/O devices (including but not limited to
keyboards, displays, pointing devices, etc.) may be coupled to the
system either directly or through intervening I/O controllers.
[0120] Communication units including network adapters may also be
coupled to the systems to enable them to couple to other data
processing systems, remote printers, or storage devices, through
either intervening private or public networks. Modems, cable
modems, and Ethernet cards are just a few examples of the currently
available types of network adapters.
[0121] The algorithms and displays presented in this application
are not inherently related to any particular computer or other
apparatus. Various general-purpose systems may be used with
programs in accordance with the teachings here, or it may prove
convenient to construct more specialized apparatus to perform the
required method steps. The required structure for a variety of
these systems is outlined in the description above. In addition,
the present technology is not described with reference to any
particular programming language. It should be understood that a
variety of programming languages may be used to implement the
technology as described here.
[0122] The foregoing description of the implementations of the
present technology has been presented for the purposes of
illustration and description. It is not intended to be exhaustive
or to limit the present technology to the precise form disclosed.
Many modifications and variations are possible in light of the
above teaching. It is intended that the scope of the present
technology be limited not by this detailed description, but rather
by the claims of this application. As should be understood by those
familiar with the art, the present technology may be implemented in
other specific forms, without departing from the spirit or
essential characteristics thereof. Likewise, the particular naming
and division of the modules, routines, features, attributes,
methodologies, and other aspects are not mandatory or significant,
and the mechanisms that implement the present disclosure or its
features may have different names, divisions and/or formats.
Furthermore, as should be apparent, the modules, routines,
features, attributes, methodologies, and other aspects of the
present technology can be implemented as software, hardware,
firmware, or any combination of the three. Also, wherever a
component, an example of which is a module, of the present
technology is implemented as software, the component can be
implemented as a standalone program, as part of a larger program,
as a plurality of separate programs, as a statically or dynamically
linked library, as a kernel loadable module, as a device driver,
and/or in every and any other way known now or in the future to
those in the art of computer programming. Additionally, the present
technology is in no way limited to implementation in any specific
programming language, or for any specific operating system or
environment. Accordingly, the disclosure of the present technology
is intended to be illustrative, but not limiting, of the scope of
the present disclosure, which is set forth in the following
claims.
* * * * *