A website is a set of related webpages served from a single web domain. A website is hosted on at least one web server, and is accessible through a network such as the Internet or a private local area network (LAN) through an Internet address known as a Uniform Resource Identifier (URL) (e.g., a Uniform Resource Locator or URL). All publicly accessible websites collectively constitute the World Wide Web. A webpage of a website is a document, typically written in plain text interspersed with formatting instructions coded in Hypertext Markup Language (HTML). Webpages may be accessed and transported according to Hypertext Transfer Protocol (HTTP). The webpages of a website are typically organized in a hierarchy, with hyperlinking between them (and/or to other websites) to guide the navigation of the website by the user. An application, such as a web browser, may be interacted with by the user to render the content of a webpage for display.
Website development relates to the work involved in developing a website. The complexity of website development has a wide range, encompassing the development of a single page of plain text to the development of web applications, electronic businesses, and social network services that include thousands or millions of webpages and other web objects. A web developer is a programmer who engages in the development of websites. For instance, a web developer may program the code of webpages, scripts, and other programmable web resources that contain code. Furthermore, the web developer may be enabled to edit images, videos, and/or other media.
Typically, a web developer who is going to edit a website hosted on a remote server has to download a copy of all of the website files, along with any dependencies, from the server to the web developer's computer, has to edit the website files locally, and then has to publish the edited website to the remote server. Alternatively, the web developer has to separately download and open each individual remote website file that is going to be edited as he/she proceeds with editing the website.
The first of these two approaches is cumbersome because it has a significant number of steps, and the developer may have to download a large number of website resources to the web developer's computer, including resources of the website that are not even editable by the developer. The second approach has a limitation in performance because the developer has to wait for each separate file to be downloaded prior to editing it, as well as not having access to the non-downloaded files of the website. The second approach is also limited because the website cannot be run locally to preview any changes, and the developer cannot make changes to the website in the context of the surrounding files of the website, which may provide some contextual information.
This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.
Methods, systems, and computer program products are provided for enabling a developer to develop a website hosted on a remote server in a more efficient manner. The developer can select a website to edit, and the files of the website are automatically downloaded to the computing device of the developer. Even though all of the files of the website may not have completed being downloaded, the developer may be provided with a complete list of the files of the website, and can select a file in the list to edit. If the selected file has already been downloaded, the developer can begin editing the file. If the selected file has not yet been downloaded, the download of the selected file can be prioritized over the download of other files of the website to enable the developer to be able to edit the selected file sooner. Furthermore, during editing of a webpage, code suggestions may be provided to the developer to enable faster completion of code editing by the developer, as well as contextual information, etc. The code suggestions may be automatically generated based on an analysis of some or all of the downloaded files of the website.
In one implementation, a method in a computing device is provided for enabling a developer to edit a website. A developer is enabled to select a website for editing. The website is defined by a plurality of files stored at one or more servers, including files containing code that are editable, and may include one or more un-editable files. One or more calls are issued to download a copy of the plurality of files from the server to store in a cache at the computing device in response to the developer selecting the website for editing. The developer is enabled to edit the downloaded files containing code, as well as further files of the website, to generate an edited version of the website. The developer is enabled to edit a downloaded copy of a file in the cache when a copy of at least one other file has not yet been downloaded to the cache in response to the call. The developer is enabled to display the edited version of the website locally.
Furthermore, the method may include comparing code input by the developer to an open file in the cache to contents of at least one other file of the plurality of files in the cache to determine one or more code suggestions. The code suggestion(s) may be displayed to the developer. The developer is enabled to select a code suggestion of the displayed code suggestion(s) for inclusion in the open file. Additional types of contextual information may be provided as contextual hints or suggestions, such as the colors used by the website, the images used by the website, etc.
In another implementation, a system in a computing device enables a developer to edit a website. The system includes a website selection module, a website file synchronization module, a website editor, and a website display module. The website selection module is configured to enable a developer to select a website for editing. The website is defined by a plurality of files stored at a server including files containing code, and may include one or more un-editable files. The website file synchronization module is configured to issue a call to download copies of the files containing code from the server to store in a cache at the computing device in response to the developer selecting the website for editing. The website editor is configured to enable the developer to edit the files containing code to generate an edited version of the website. The website editor is configured to display the files containing code in a list at the computing device, to enable the developer to select a file in the list for editing, and to enable the developer to edit a downloaded copy of the selected file in the cache when a copy of at least one other file of the files containing code has not yet been downloaded to the cache in response to the call. The website display module is configured to enable the developer to display the edited version of the website.
Furthermore, when the website file synchronization module determines that the selected file has not yet been downloaded to the cache in response to the call, the website file synchronization module is configured to reorder the download to prioritize downloading of the selected file over downloading one or more other files of the list.
Still further, the website file synchronization module is configured to automatically synchronize the edited files in the cache with the files of the website stored at the server. Furthermore, the website file synchronization module may be configured to automatically synchronize any files of the website at the server that are edited with the files in the cache.
Still further, the system may include a code suggestion module. The code suggestion module is configured to compare code input by the developer to an open file in the cache to contents of at least one other file of the plurality of files in the cache to determine one or more code suggestions, to display the code suggestion(s) to the developer, and to enable the developer to select a code suggestion of the displayed code suggestion(s) for inclusion in the open file. Additional types of contextual information may be provided by the code suggestion module as contextual hints or suggestions, such as suggestions or hints regarding website colors, images, and/or other website features.
A computer readable storage medium is also disclosed herein having computer program instructions stored therein that enable a processor to enable a developer to edit a remotely hosted website according to the embodiments described herein.
Further features and advantages of the invention, as well as the structure and operation of various embodiments of the invention, are described in detail below with reference to the accompanying drawings. It is noted that the invention is not limited to the specific embodiments described herein. Such embodiments are presented herein for illustrative purposes only. Additional embodiments will be apparent to persons skilled in the relevant art(s) based on the teachings contained herein.
The accompanying drawings, which are incorporated herein and form a part of the specification, illustrate the present invention and, together with the description, further serve to explain the principles of the invention and to enable a person skilled in the pertinent art to make and use the invention.
The features and advantages of the present invention will become more apparent from the detailed description set forth below when taken in conjunction with the drawings, in which like reference characters identify corresponding elements throughout. In the drawings, like reference numbers generally indicate identical, functionally similar, and/or structurally similar elements. The drawing in which an element first appears is indicated by the leftmost digit(s) in the corresponding reference number.
The present specification discloses one or more embodiments that incorporate the features of the invention. The disclosed embodiment(s) merely exemplify the invention. The scope of the invention is not limited to the disclosed embodiment(s). The invention is defined by the claims appended hereto.
References in the specification to “one embodiment,” “an embodiment,” “an example embodiment,” etc., indicate that the embodiment described may include a particular feature, structure, or characteristic, but every embodiment may not necessarily include the particular feature, structure, or characteristic. Moreover, such phrases are not necessarily referring to the same embodiment. Further, when a particular feature, structure, or characteristic is described in connection with an embodiment, it is submitted that it is within the knowledge of one skilled in the art to effect such feature, structure, or characteristic in connection with other embodiments whether or not explicitly described.
Numerous exemplary embodiments of the present invention are described as follows. It is noted that any section/subsection headings provided herein are not intended to be limiting. Embodiments are described throughout this document, and any type of embodiment may be included under any section/subsection. Furthermore, embodiments disclosed in any section/subsection may be combined with any other embodiments described in the same section/subsection and/or a different section/subsection in any manner.
A website is a set of related webpages served from a single web domain. A webpage is a document, typically written in plain text interspersed with formatting instructions of Hypertext Markup Language (e.g., HTML, XHTML, etc.). Webpages may be accessed and transported according to the Hypertext Transfer Protocol (HTTP), which may optionally use encryption (e.g., HTTP Secure, HTTPS, etc.) to provide security and privacy for a user of the webpage content. The webpages of a website are typically organized in a hierarchy, with hyperlinking between them (and/or to other websites) to guide the navigation of the website by the user. An application, such as a web browser, may be interacted with by the user to render the content of a webpage for display.
Website development relates to the work involved in developing a website. A website developer (or web developer) is a programmer who engages in the development of a website. A web developer may program the code of webpages, scripts, and other programmable web objects or resources that contain editable code. Examples of programming languages that developers may use for code in webpage files (e.g., webpages, scripts, etc.) of a website include C#, Visual Basic, HTML, CSS (cascading style sheets), JavaScript, PHP, and Node.js, as well as many further programming languages. Furthermore, a developer may be enabled to develop images, video, audio, and/or other media objects for a website.
Typically, a web developer who is going to edit a website hosted on a remote server has to download a local copy of all of the website files, along with any dependencies to the web developer's computer. The web developer edits the downloaded copy of the website files locally, and then publishes the edited website to the remote server. Alternatively, a web developer may separately download and open each individual remote website file for editing as the developer proceeds with editing the website. The first of these two approaches is cumbersome because it has a significant number of steps, and a large number of website resources may end up being downloaded to the web developer's computer, including resources of the website that are not even editable by the developer. The second approach has a limitation in performance because the developer has to wait for each separate file to be downloaded for editing, as well as not having access to the non-downloaded files of the website. The second approach is also limited because the website cannot be run locally to preview any changes, and the developer cannot make changes to the website in the context of the surrounding files of the website, which may provide some contextual information.
Embodiments overcome the deficiencies of these approaches by downloading the editable files of a website to a developer's computing device in a manner that is asynchronous to the developer's ability to edit the files. For instance, in an embodiment, when a developer chooses to edit a remote website in a website development tool or application (also referred to herein as a “website development system”), the application creates a cache on the computing device of the developer (or other storage location that may be accessed more rapidly than the website server) to store the site content. The application requests the remote server for the file structure of the website, including editable and un-editable files of the website. The file structure may optionally be displayed to the developer. In the background, the application asynchronously downloads the remote files of the website that are editable (e.g., breadth first) to the local cache.
The download process may be optimized at the individual file/folder level so that: If the developer selects to open a file which has already been downloaded to the cache, the file is opened immediately for editing. If the developer selects to open a file that has not been downloaded to the cache, the file will be downloaded immediately, and then the download may be resumed for the remaining files/folders.
Embodiments also enable the implementation of rules to include/exclude particular file types that are not editable by the developer (such as images, audio files, videos, etc.) and/or to have infrequently edited files be downloaded last (lowest priority) after frequently edited files are downloaded (highest priority). The ordering of the downloading of files may be arranged in further ways, including ordering the downloading of files by file size, by a frequency of viewing by users (e.g., downloading most frequently viewed files first), etc.
Furthermore, in an embodiment, whenever the developer saves changes to the website, the changes (e.g., the edited files) are pushed to the remote server asynchronously in the background. As such, a cumbersome publish process is not needed. When the developer decides to run the website, all changes are pushed to remote server (if they have not already been pushed to the server), and then the updated remote website may be launched so that the developer can review his/her changes. The developer sees that they are enabled to select a remote website, edit one or more files of the website, and save.
Still further, in an embodiment, because all files that may need to be edited are downloaded to the local cache, the application can use them to provide code suggestions (e.g., intelli-sense) and/or other contextual hints or suggestions for the developer to use to edit the website in the developer's language of choice.
These and further embodiments described herein may be implemented in a variety of environments. For instance,
Computing device 102 may be any type of stationary or mobile computing device, including a desktop computer (e.g., a personal computer, etc.), a mobile computer or computing device (e.g., a Microsoft® Surface® device, a personal digital assistant (PDA), a laptop computer, a notebook computer, a tablet computer such as an Apple iPad™, a netbook, etc.), a mobile phone (e.g., a cell phone, a smart phone such as a Microsoft Windows® phone, an Apple iPhone, a phone implementing the Google Android™ operating system, a Palm® device, a RIM Blackberry® device, etc.), or other type of mobile device. Server 104 may be implemented in one or more computer systems, including one or more servers which may be any type of computing devices described herein or otherwise known that is/are capable of enabling the corresponding functionality described herein.
Each of storage 106 and storage 108 may include one or more of any type of storage mechanism to store website files and folders, including a magnetic disc (e.g., in a hard disk drive), an optical disc (e.g., in an optical disk drive), a magnetic tape (e.g., in a tape drive), a memory device such as a RAM device, a ROM device, etc., and/or any other suitable type of storage medium.
Computing device 102 and server 104 are communicatively coupled by network 110. Network 110 may include one or more communication links and/or communication networks, such as a PAN (personal area network), a LAN (local area network), a WAN (wide area network), or a combination of networks, such as the Internet. Computing device 102 and server 104 may be communicatively coupled to network 110 using various links, including wired and/or wireless links, such as IEEE 802.11 wireless LAN (WLAN) wireless links, Worldwide Interoperability for Microwave Access (Wi-MAX) links, cellular network links, wireless personal area network (PAN) links (e.g., Bluetooth™ links), Ethernet links, USB links, etc.
Computing device 102 is associated with a corresponding user (a developer) that interacts with the respective computing device as described herein. Computing device 102 is a computing device that may be special purpose or may be used by associated persons for any number and type of functions. Computing device 102 is shown in
As shown in
A developer at computing device 102 may desire to edit a website maintained by server 104 in storage 108. For instance, as shown in
As shown in
After the developer edits one or more files of website copy 130, the edited file(s) may be transmitted back to server 104 to be stored in the original website files. For instance, as shown in
In this manner, in communication system 100, a developer may be enabled to edit a website that is stored remotely, in an efficient manner Elements of communication system 100 shown in
A. Example Embodiments for a Enabling a Developer to Edit a Website
Website development system 112 of
Flowchart 200 begins with step 202. In step 202, a developer is enabled to select a website for editing, the website defined by a plurality of files stored at a server. For example, referring to
In
Referring back to
In step 206, the developer is enabled to edit the files containing code to generate an edited version of the website, including enabling the developer to edit a downloaded copy of a file of the files containing code in the cache when a copy of at least one other file of the files containing code has not yet been downloaded to the cache in response to the call. In an embodiment, website editor 306 of
For example, as shown in
Website editor 306 may enable the developer to select any one or more of the downloaded file copies for editing in any manner. Furthermore, the developer may be enabled to edit one or more of the website file copies even if all of the copies of the files of the website have not yet been downloaded to cache 116.
For instance, in an embodiment, the list of the files of the selected website received from the server may be displayed to the developer by website editor 306, even while the files of the selected website have not completed being downloaded into cache 116. The developer may be enabled to select a website file for editing from the list. This saves the developer time by not having to wait until all website files are downloaded before the developer can begin editing the website.
For example,
In step 402 of flowchart 400, the files of the website are displayed in a list at the computing device. For example, as shown in
In step 404, the developer is enabled to select a file in the list for editing. In an embodiment, website editor 306 displays file list 314 as a list of file names that are selectable. The developer may interact with file list 314 to select a displayed file name for editing in any manner. For instance, the developer may select a file name in file list 314 with a mouse click, by interacting with a keyboard (e.g., using arrow keys to highlight the file name, and selecting the “Enter” key), by touch screen touch, by gesture, by voice command, by eye movement, etc.
For instance,
It is noted that in some cases, when the developer selects a file from a displayed file list, the file may have already been downloaded to cache 116. In such case, the developer may be enabled by website editor 306 to edit the selected file immediately. In another case, the developer may select a file from the displayed file list for editing that has not yet been downloaded to cache 116. In such case, website file synchronization module 304 may expedite the downloading of the selected file to cache 116 so that the developer may begin editing the file.
For instance,
For instance,
In step 802 of flowchart 800, the selected file is determined to not yet have been downloaded to the cache in response to the call. In an embodiment, a developer may interact with file list 314 shown in
In step 804, the download is reordered to prioritize downloading of the selected file over downloading one or more other files of the list. In response to determining that the selected file has not yet been downloaded, website file synchronization module 304 may be configured to reorder the downloading of files of the website in requested website file stream 128 from the server to prioritize the selected file over other files. Website file synchronization module 304 may generate an updated ordering of downloading the files, and may transmit this updated ordering to file transfer interface 114 at the server to cause file transfer interface 114 to transmit the files of the website according to the updated order. In this manner, the selected file may be received sooner for editing.
For instance, in the example of
Note in an embodiment, as copies of files are edited in cache 116 (
In step 902, the edited one or more files in the cache are automatically synchronized with the plurality of files stored at the server. For instance, website file synchronization module 304 of
Thus, file/folder operations (e.g., delete, add new, rename, save) may be performed in a non-blocking fashion, such that they occur in the background while the developer proceeds with their editing without having to wait for each change to be pushed to the remote server. In an embodiment, website synchronization module 304 may check with the server to determine whether any of the files at the server have been changed since the website files were downloaded so that website files that were changed at the server (e.g., by a second developer editing the website) are not overwritten.
Furthermore, by interacting with editor interface 316, by executing a “drag-and-drop” or other file copy or move function, and/or in other manner, one or more new website files may be added by the developer to the website. Any new website files may be stored in cache 116 by website file synchronization module 304, and may be synchronized with the server to be stored with the website files of the website at the server (e.g., an additional file containing code may generated at website development system 300, and may be added to website 118a stored in storage 108, as shown in
Referring back to
Note that prior to enabling the website to be displayed, website display module 308 may cause website editor 306 to save all files being edited to cache 116, and may cause website synchronization module 304 to synchronize the edited website files with the server. In this manner, the latest version of the edited website may be displayed.
It is noted that after the developer closes editing of the website (e.g., closes website development system 300), cache 116 may maintain the copies of the website files. In this manner, the next time the developer decides to edit the website using website development system 300, the website files are already present in cache 116, and therefore do not need to be re-downloaded (a check may be performed with the server to make sure any files that were changed at the server relative to the copies stored in cache 116 are copied to cache 116).
B. Example Embodiments for Assisting a Developer in Editing a Website
As described above, in embodiments, because all files that may need to be edited are downloaded to the local cache, a website development system can use the local files to generate code suggestions (e.g., intelli-sense) to assist the developer in editing the website files. For instance,
For instance, code suggestion module 1002 may provide assistance to developers writing code by presenting lists of possible code “completions” and optionally documentation for those completions, based on a current cursor position within a website file. The presentation of automatically determined code completions is called “autocompletion.” In Microsoft® Visual Studio®, autocompletion is implemented by functionality referred to as IntelliSense®. According to autocompletion, such as is performed by IntelliSense®, marker characters typed in by a programmer are looked for, such as periods, or other separator characters (depending on the programming language). After the programmer types in one of these marker characters immediately after the name of a term having one or more further selectable code completions, a pre-determined, pop-up list of suggested code completions is presented. The list of suggested code completions for a particular website file may be generated by code suggestion module 1002 by analyzing the contents of all of the files of the website stored in cache 116 (
For instance, in an embodiment, code suggestion module 1002 may operate as shown in
In step 1102, code input by the developer to an open file in the cache is compared to contents of at least one other file of the plurality of files in the cache to determine one or more code suggestions. In an embodiment, code suggestion module 1002 may compare code (e.g., text) that the developer inputs to a website file that is open for editing by website editor 1000 to the contents of one or more others of the website files in cache 116 (as well as to other portions of the contents of the open website file itself). The input code portion may be a few characters of code, one or more words of code, or other portions of code. Code suggestion module 1002 may be configured to compare the code portion to the actual contents of the other website files, and/or to pattern signatures generated based on the other website files. For instance, a function X included in the code portion may be compared to the contents of the other files and/or to one or more pattern signatures to determine whether function X is present elsewhere and/or is a pattern signature. If one or more matches is/are found (e.g., an exact match, a match of over a predetermined percentage of code, etc.), code suggestion module 1002 may retrieve one or more code suggestions from a knowledge set repository corresponding to the one or more matching code portions.
Code suggestion module 1002 may perform various forms of analysis when comparing input code to other code and/or pattern signatures to determine whether there are any matches. For instance, in embodiments, code suggestion module 1002 may perform a string comparison (e.g., comparing code letter by letter, etc.), may analyze the text, analyze a language syntax tree, may analyze architectural layering, may analyze information provided by a compiler about semantic meaning, may analyze tracked information as the developer was writing the code to see the form/order/style/timing in which the developer wrote the code to extract corresponding meaning, etc.
In step 1104, the one or more code suggestions are displayed to the developer. As described above, website editor 306 may present the one or more code suggestions in editor interface 316 to the developer to enable the developer to select a code suggestion to be entered into the open website file if desired. The code suggestion(s) may be displayed by website editor 306 in association with the input code, such as in the form of a popup list, or in another form.
In step 1106, the developer is enabled to select a code suggestion of the displayed one or more code suggestions for inclusion in the open file. In an embodiment, a developer can view and select one of the selectable code suggestions displayed by website editor 306, if desired, to be entered into the open website file. The code suggestion may be selected by the developer in any suitable manner, such as by using a mouse click, a key combination, a gesture applied to a touch screen or other gesture interface, voice, etc., to be inserted into the open website file.
Note that further types of assistance in editing website code are enabled in embodiments. For instance, in an embodiment, website editor 306 may be configured to enable the developer to perform a “find all” function when editing a website file. The “find all” function may search for the presence of a search term input by the developer in all of the website files stored in cache 116 (e.g., the files containing code of the website). In this manner, the developer may be enabled to more easily find occurrences of code terms of interest (e.g., classes, variables, other text, etc.) within the website. Furthermore, using the “find all” function, the developer may also be enabled to perform a “replace all” function, where multiple occurrences of a particular code term can be replaced with a desired replacement code term in all of the files of the website in cache 116.
D. Example Computing Device and Server Embodiments
Website development system 112, file transfer interface 114, website development system 300, website selection module 302, website file synchronization module 304, website editor 306, website display module 308, website editor 1000, code suggestion module 1002, flowchart 200, flowchart 400, flowchart 800, step 902, and flowchart 1100 may be implemented in hardware, or hardware combined with software and/or firmware. For example, website development system 112, file transfer interface 114, website development system 300, website selection module 302, website file synchronization module 304, website editor 306, website display module 308, website editor 1000, code suggestion module 1002, flowchart 200, flowchart 400, flowchart 800, step 902, and/or flowchart 1100 may be implemented as computer program code/instructions configured to be executed in one or more processors and stored in a computer readable storage medium. Alternatively, website development system 112, file transfer interface 114, website development system 300, website selection module 302, website file synchronization module 304, website editor 306, website display module 308, website editor 1000, code suggestion module 1002, flowchart 200, flowchart 400, flowchart 800, step 902, and/or flowchart 1100 may be implemented as hardware logic/electrical circuitry.
For instance, in an embodiment, one or more of website development system 112, website development system 300, website selection module 302, website file synchronization module 304, website editor 306, website display module 308, website editor 1000, code suggestion module 1002, flowchart 200, flowchart 400, flowchart 800, step 902, and/or flowchart 1100 may be implemented together in a system-on-chip (SoC). The SoC may include an integrated circuit chip that includes one or more of a processor (e.g., a central processing unit (CPU), microcontroller, microprocessor, digital signal processor (DSP), etc.), memory, one or more communication interfaces, and/or further circuits and/or embedded firmware to perform its functions.
As shown in
Computing device 1200 also has one or more of the following drives: a hard disk drive 1214 for reading from and writing to a hard disk, a magnetic disk drive 1216 for reading from or writing to a removable magnetic disk 1218, and an optical disk drive 1220 for reading from or writing to a removable optical disk 1222 such as a CD ROM, DVD ROM, or other optical media. Hard disk drive 1214, magnetic disk drive 1216, and optical disk drive 1220 are connected to bus 1206 by a hard disk drive interface 1224, a magnetic disk drive interface 1226, and an optical drive interface 1228, respectively. The drives and their associated computer-readable media provide nonvolatile storage of computer-readable instructions, data structures, program modules and other data for the computer. Although a hard disk, a removable magnetic disk and a removable optical disk are described, other types of computer-readable storage media can be used to store data, such as flash memory cards, digital video disks, RAMs, ROMs, and the like.
A number of program modules may be stored on the hard disk, magnetic disk, optical disk, ROM, or RAM. These programs include an operating system 1230, one or more application programs 1232, other program modules 1234, and program data 1236. Application programs 1232 or program modules 1234 may include, for example, computer program logic (e.g., computer program code or instructions) for implementing website development system 112, file transfer interface 114, website development system 300, website selection module 302, website file synchronization module 304, website editor 306, website display module 308, website editor 1000, code suggestion module 1002, flowchart 200, flowchart 400, flowchart 800, step 902, and/or flowchart 1100 (including any step of flowcharts 200, 400, 800, and 1100), and/or further embodiments described herein.
A user may enter commands and information into the computing device 1200 through input devices such as keyboard 1238 and pointing device 1240. Other input devices (not shown) may include a microphone, joystick, game pad, satellite dish, scanner, a touch screen and/or touch pad, a voice recognition system to receive voice input, a gesture recognition system to receive gesture input, or the like. These and other input devices are often connected to processor 1202 through a serial port interface 1242 that is coupled to bus 1206, but may be connected by other interfaces, such as a parallel port, game port, or a universal serial bus (USB).
A display screen 1244 is also connected to bus 1206 via an interface, such as a video adapter 1246. Display screen 1244 may be external to, or incorporated in computing device 1200. In addition to display screen 1244, computing device 1200 may include other peripheral output devices (not shown) such as speakers and printers.
Computing device 1200 is connected to a network 1248 (e.g., the Internet) through an adaptor or network interface 1250, a modem 1252, or other means for establishing communications over the network. Modem 1252, which may be internal or external, may be connected to bus 1206 via serial port interface 1242, as shown in
As used herein, the terms “computer program medium,” “computer-readable medium,” and “computer-readable storage medium” are used to generally refer to media such as the hard disk associated with hard disk drive 1214, removable magnetic disk 1218, removable optical disk 1222, as well as other media such as flash memory cards, digital video disks, RAMs, ROMs, and the like. Such computer-readable storage media are distinguished from and non-overlapping with communication media (do not include communication media). Communication media typically embodies computer-readable instructions, data structures, program modules or other data in a modulated data signal such as a carrier wave. The term “modulated data signal” means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media includes wireless media such as acoustic, RF, infrared and other wireless media. Embodiments are also directed to such communication media.
As noted above, computer programs and modules (including application programs 1232 and other program modules 1234) may be stored on the hard disk, magnetic disk, optical disk, ROM, or RAM. Such computer programs may also be received via network interface 1250, serial port interface 1242, or any other interface type. Such computer programs, when executed or loaded by an application, enable computing device 1200 to implement features of embodiments of the present invention discussed herein. Accordingly, such computer programs represent controllers of the computing device 1200.
The invention is also directed to computer program products comprising software stored on any computer useable medium. Such software, when executed in one or more data processing devices, causes a data processing device(s) to operate as described herein. Embodiments of the present invention employ any computer-useable or computer-readable medium, known now or in the future. Examples of computer-readable mediums include, but are not limited to storage devices such as RAM, hard drives, floppy disks, CD ROMs, DVD ROMs, zip disks, tapes, magnetic storage devices, optical storage devices, MEMs, nanotechnology-based storage devices, and the like.
While various embodiments of the present invention have been described above, it should be understood that they have been presented by way of example only, and not limitation. It will be understood by those skilled in the relevant art(s) that various changes in form and details may be made therein without departing from the spirit and scope of the invention as defined in the appended claims. Accordingly, the breadth and scope of the present invention should not be limited by any of the above-described exemplary embodiments, but should be defined only in accordance with the following claims and their equivalents.