VIRTUAL BOOKSHELVES FOR DISPLAYING AND SHARING DIGITAL CONTENT

A virtual bookshelf for displaying digital content items is generated. In operation, a virtual space that is to contain a virtual bookshelf is defined and the virtual bookshelf is generated based on dimensions of the virtual space. The virtual bookshelf is populated with digital content items. The virtual bookshelf and the digital content items are displayed using a display device.

DETAILED DESCRIPTION

FIG. 1is a block diagram illustrating a computing environment100for generating and displaying virtual bookshelves according to one embodiment. The environment100includes a virtual bookshelf server104(the “bookshelf server104”) and a client device106communicatively coupled to each other through a network102. Although only one bookshelf server104and client device106are illustrated, the computing environment may include multiple instances of each entity. Moreover, some of the functions ascribed to the bookshelf server104may be performed by the client device106and vice versa. Other entities may also be coupled to the network102.

The client device106is a computing device with a processor and a memory used by one or more users to view and consume digital content. The client device106may be, for example, a mobile phone, a desktop, a laptop, a tablet computer, an augmented reality (AR) device or a dedicated digital content consumption device. The client device106may execute one or more applications that support displaying and consuming digital content.

In the illustrated embodiment, the client device106includes a virtual bookshelf client module112(“the client module112”). The client module112generates virtual bookshelves and displays such virtual bookshelves to users. A virtual bookshelf is a visual representation of a bookshelf and includes a collection of digital content items that may be consumed and/or shared by users of the virtual bookshelf. A virtual bookshelf may be associated with a specific physical location such that the bookshelf may be automatically displayed by the client device106when the client device106is subsequently in the vicinity of the location.

When generating a virtual bookshelf, the client module112defines a virtual space that will contain the virtual bookshelf. In one embodiment, the virtual space occupies a portion of free space within a physical space, such as a wall within a room of a house, and has dimensions that are determined based on the free space. The free space may be selected by a user via a user interface provided by the client module112or may be automatically determined based on a video input or a sensor input. In an alternate embodiment, the virtual space is a user-defined construct that specifies the dimensions of the space that is to contain the virtual bookshelf.

The client module112generates a virtual bookshelf based on the dimensions of the virtual space. The virtual bookshelf is defined by a set of attributes, where each attribute controls a different aspect of the virtual bookshelf. Examples of such attributes include, but are not limited to, size, color, number of shelves, etc. In one embodiment, the client module112enables the user to modify one or more attributes defining the virtual bookshelf via a user interface.

Once generated, the client module112causes the virtual bookshelf to be displayed on a display provided by or communicatively coupled to the client device106. Further, the client module112also causes a collection of digital content items, such as electronic books, to be displayed within the virtual bookshelf (“the digital content associated with the virtual bookshelf”). The client module112then enables a user to interact with the digital content items displayed within the virtual bookshelf. In one embodiment, the client module112causes the virtual bookshelf and the digital content within the virtual bookshelf to be overlaid into the user's vision via an AR-enabled display device.

In addition, the client module112operates in conjunction with the bookshelf server104to persist the set of attributes defining a virtual bookshelf and the virtual space that contains the virtual bookshelf. Consequently, previously-generated virtual bookshelves can be retrieved by the client module112for display. In one embodiment, the client module automatically displays a generated virtual bookshelf when the client device106is in the vicinity of the physical location associated with virtual bookshelf. The client module112also enables a user to browse the virtual bookshelves that are accessible to the user, such as a virtual bookshelf shared with the user. While browsing, the user may select a virtual bookshelf for viewing, and the client module112then displays the virtual bookshelf.

The bookshelf server104is a computing device with a processor and a memory that communicates with the client device106via the network102to facilitate generating and displaying virtual bookshelves. Depending upon the embodiment, the bookshelf server104may be implemented as cloud-based service distributed across multiple physical servers.

In the illustrated embodiment, the bookshelf server104includes a virtual bookshelf management module108(the “management module108”) and a storage repository110. The management module108interfaces with the client module112to enable the aforementioned functionality of the client module112. In operation, the management module108stores a set of attributes that defines a virtual bookshelf and the definition of the virtual space containing the virtual bookshelf in the storage repository110in response to receiving those attributes from the client module112. In addition, the management module108stores in the storage repository110the particular digital content item that a user has interacted with via the virtual bookshelf. Finally, the management module108retrieves attributes related to a virtual bookshelf for transmission to the client module112in response to a request received from the client module112. Such functionality enables the client module112to display a previously-generated virtual bookshelf when appropriate.

The management module108also determines the digital content items available to populate a particular virtual bookshelf. In operation, the management module108receives a request from the client module112for populating a newly-generated virtual bookshelf with digital content items. The management module108then determines the digital content items based on a collection of information, including, but not limited to, user information and the set of attributes defining the virtual bookshelf. More specifically, the management module108may determine the digital content items based on user profiles associated with the users that are to interact with the virtual bookshelf. A user profile may include the interests of a user and a digital content purchase history associated with the user. The management module108may also determine the digital content items based on the set of attributes defining the virtual bookshelves, such as the number and sizes of the shelves. In one embodiment, the collection of information used by the management module to determine the digital content items is stored in the storage repository110.

The network102represents the communication pathways between the bookshelf server104, client device112, and any other entities on the network. In one embodiment, the network102is the Internet and uses standard communications technologies and/or protocols. Thus, the network102can include links using technologies such as Ethernet, 802.11, worldwide interoperability for microwave access (WiMAX), 3G, digital subscriber line (DSL), asynchronous transfer mode (ATM), InfiniBand, PCI Express Advanced Switching, etc. Similarly, the networking protocols used on the network102can include multiprotocol label switching (MPLS), the transmission control protocol/Internet protocol (TCP/IP), the User Datagram Protocol (UDP), the hypertext transport protocol (HTTP), the simple mail transfer protocol (SMTP), the file transfer protocol (FTP), etc. The data exchanged over the network102can 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 such as secure sockets layer (SSL), transport layer security (TLS), virtual private networks (VPNs), Internet Protocol security (IPsec), etc. In other embodiments, the entities use custom and/or dedicated data communications technologies instead of, or in addition to, the ones described above.

FIG. 2is a high-level block diagram illustrating a typical computer200for use as a security server110or client112. Illustrated are a processor202coupled to a chipset204. Also coupled to the chipset204are a memory206, a storage device208, a keyboard210, a graphics adapter212, a pointing device214, and a network adapter216. A display218is coupled to the graphics adapter212. In one embodiment, the functionality of the chipset204is provided by a memory controller hub220and an I/O controller hub222. In another embodiment, the memory206is coupled directly to the processor202instead of the chipset204.

The storage device208is a non-transitory computer-readable storage medium, such as a hard drive, compact disk read-only memory (CD-ROM), DVD, or a solid-state memory device. The memory206holds instructions and data used by the processor202. The pointing device214is a mouse, track ball, or other type of pointing device, and is used in combination with the keyboard210to input data into the computer system200. The graphics adapter212displays images and other information on the display218. The network adapter216couples the computer system200to the network116.

As is known in the art, a computer200can have different and/or other components than those shown inFIG. 2. In addition, the computer200can lack certain illustrated components. In one embodiment, a computer200acting as a virtual bookshelf server104is formed of multiple blade computers and lacks a keyboard210, pointing device214, graphics adapter212, and/or display218. Moreover, the storage device208can be local and/or remote from the computer200(such as embodied within a storage area network (SAN)).

This description uses the term “module” to refer to computer program logic for providing a specified functionality. A module can be implemented in hardware, firmware, and/or software. A module is typically stored on a computer-readable storage medium such as the storage device208, loaded into the memory206, and executed by the processor202.

FIG. 3is a high-level block diagram illustrating a detailed view of the virtual bookshelf management module108of the bookshelf server104and other entities according to one embodiment. As shown inFIG. 3, the management module108itself includes multiple modules. In some embodiments, the functions are distributed among these modules in a different manner than described herein.

A user data module302manages data associated with different users interacting with instances of the client module112. The user data module302maintains data associated with each user as a user profile associated with a unique user identifier (ID). The user profiles are stored within the user profiles312portion of the storage repository110. Examples of data stored in a user profile include a list of virtual bookshelves that are accessible to the user, a set of user preferences and a digital content purchase history for the user.

For a particular user operating a client device106, the user data module302collects information to be included in a user profile in a variety of ways. The user data module302may periodically interact with the client module112to retrieve an audit trail of actions performed by the user. Such an audit trail may include a list of websites that the user accessed via the client device106and a list of digital content items that the user viewed or purchased via the client device106. The user data module302then parses and analyzes the audit trail and stores the relevant information in the user profile.

The user data module302may also periodically poll third-party services to retrieve information related to the particular user, such as the user's interests and preferences related to genres of digital content items. Such third-party services may include social networking services to which the user subscribes or third-party content providers from which the user has previously purchased content. Finally, the user may manually provide certain information to the user data module302. For example, the user may input via a user interface provided by the client module112her preferences related to both types of digital content items and the appearance and configuration of virtual bookshelves.

A virtual bookshelf data module304(“the bookshelf data module304”) manages data associated with virtual bookshelves generated by different instances of the client module112. The bookshelf data module304stores data associated with each virtual bookshelf as a bookshelf profile associated with a unique bookshelf identifier (ID). The bookshelf profiles are stored within the bookshelf profiles314portion of the storage repository110. Examples of data stored in a bookshelf profile include the set of attributes defining the virtual bookshelf and the virtual space that contains the virtual bookshelf, the list of users who can access the virtual bookshelf and the digital content items associated with the virtual bookshelf.

When a virtual bookshelf is first generated, the bookshelf data module304receives the set of attributes defining the virtual bookshelf and the virtual space that contains that virtual bookshelf from the client module112. The bookshelf data module304then stores the received set of attributes in the storage repository as a bookshelf profile. The bookshelf profile is associated with a unique bookshelf ID that identifies the particular virtual bookshelf.

Once the virtual bookshelf is populated with digital content items, the bookshelf data module304updates the bookshelf profile to include the list of digital content items within the virtual bookshelf. In addition, for each digital content item in the list of digital content items, the bookshelf data module304stores in the bookshelf profile a set of states indicating information about the digital content item that is unique to the virtual bookshelf. For a particular digital content item, a “location” state in the set of states indicates the location within the virtual bookshelf where the digital content item was last placed. A “checked out” state indicates whether the digital content item was checked out and, if so, by which user. Further, an “amount viewed” state indicates how much of the digital content item has been viewed by a user. Other states not explicitly described here, such as the number of views of the digital content item, may be additionally captured in the set of states.

The bookshelf data module304also stores access control information related to the virtual bookshelf in the bookshelf profile. The access control information describes users' access rights with respect to the virtual bookshelf. More specifically, the user that created the virtual bookshelf may provide, via the client module112, bookshelf access privileges to certain users, such that only those users are able to view and/or interact with the virtual bookshelf. Alternatively, the user that created the virtual bookshelf may designate, via the client module112, the virtual bookshelf as a public bookshelf, such that any user of an instance of the client module112may view and interact with the virtual bookshelf. The bookshelf data module304stores these bookshelf level access control designations in the bookshelf profile.

In addition, users having access to the virtual bookshelf may designate, via the client module112, access control privileges at the digital content level. The access control privileges for a particular digital content item describe users' access rights with respect to the digital content item. For example, a user may designate a particular digital content item within the virtual bookshelf as private, such that only that user is able to view and interact with the digital content item within virtual bookshelf. Alternatively, the user may designate a particular digital content item as public, such that any user who has access to the virtual bookshelf may view and interact with the digital content item. The bookshelf data module304stores these digital content level access control designations in the bookshelf profile.

The bookshelf data module304also receives requests from various instances of the client module112for retrieving information related to virtual bookshelves so that those bookshelves may be displayed to users. Such a request typically includes a bookshelf ID identifying the particular virtual bookshelf and a user ID identifying the user to whom the virtual bookshelf is to be displayed. Upon receiving the request, the bookshelf data module304retrieves the bookshelf profile associated with the bookshelf ID from the storage repository110.

The bookshelf data module304then performs an access control check to determine, based on the bookshelf level access control information in the bookshelf profile, whether the user associated with the user ID can access the virtual bookshelf. If the user cannot access the virtual bookshelf, then the bookshelf data module304transmits an error message to the client module112indicating that the user does not have access privileges. If the user can access the virtual bookshelf, then the bookshelf data module304transmits the bookshelf profile to the client module112. In an alternate embodiment, the bookshelf data module304does not determine whether the user can access the virtual bookshelf and, instead, directly transmits the bookshelf profile to the client module112in response to receiving the request. In such an embodiment, the client module112performs the access control check.

A content module306manages data associated with digital content items available for populating virtual bookshelves. In operation, the content module306periodically polls content servers310to determine whether new digital content items are available. A content server310may be a content publishing service or a content distribution service. If, in polling the content servers310, the content module306determines that a new digital content item is available, the content module306retrieves data associated with the new digital content item from the content servers310. Such data may include the title of the digital content item, the genre to which the digital content item belongs, content type, etc. The data may also include display characteristics that control how the digital content item is to be displayed. The content module306stores the data associated with the digital content item in the content data316portion of the storage repository110.

The content module306receives requests from various instances of the client module112for retrieving data associated with digital content items. Such a request typically includes a unique ID identifying the particular digital content item. Upon receiving the request, the bookshelf data module304retrieves the data associated with the digital content item from the storage repository110and transmits the data to the client module112. Again, the data associated with the digital content items includes descriptive data, such as the title of the digital content item, the genre to which the digital content item belongs, etc., and also display characteristics that control how the digital content item is to be displayed. The client module112displays the digital content items based on the data received from the content module306.

The content module306also receives requests from various instances of the client module112for retrieving the content of the digital content items. More specifically, when a user wishes to consume a digital content item displayed by the client module112, the client module112transmits a request to the content module112for the content of the digital content item. The content module306, in response to receiving such a request, communicates with the content servers310to retrieve the content of the digital content item for transmission to the client module112. In one embodiment, the content module306communicates with the content servers310to determine whether the user who wishes to consume the digital content item must first purchase the digital content item. If the user must first purchase the digital content item, then the content module306orchestrates the purchase of the digital content item from the content servers310. The content of the purchased digital content item is then retrieved from the content servers310for transmission to the client module112.

A bookshelf populating module308receives requests from various instances of the client module112for populating virtual bookshelves with digital content items. In response to a request for populating a particular virtual bookshelf, the bookshelf populating module308determines a list of digital content items to be displayed in the virtual bookshelf. The bookshelf populating module308transmits the list of digital content items to the client module112for display within the virtual bookshelf.

The bookshelf populating module308determines the list of digital content items based on the user profile(s) associated with the users who may access the virtual bookshelf as well as the set of attributes associated with the virtual bookshelf. For example, the bookshelf populating module308may analyze a user's purchase history or the list of digital content item previously consumed by the user to determine the list of digital items that should be included in the virtual bookshelf. Further, the bookshelf populating module308may analyze the set of attributes associated with the virtual bookshelf to determine the genre and the number of digital content items that should be displayed within the virtual bookshelf. The bookshelf populating module308transmits the list of digital content items to the client module112for display within the virtual bookshelf.

FIG. 4is a high-level block diagram illustrating a detailed view of the virtual bookshelf client module112of the client device106according to one embodiment. As shown inFIG. 4, the client module112includes multiple modules. In some embodiments, the functions are distributed among these modules in a different manner than described herein.

A bookshelf definition module402generates a definition of a virtual space that will contain a virtual bookshelf. The bookshelf definition module402operates in one of two modes. In the first mode, the bookshelf definition module402receives a set of dimensions defined by a user of the bookshelf client module112. The bookshelf definition module402may optionally receive user-specified coordinates of a particular physical location to be associated with the virtual bookshelf. The bookshelf definition module402then generates the virtual space based on the set of dimensions and associates the virtual space with any physical coordinates specified by the user.

In the second mode, the bookshelf definition module402identifies free space within a physical space and generates the definition of a virtual space based on the free space. In one embodiment, the bookshelf definition module402detects the free space by performing image analysis operations on a video or image of the physical space. The video or image may be input via a camera device communicatively coupled to or included in the client device106. Alternatively, the video or image may be selected by a user of the bookshelf client module112from a catalogue of videos or images available to the user. In another embodiment, the bookshelf module402receives a selection of the free space within the physical space as an input from the user of the bookshelf client module112. In such an embodiment, the bookshelf definition module402may present an image of the physical space to the user and, in response, receive a user input indicating a portion of the image as the free space that should contain the virtual bookshelf.

Once the free space is identified, the bookshelf definition module402computes the dimensions of the free space relative to the dimensions of the entire physical space. The bookshelf definition module402also identifies by analyzing the video or image of the physical space one or more unique markers that may be used to identify the free space in the future. Such unique markers include objects and/or visually discernible marks and colors in or around the free space. The bookshelf definition module402then generates a virtual space definition that specifies the dimensions of the free space and identifies the one or more unique markers. In one embodiment, the bookshelf definition module402also identifies the coordinates describing the physical location of the free space via a location sensor included in the client device106, and the definition of the virtual space specifies the identified coordinates.

The bookshelf definition module402transmits the virtual space definition to a bookshelf generation module404for further processing. The bookshelf generation module404generates a virtual bookshelf based on the virtual space definition. The virtual bookshelf is defined by a set of attributes, where each attribute controls a different aspect of the virtual bookshelf. Examples of such attributes include, but are not limited to, size, color, number of shelves, etc.

For each attribute in the set of attributes, the bookshelf generation module404determines the value of the attribute based on the virtual space definition, a user profile associated with the user of the bookshelf client module112and/or other user provided inputs. For example, the bookshelf generation module404determines the size of the virtual bookshelf to equivalent to or smaller than the dimensions specified by the virtual space definition. The aesthetic attributes, such as the color and texture attributes, may be determined based on user preferences specified in the user profile retrieved from the user data module302described above. Alternatively, the user of the bookshelf client module112may specify the values of one or more attributes via a user interface at the time of the virtual bookshelf generation.

The bookshelf generation module404transmits the set of attributes to the bookshelf data module304for storage in the storage repository110. The bookshelf generation module404also transmits a request to the bookshelf populating module308for populating the virtual bookshelf with digital content items. As discussed above, the bookshelf populating module308identifies a list of digital content items to be displayed within the virtual bookshelf based on several considerations including the user's purchase history and the set of attributes associated with the virtual bookshelf. The bookshelf populating module308updates the bookshelf profile to include the list of digital content items.

A display module406causes virtual bookshelves to be displayed on a display device within or communicatively coupled to the client device106. The display module406identifies the particular virtual bookshelf to be displayed automatically or via user selection. For automatic identification, the display module406automatically determines that the client device106is in the vicinity of the physical space associated with a particular virtual bookshelf, i.e., the physical space based on which the virtual space containing the bookshelf was defined. The display module406makes such detection by analyzing a video or an image of the physical space and identifying markers in the physical space that match the unique markers included in the virtual space definition. Alternatively, the display module406makes such detection by matching coordinates specified by a location sensor within the client device106with coordinates included in the virtual space definition of the virtual bookshelf.

The display module406then requests the bookshelf profile associated with the particular virtual bookshelf from the virtual bookshelf data module304. The display module406also requests from the content module306data associated with each digital content item in the list of digital content items specified by the bookshelf profile. Based on the set of attributes included in the bookshelf profile and the data associated with the list of digital content items, the display module406generates a visual representation of the virtual bookshelf including the digital content items. In one embodiment, where the client device112is an AR enabled device worn by a user, the display module406causes the virtual representation of the virtual bookshelf to be overlaid into the user's vision.

The display module406may also determine via a bookshelf browsing module408that the user has selected a particular virtual bookshelf for display. The bookshelf browsing module408allows the user to browse through a catalogue of previously-generated virtual bookshelves. In operation, the bookshelf browsing module408transmits a request to the virtual bookshelf data module304for a list of bookshelf profiles associated with virtual bookshelves that are accessible to the user. The bookshelf browsing module408then allows the user to view information regarding each of the bookshelves and select bookshelves for display. If the user selects a particular virtual bookshelf for display, the bookshelf browsing module408transmits the bookshelf ID of the selected bookshelf to the display module406. The display module406then causes the virtual bookshelf and the included digital content items to be displayed in the same manner as described above.

A bookshelf interaction module410allows a user to interact with a displayed visual representation of the virtual bookshelf. The user, via the bookshelf interaction module410, may change attributes of the virtual bookshelf, share or stop sharing the virtual bookshelf with specific users, set or modify bookshelf-level access control and subscribe to or unsubscribe from the virtual bookshelf. In addition, the user may, via the bookshelf interaction module410, interact with the individual digital content items displayed in the virtual bookshelf. Specifically, the user may view, purchase and check in/out digital content items displayed in the virtual bookshelf. Further, the user may comment on specific portions of a digital content item via the bookshelf interaction module410. The bookshelf module410then transmits the comments to the virtual bookshelf data module304for storage in the storage repository110.

The bookshelf interaction module410may receive input from users via gestures, keystrokes on a keyboard or touch input. In the embodiment where the visual representation of the virtual bookshelf is overlaid into the user's vision, the bookshelf interaction module410allows the user to interact with the virtual bookshelf via hand gestures. For example, the bookshelf interaction module410detects a tapping gesture performed by the user and correlates the tapping gesture to an individual digital content item displayed in the visual representation of the virtual bookshelf. The bookshelf interaction module410then displays the internal contents of the digital content item as retrieved from the management module108.

FIG. 5is a flow diagram illustrating steps performed by the client module112for generating a virtual bookshelf based on a virtual space definition according to one embodiment. Other embodiments can perform different and/or additional steps. Moreover, other embodiments can perform the steps in different orders. Further, some or all of the steps can be performed by entities other than the client module112.

At step502, the client module112generates a definition of a virtual space that will contain the virtual bookshelf. At step504, the client module112generates a virtual bookshelf based on the virtual space definition. The virtual bookshelf is defined by a set of attributes, where each attribute controls a different aspect of the virtual bookshelf. At step506, the client module112identifies a list of digital content items to be displayed within the virtual bookshelf. At step508, the client module112displays the virtual bookshelf including the digital content items identified at step506. At step510, the client module112receives a user interaction with the virtual bookshelf. User interactions include, but are not limited to, modifying one or more attributes of the virtual bookshelf, interacting with one or more digital content items displayed in the virtual bookshelf or sharing the virtual bookshelf with other users. At step512, the client module112updates attributes of the virtual bookshelf or state associated with digital content items in the virtual bookshelf based on the user interaction.

FIG. 6is a flow diagram illustrating steps performed by the client module112for retrieving a pre-generated virtual bookshelf for display to a user according to one embodiment. Other embodiments can perform different and/or additional steps. Moreover, other embodiments can perform the steps in different orders. Further, some or all of the steps can be performed by entities other than the client module112.

At step602, the client module112determines that the client device106is in the vicinity of the physical space associated with a particular virtual bookshelf, i.e., the physical space based on which the virtual space containing the bookshelf was defined. At step604, the client module112retrieves from the virtual bookshelf data module304the bookshelf profile associated with the particular virtual bookshelf. At step606, the client module112generates a visual representation of the virtual bookshelf based on the virtual space definition and the set of attributes included in the bookshelf profile. At step608, the client module112retrieves from the content module306data associated with each digital content item in the list of digital content items specified by the bookshelf profile. At step610, the client module112generates a visual representation of each digital content item based on the associated data and displays the visual representation of the digital content item within the virtual bookshelf.