Consolidating glyphs of a font

One or more techniques and/or systems are disclosed for consolidating one or more glyphs of a font. A common contour, comprising a glyph contour that occurs more than once in one or more glyphs of the font, can be identified. A common simple glyph can be created for the identified common contour. A reference to the common simple glyph can replace one or more occurrences of the common contour in the one or more glyphs of the font. Given that the common simple glyph is generally smaller than the common contour, an amount of font related data for the font can be reduced, thus reducing overhead associated with storing and/or presenting the font.

BACKGROUND

In a computing environment, a computer font can comprise a style of characters (e.g., alphanumeric characters) in a particular typeface. Computer fonts can typically be scaled to larger or smaller sizes, bolded and/or italicized while retaining their typeface style. Characteristics of a font can comprise a stroke width (weight), character slope or angle, and character width (e.g., as well as height). Metrics for rendering (e.g., rasterizing) fonts on a display may comprise metadata describing individual glyphs, and/or glyph contours, for respective characters of the font.

SUMMARY

It may be appreciated that a font or rather glyphs of the font (e.g., used to make up characters or portions of characters of the font) may be defined in a number of ways. For example, in some fonts glyphs are primarily defined by one or more mathematical representations (e.g., using x and y coordinates and flags). Additionally, optional instructions (e.g., in the form of “hints”) may also be used in defining such fonts to adjust rendering, for example, so that the font, or rather one or more glyphs or characters of the font, appear as desired when rendered at different sizes. In other fonts, for example, glyphs may be defined using, among other things, tables and/or flags. Regardless of the manner of defining or representing a font, it can be appreciated that repeated occurrences of data within the representation(s) can lead to additional overhead associated with the font (e.g., additional storage requirements, additional computational resource requirements, etc.).

Accordingly, one or more techniques and/or systems are disclosed for reducing an amount of glyph-related data associated with a font. For example, an amount of glyph data contained in one or more tables for a font can be reduced, while a functional equivalence of this font data can be maintained (e.g., so that resulting characters of the font, composed of glyphs, appear as desired when rendered). As provided herein, reduction of font data is achieved through consolidation. For example, glyphs of a font can comprise contours that may be repeated in several places in the font (e.g., where a contour may comprise an entire glyph or a portion of a glyph). Accordingly, at least some of these “common” contours may be replaced in one or more glyphs with merely a reference to a common simple glyph that has been created for the common contour. Replacing one or more occurrences of the common contour with the reference, for example, can reduce an overall amount of data associated with the font (e.g., reducing a file size file associated with the font). It may be appreciated that although reference is at times made herein to consolidation of, consolidating and/or the like a glyph of a font, that it is generally (common) contours of a font that are consolidated (e.g., where a contour may comprise an entire glyph in some instances, or rather the glyph is comprised of merely a single contour). It may also be appreciated that, at times, a glyph may comprise an entire character of the font, or rather the character is comprised of merely a single glyph, and/or that a character can map to multiple glyphs (e.g. a or a are the same character but where one instance of the character is comprised by an italicized glyph and the other instance of the character is comprised by an unitalicized glyph). Additionally, it may be appreciated that the term “character” and/or the like may be regarded in the art as comprising a semantic meaning while the term “glyph” is a pictorial representation of a character. For example, the letter B is a character that has the semantic meaning of the /b/ phonetic sound and there are several potential glyphs (e.g., where respective glyphs are regarded as having a one-to-one mapping to different characters) that can represent that character, including B, b, or even the rebus picture of a bee. Given that glyphs may be known in the art to map to semantic meanings, a conventional definition of “glyph” and/or the like may regard the instant application as breaking glyphs down into what might be called “sub-glyphs” and operating on such “sub-glyphs”, where such “sub-glyphs” do not pertain to semantic meaning but instead pertain to basic graphic elements that make up a glyph outline. Nevertheless, the term “sub-glyph” and/or the like is not used herein. Rather, contours are referenced herein to provide for an entity that allows graphical elements of a glyph to be broken down (further) into sub-parts that may not necessarily map directly to entire/full characters.

In one embodiment of consolidating one or more glyphs of a font, a common simple glyph can be created for a common contour that is identified in the one or more glyphs of the font. Further, the identified common contour can be replaced in the one or more glyphs with a reference to the created common simple glyph, which can provide for consolidation of the one or more glyphs in the font.

DETAILED DESCRIPTION

FIG. 1is a diagram illustrating an example embodiment100of a character of a font (e.g., percentage sign or symbol), where the character comprises, or is comprised of, one or more glyphs of the font, and where respective glyphs may be comprised of one or more contours. In one example, the character may be regarded as comprising of a single glyph that comprises an outline of the character, and that is typically filled in with a chosen color when rendered for display. In this example embodiment100, the glyph may be regarded as comprising five contours102,104,106,108,110.

A glyph contour (e.g., contour of a glyph) can comprise a closed line that indicates a shape comprising a portion of the glyph. For example, a first glyph contour102is a large stylized circle, comprising the outer portion of the upper “o” portion of the percentage sign. Further, in this example, the first glyph contour102is similar to a fourth glyph contour108. Additionally, a second glyph contour104, comprising an inner portion of the upper “o” portion of the percentage sign is similar to a fifth glyph contour110. A third glyph contour is an outline of a “slash”, comprising the center portion of the percentage sign. Moreover, the first glyph contour102, second glyph contour104, fourth glyph contour108and fifth glyph contour110may be similar or comparable should the second glyph contour104and fifth glyph contour110be normalized, the first glyph contour102and fourth glyph contour108be normalized and/or the first glyph contour102, second glyph contour104, fourth glyph contour108and fifth glyph contour110be normalized (relative to one another). In some fonts, respective glyph contours are described by points (e.g., x and y coordinates in coordinate space), indicating a location of the contour, and lines between the points, indicating the outline of the contour (e.g., described by flags at respective points).

FIG. 2is a flow diagram illustrating an exemplary method200for reducing an amount of data associated with a font by consolidating one or more glyphs, or rather common contours, of a font. The exemplary method200begins at202and involves identifying a common contour in one or more glyphs of the font, at204. In one embodiment, the common contour can comprise a same glyph contour that is identified at least twice in the one or more glyphs of the font. As an example, inFIG. 1, the second glyph contour104and the fifth glyph contour110may comprise a first common contour. Further, inFIG. 1, the first glyph contour102and the fourth glyph contour108may comprise a second common contour.

At206, a common simple glyph is created for an identified common contour. For example, a common simple glyph can comprise a definition, description, etc. (e.g., in a font programming language, mathematical representation, etc.) corresponding to a common contour identified in one or more locations in the font. In one embodiment, the description for the common simple glyph may be copied from a glyph comprising the common contour. At208, one or more occurrences of the common contour in the one or more glyphs are replaced with a reference to the common simple glyph, in order to consolidate the one or more glyphs in the font. In one example, creating the common simple glyph may merely comprise replacing occurrences of the common contour with a reference to an instance of the common contour (that is not replaced with a reference). For example, merely one instance of the common contour (or rather definitions therefore) may be maintained while other instances of the common contour (definitions therefore) are replaced with a reference to the common contour (definitions therefore). In this manner, a separate set of definitions for the common simple glyph need not be created, yet the other occurrences of the common contour still have something to reference.

Having replaced the common contour in the one or more glyphs with a reference to the common simple glyph, the exemplary method200ends at210.

FIG. 3is a flow diagram illustrating an example embodiment300where one or more portions of one or more techniques described herein may be implemented. At302, a font can be scanned for glyphs. As an illustrative example, a first contour can be identified in the font and the first contour can be compared against remaining contours in the font. Further, in this example, a second contour can be identified in the font and compared against the remaining contours in the font (e.g., and a third contour can be compared, and a forth contour can be compared, etc.). In one embodiment, the comparing of a contour to other contours in the font can comprise using a brute force search methodology, however, the techniques and systems described herein are not limited to any particular common contour search technique or system, and as such may comprise other search techniques in addition to or in alternative to brute force searching.

At304, one or more common contours can be identified in one or more glyphs of the font. In one embodiment, the common contour can comprise a same glyph contour that is identified at least twice in the one or more glyphs of the font. That is, for example, when the first identified contour is compared with the other contours in the font, a same version of the contour is found (e.g., in a same glyph and/or in another glyph(s)). In one embodiment, identifying the common contour can comprise identifying a first instance of the same glyph contour in a first glyph and identifying a second instance of the same glyph contour in the first glyph and/or a second glyph, where the same glyph contour may be defined by a simple glyph in the font.

As an illustrative example,FIGS. 4A and 4Billustrate example embodiments400,450,460of glyphs of a font. In the example glyph400, a first instance of a first glyph contour402can be compared with the other glyph contours (e.g., second glyph contour404, third glyph contour406, fourth glyph contour408, fifth glyph contour410) in the glyph400(e.g., and remaining glyph contours in the font), and a second instance of the same glyph contour can be found at the fourth glyph contour408. Further, in this example, a first instance of the second glyph contour404can be compared with the other glyph contours in the glyph400(e.g., and remaining glyph contours in the font), and a second instance of the same glyph contour can be found at the fifth glyph contour410. As another example, the example glyph450may comprise first glyph contour452and second glyph contour454and the exemplary glyph460may comprise first glyph contour464and second glyph contour462. A first instance of the second glyph contour454, in the example glyph450, can be compared with the other glyph contours in the font, and a second instance of the same glyph contour can be found at the second glyph contour462in the example glyph460.

In one embodiment, identifying the common contour can comprise normalizing the respective identified contours involved in the comparison. As an example, two contours involved in a comparison may comprise a same number of points, a same position (e.g., in coordinate space) of the points, a same order of the points and/or a same type of flags. However, in this example, the compared contours may have different scales and/or translation factors (e.g., transformations, such as mirroring, reversal, rotating, enlarging, reducing, etc.). As an illustrative example, inFIG. 4A, the first glyph contour402, second glyph contour404, fourth glyph contour408and fifth glyph contour410may be comparable but for different scale(s) and/or translation(s), for example.

Accordingly, it may be appreciated that a first glyph contour and second glyph contour being compared (e.g., to identify the common contour) can be normalized for comparison, such that the first and second glyph contours comprise a same scale factor (e.g., size) and translation (e.g., position and/or rotation). In one embodiment, identifying the common contour can comprise determining if the first normalized glyph contour and the second normalized glyph contour respectively comprise a same number of points. Further, identifying the common contour can comprise determining if the first normalized glyph contour and the second normalized glyph contour respectively comprise a same position of points. Also, identifying the common contour can comprise determining if the first normalized glyph contour and the second normalized glyph contour respectively comprise a same order of points, and/or a same position and a same order of points. Additionally, identifying the common contour can comprise determining if the first normalized glyph contour and the second normalized glyph contour respectively comprise a same type of one or more flags.

As an illustrative example, inFIG. 4A, the respective contours402,404,406,408,410, of the example glyph400, comprises points412that can indicate a location in coordinate space of the contour. In this example, the first glyph contour402comprises a same number of points412(e.g., twelve) as the second glyph contour404, fourth glyph contour408and fifth glyph contour410. Further, the points412of the first glyph contour402are located in a same relative position as those of the fourth glyph contour408when normalized for translation, and as those for the second glyph contour404and fifth glyph contour410when normalized for scaling and translation for example. While not illustrated, the respective compared contours can comprise the same flags (e.g., describing a curve and/or direction of the contour line) at the respective points412.

In one embodiment, identifying the common contour can comprise determining if the first normalized glyph contour and the second normalized glyph contour respectively comprise a same ordering of points. As an illustrative example, inFIG. 4B, the example glyph450comprises the first glyph contour452and the second glyph contour454, respectively comprising on-line points456(e.g., points intersected by the line of the contour) and off-line points458(e.g., points not intersected by the line of the contour). In this embodiment, the points of the first glyph contour452can be arranged in a first particular order and the points of the second glyph contour454contour can be arranged in a second particular order, and when the first glyph contour452and the second glyph contour454are normalized relative to one another, the first and second particular orders are the same.

FIG. 4Bfurther illustrates an example of how contours can be compared to identify a common contour. The second glyph contour454, of the example glyph450, comprises on-line points456and off-line points458that correspond to the on-line points466and off-line points468of the second glyph contour462of the example glyph460(e.g., where an on-line point generally refers to a point through which a line of the glyph passes and where an off-line point generally refers to a point through which a line of a glyph does not pass and is used to represent Bézier curves). In this example, the glyph450and glyph460have been normalized (e.g., transformations of the contour are normalized, comprising scaling and/or translation), such that they can be appropriately compared. Further, in this example, while the first glyph contour452of the example glyph450may have similar portions to a first glyph contour464of the example, glyph460, the respective on-line and off-line points for the different glyph contours do not correspond such that a comparison may not be justified despite normalization, transformation, etc.

In one embodiment, an identified common contour may be used to identify the same common contour in a different font. As an example, a brute force searching method can utilize significant computing time and/or resources when respective contours of a font are individually identified and compared against all the other contours in the font. In this embodiment, those contours of a first font that are found to be common (e.g., found in more than one location in one or more of the glyphs of the first font), for example, may be used as a starting point for comparing against contours in a second font (e.g., as it may be likely that the common contour may also be common in another font). In this way, for example, computing time and/or resources may be reduced by reducing a need to identify contours to use for comparison.

Returning toFIG. 3, at306, an evaluation can be made of a resulting glyph consolidation when using the one or more identified common contours. For example, when consolidating the glyphs of a font (e.g., substituting one or more occurrences of a common contour with a reference to a common simple glyph), additional glyphs may need to be created to accommodate the common contour, and/or to accommodate the glyph that has a reference replacing the common contour, and additional computing overhead may resultantly be incurred when performing the replacement and/or execution of the font, for example.

In one embodiment, when consolidating the one or more glyphs of the font, it can be determined whether a desired consolidation threshold is met. Further, in this embodiment, the common contour can be replaced in the one or more glyphs with the reference to the common simple glyph merely if the desired consolidation threshold is met. In one embodiment, determining whether the desired consolidation threshold is met can comprise identifying a reduction of stored data for executing the font and/or identifying a computing performance cost for consolidating the one or more glyphs of the font.

As an illustrative example, inFIG. 4A, a space needed to represent the respective contours402,404,406,408,410may be illustrated below:

In this example, during consolidation, it may be determined that first glyph contour402and fourth glyph contour408comprise a first common contour and that second glyph contour404and fifth glyph contour410comprise a second common contour (e.g., in the absence of a scaling translation). A first common simple glyph (e.g., using 18 bytes of storage) can comprise first glyph contour402and fourth glyph contour408, and a second common simple glyph (e.g., using 18 bytes of storage) can comprise second glyph contour404and fifth glyph contour410. The percent sign glyph400can be converted to a complex glyph comprising references to the first and second common simple glyphs (e.g., to represent what previously was defined for402,404,408,410), as well as info. for the non-common third glyph contour406. In this example, performing the consolidation can be contingent on an overall space savings of the font and/or additional overhead required to perform consolidation operations.

In this example, a new glyph may need to be created for the non-common third glyph contour406, comprising the slash of the percentage sign. The third glyph contour406may, for example, be represented as a third simple glyph using twenty five bytes of storage. In this example, even though the storage needed for the non-common third glyph contour406increased (e.g., from 15 to 25), the new composite glyph merely needs sixty-one bytes of storage (e.g., 18+25+18=61), whereas the contours of the percent sign glyph400described above, needed one-hundred and fifty-five bytes of storage (e.g., 30+40+15+30+40=155). It will be appreciated that the referenced storage numbers are merely examples, and may not represent actual font data sizes.

Returning toFIG. 3, at308, if there is not a net reduction of size (e.g., the consolidation does not meet a desired file size reduction for the font), and/or the overhead cost (e.g., additional storage, computing time, and/or computing resources) does not meet a desired threshold, at310, the consolidation may not be performed, at312. However, if there is a net reduction (YES at308), and the overhead cost meets the desired threshold (YES at310), the glyph consolidation can be performed using the one or more common contours, at314.

FIG. 5is a flow diagram illustrating an example embodiment500where one or more portions of one or more techniques described herein may be implemented. At502it can be determined whether a common simple glyph threshold is met. As an example, a font may comprise a limit for a number of glyphs (e.g., only allow a certain number of glyphs). In this example, the limit to the number of glyphs may limit a number of common simple glyphs that can be created for different identified common contours550(e.g., adding another common simple glyph may push the number of glyphs over the limit). Accordingly, if the simply glyph threshold is met (YES at502), one or more common contours can be prioritized at504. In one embodiment, a first common contour may be prioritized (e.g., for creation of a corresponding common simple glyph) over a second common contour (e.g., for which a corresponding common simple glyph may not be created). For example, if the first common contour occurs substantially more times in a font than the second common contour, then the first common contour may be prioritized over the second common contour because that would likely lead to a greater file size reduction, for example, because more lightweight references to a common simple glyph would be included in the font. Moreover, one or more existing common simple glyphs may be removed from the font to make room for one or more new common simple glyphs (e.g., where the new common simple glyphs provide a greater reduction in font related data than the existing common simple glyphs).

If the simple glyph threshold is not met (NO at502) (e.g., and/or for one or more common contours from504), a common simple glyph552can be created for a common contour550(e.g., creating a first common simple glyph for a first common contour, a second common simple glyph for a second common contour, etc.). As an example, creating a common simple glyph552can comprise copying a definition(s) for the common contour and creating a new simple glyph comprising the copied definition(s). It may be appreciated that a common simple glyph may be reused, recycled, etc. by other fonts where the corresponding common contour is identified in the other fonts.

At508, one or more glyphs554of the font that comprise the common contour can be identified. This may include glyphs from which the common contour was initially identified as well as glyphs recently identified as comprising the common contour based upon a new scan of the font, for example.

In one embodiment, the identified one or more glyphs554that comprise the common contour can be converted to respective complex glyphs that comprise a reference to the common simple glyph created at506. In one embodiment, replacing the common contour in the one or more glyphs554with a reference to the common simple glyph552can comprise creating, at510, a replacement simple glyph556for a non-common contour of a glyph (of the one or more glyphs554) comprising the common contour. As an illustrative example, inFIG. 4A, the third glyph contour406may comprise a non-common contour (e.g., the slash symbol of the percentage sign). In this example, a replacement simple glyph can be created for this non-common third glyph contour406, such as by copying one or more definitions describing the non-common third glyph contour406into a new simple glyph.

At514, a replacement complex glyph can be created, which can be used, for example, to replace a glyph comprising the common contour. Such a replacement complex glyph may comprise a reference to the common simple glyph552(e.g., or one or more corresponding references to one or more common simple glyphs) and a reference to the replacement simple glyph556. As an illustrative example, inFIG. 4A, a first common simple glyph may be created for the first glyph contour402and the fourth glyph contour408, and a second common simple glyph may be created for the second glyph contour404and the fifth glyph contour410. Further, in this example, a replacement simple glyph may be created for the third glyph contour408(non-common contour). In this embodiment, the newly created complex glyph can comprise a reference to the first common simple glyph, a reference to the second common simple glyph, and a reference to the replacement simple glyph. Thus, the percentage symbol may merely be represented by three relatively lightweight references rather than five separate instructions sets (e.g., for402,404,406,408and410).

In one embodiment, the replacement complex glyph may also comprise a reference to one or more transformations for a common simple glyph. As an example, a transformation for a simple glyph can comprise a scaling factor and/or a translation factor. In this embodiment, a size (scale) and/or a location/rotation (translation) of the common contour may be different between glyphs comprising the common contour. Therefore, in this example, a scaling factor reference may be associated with the reference to the common simple glyph and/or a translation factor may be associated with the reference to the common simple glyph, such that a size and position/rotation of the common contour is appropriate for the glyph when rendered.

At516, inFIG. 5, the glyph comprising the common contour can be replaced with the replacement complex glyph in the font. As an example, the replacement complex glyph (e.g., three references for percentage symbol inFIG. 4A) can take the place of the glyph that comprised the common contour in the font to achieve desired savings.

FIG. 6is a component diagram illustrating an exemplary system600for consolidating one or more glyphs, or rather common contours, of a font to reduce an amount of font data for the font. A computer-based processor602is configured to process data for the system and is operably coupled with a common contour identification component604. The common contour identification component604is configured to identify a common contour in one or more glyphs of the font650. For example, the one or more glyphs of the font650can comprise contours, where contours of a glyph may make up one or more portions of an outline of the glyph. Further, the one or more glyphs of the font650may comprise a contour that is the same or that occurs in more than one location of the font, and thus may be regarded as a common contour. In this example, the common contour identification component604can scan glyphs of the font to identify one or more common contours.

In the exemplary system600, a contour replacement component606is operably coupled with the processor604, and is configured to replace one or more occurrences of an identified common contour with a reference to a common simple glyph created for the identified common contour. For example, a common simple glyph can be created for the identified common contour (e.g., and other common simple glyphs can be created for other commonly occurring contours). In this example, the contour replacement component606can create one or more consolidated font glyphs652by replacing occurrences of the common contour with a reference to the common simple glyph. In this way, for example, an amount of font related data for the font may be reduced.

FIG. 7is a component diagram illustrating an example embodiment700where one or more systems described herein may be implemented. In this example700, an extension ofFIG. 6is provided and thus description of elements, components, etc. described with respect toFIG. 6may not be repeated for simplicity. In this embodiment, common contour(s)754can comprise a same glyph contour that is identified in a plurality of locations in the one or more glyphs of a font750. As an example, the same contour may be identified more than once in a first glyph of the font and/or one or more times in second glyphs of the font.

In the example embodiment700, a consolidation determination component712can be configured to determine whether a desired consolidation threshold is met when consolidating the one or more glyphs of the font750. In one embodiment, the contour replacement component606can be configured to replace a common contour754merely if the desired consolidation threshold is met. For example, if the consolidation determination component712determines that a threshold amount of storage space is saved and/or a threshold overhead cost is not exceeded, for one or more of the common contours754, then one or more font glyphs can be consolidated752.

A simple glyph creation component710can be configured to create a common simple glyph for a common contour754. Further, a replacement glyph creation component714can be configured to create a non-common contour glyph (e.g., replacement simple glyph) for a non-common contour of a glyph identified as comprising the common contour754. For example, a font glyph750, which comprises the identified common contour754, may also comprise one or more non-common contours. In this example, the replacement glyph creation component714can create a new/replacement simple glyph that comprises the non-common contour(s).

The replacement glyph creation component714can also be configured to create a replacement complex glyph that comprises a first reference to the common simple glyph and a second reference to the non-common contour glyph. For example, the replacement complex glyph may be used by the contour replacement component606to replace a corresponding font glyph750in order to consolidate font glyphs. In this example, instead of comprising the glyph instructions of the original font glyph750, the replacement complex glyph may merely comprise appropriate references to the common simple glyph and the non-common contour glyph.

In the example embodiment700, the common contour identification component604comprises a normalization component716that may be configured to normalize a first glyph contour and a second glyph contour so that the first glyph contour can be compared with the second glyph contour. For example, the common contour identification component604may compare contours of the glyphs of the font to identify the common contours (e.g., comprising a same number or points, point locations, ordering of points and/or point flags, etc.). However, the contours used for identification may not comprise a same scaling and/or translation factor (e.g., transformations). In this example, the normalization component716can normalize the first and second glyph contours such that they comprise a same scaling factor and/or a same translation factor, for a more appropriate comparison. For example, a mirroring and/or reversal type of transformation(s), among others, may be performed to allow for the comparison.

Still another embodiment involves a computer-readable medium comprising processor-executable instructions configured to implement one or more of the techniques presented herein. An exemplary computer-readable medium that may be devised in these ways is illustrated inFIG. 8, wherein the implementation800comprises a computer-readable medium808(e.g., a CD-R, DVD-R, or a platter of a hard disk drive), on which is encoded computer-readable data806. This computer-readable data806in turn comprises a set of computer instructions804configured to operate according to one or more of the principles set forth herein. In one such embodiment802, the processor-executable instructions804may be configured to perform a method, such as at least some of the exemplary method200ofFIG. 2, for example. In another such embodiment, the processor-executable instructions804may be configured to implement a system, such as at least some of the exemplary system600ofFIG. 6, for example. Many such computer-readable media may be devised by those of ordinary skill in the art that are configured to operate in accordance with the techniques presented herein.

FIG. 9illustrates an example of a system900comprising a computing device912configured to implement one or more embodiments provided herein. In one configuration, computing device912includes at least one processing unit916and memory918. Depending on the exact configuration and type of computing device, memory918may be volatile (such as RAM, for example), non-volatile (such as ROM, flash memory, etc., for example) or some combination of the two. This configuration is illustrated inFIG. 9by dashed line914.

In other embodiments, device912may include additional features and/or functionality. For example, device912may also include additional storage (e.g., removable and/or non-removable) including, but not limited to, magnetic storage, optical storage, and the like. Such additional storage is illustrated inFIG. 9by storage920. In one embodiment, computer readable instructions to implement one or more embodiments provided herein may be in storage920. Storage920may also store other computer readable instructions to implement an operating system, an application program, and the like. Computer readable instructions may be loaded in memory918for execution by processing unit916, for example.

Device912may also include communication connection(s)926that allows device912to communicate with other devices. Communication connection(s)926may include, but is not limited to, a modem, a Network Interface Card (NIC), an integrated network interface, a radio frequency transmitter/receiver, an infrared port, a USB connection, or other interfaces for connecting computing device912to other computing devices. Communication connection(s)926may include a wired connection or a wireless connection. Communication connection(s)926may transmit and/or receive communication media.

Device912may include input device(s)924such as keyboard, mouse, pen, voice input device, touch input device, infrared cameras, video input devices, and/or any other input device. Output device(s)922such as one or more displays, speakers, printers, and/or any other output device may also be included in device912. Input device(s)924and output device(s)922may be connected to device912via a wired connection, wireless connection, or any combination thereof. In one embodiment, an input device or an output device from another computing device may be used as input device(s)924or output device(s)922for computing device912.

Those skilled in the art will realize that storage devices utilized to store computer readable instructions may be distributed across a network. For example, a computing device930accessible via network928may store computer readable instructions to implement one or more embodiments provided herein. Computing device912may access computing device930and download a part or all of the computer readable instructions for execution. Alternatively, computing device912may download pieces of the computer readable instructions, as needed, or some instructions may be executed at computing device912and some at computing device930.