Detailed Description
Embodiments of the present disclosure will be described in more detail below with reference to the accompanying drawings. While certain embodiments of the present disclosure have been shown in the accompanying drawings, it is to be understood that the present disclosure may be embodied in various forms and should not be construed as limited to the embodiments set forth herein, but are provided to provide a more thorough and complete understanding of the present disclosure. It should be understood that the drawings and embodiments of the present disclosure are for illustration purposes only and are not intended to limit the scope of the present disclosure.
It should be understood that the various steps recited in the method embodiments of the present disclosure may be performed in a different order and/or performed in parallel. Furthermore, method embodiments may include additional steps and/or omit performing the illustrated steps. The scope of the present disclosure is not limited in this respect.
The term "including" and variations thereof as used herein are intended to be open-ended, i.e., including, but not limited to. The term "based on" is based at least in part on. The term "one embodiment" means "at least one embodiment"; the term "another embodiment" means "at least one additional embodiment"; the term "some embodiments" means "at least some embodiments. Related definitions of other terms will be given in the description below.
It should be noted that the terms "first," "second," and the like in this disclosure are used merely to distinguish one device, module, or unit from another device, module, or unit, and are not intended to limit the order or interdependence of the functions performed by the devices, modules, or units.
It should be noted that references to "one", "a plurality" and "a plurality" in this disclosure are intended to be illustrative rather than limiting, and those of ordinary skill in the art will appreciate that "one or more" is intended to be understood as "one or more" unless the context clearly indicates otherwise.
The names of messages or information interacted between the various devices in the embodiments of the present disclosure are for illustrative purposes only and are not intended to limit the scope of such messages or information.
The present disclosure provides a method, apparatus, electronic device, and computer readable medium for detecting dependency collision, which aims to solve the above technical problems in the prior art.
The following describes the technical solutions of the present disclosure and how the technical solutions of the present disclosure solve the above technical problems in detail with specific embodiments. The following embodiments may be combined with each other, and the same or similar concepts or processes may not be described in detail in some embodiments. Embodiments of the present disclosure will be described below with reference to the accompanying drawings.
The dependency conflict detection method provided by the embodiment of the disclosure can be applied to a terminal or a server. As will be appreciated by those skilled in the art, the "terminal" as used herein may be a cell phone, tablet computer, PDA (Personal DIGITAL ASSISTANT ), MID (Mobile INTERNET DEVICE, mobile internet device), etc.; the "server" may be implemented as a stand-alone server or as a server cluster composed of a plurality of servers.
The embodiment of the disclosure provides a method for detecting a dependency conflict, which can be applied to a terminal described in the application scenario, as shown in fig. 1, and the method includes:
In step S101, if the update of the SDK version of the target software development kit is detected, a target application program for applying the target SDK is determined.
The terminal or the server for performing the dependency collision detection may receive a version update prompt for the target SDK, or may receive an update version of the target SDK sent by the development terminal.
Specifically, the target Application program of the Application target SDK is a host APP (Application) corresponding to the target SDK.
In step S102, the direct dependent SDK of the target application is acquired.
The direct dependent SDK is the first-level dependent SDK of the target application program, namely the SDK with the direct dependent relationship.
Specifically, the direct dependent SDK of the target application may be obtained by pulling the dependent data of the latest build package of the target application.
Step S103, obtaining the association dependent SDK with the dependency relationship with the direct dependent SDK from a preset dependency relationship database.
The preset dependency relationship database may store a plurality of dependency relationships between different SDKs, that is, directly dependent SDKs and indirectly dependent SDKs including each SDK.
Specifically, the association-dependent SDKs include SDKs directly dependent on the SDKs and SDKs indirectly dependent on the SDKs.
As shown in fig. 2, for APP in fig. 2, B and C are directly dependent SDKs belonging to the APP; d and E belong to the direct dependent SDK of B and belong to the indirect dependent SDK of APP.
In particular, the dependency database may be a Maven repository, which in Maven's terminology is a location. The Maven repository is a third party repository of dependencies in the project, and the location where this repository is located is called the repository, i.e. the Maven repository may include dependencies between a variety of different SDKs.
Step S104, based on the association dependent SDK and the direct dependent SDK, the dependency conflict of the target SDK is detected.
Specifically, whether there is a dependency conflict for the target SDK may be determined according to different versions of the target SDK in the association-dependent SDK and the direct-dependent SDK, and a process of specifically detecting the dependency conflict of the target SDK will be described in detail below.
In the above embodiment, if the update of the target SDK version is detected, the target application program applying the target SDK is determined, the direct dependent SDK of the target application program and the association dependent SDK are obtained, and based on the association dependent SDK and the direct dependent SDK, the dependency conflict of the target SDK is detected, so that when the update of the target SDK version is detected, it can be determined whether the application program applying the target SDK has the dependency conflict, and APP crash caused by the update of the target SDK version is effectively avoided.
The specific procedure of detecting the dependency conflict of the target SDK will be further described below with reference to the drawings and embodiments.
In one possible implementation manner provided in the embodiments of the present disclosure, as shown in fig. 3, the detecting a dependency conflict of the target SDK based on the association dependent SDK and the direct dependent SDK in step S104 may include:
In step S410, it is determined whether the target SDK belongs to the direct dependent SDK of the target application.
Specifically, the direct dependent SDK of the target application may be obtained, and the packet name or identifier corresponding to the target SDK may be compared with the packet name or identifier of the direct dependent SDK to determine whether the target SDK belongs to the direct dependent SDK of the target application.
And step S420, if yes, detecting the dependence conflict of the target SDK based on the association dependence SDK.
Specifically, only if the target SDK belongs to the direct dependent SDK of the target application program, namely the first-level dependent SDK, the condition that the new version of the SDK is accessed to the target application program can be simulated.
In the implementation process, if the target SDK belongs to the direct dependent SDK of the target application program, it is only necessary to determine whether the association dependent SDK further includes other versions for the target SDK.
Specifically, the detecting, based on the association-dependent SDK, the dependency conflict of the target SDK in step S420 may include:
The query is dependent on whether there is at least one target SDK in the SDK that is different from the other versions to be updated.
The dependency conflict detection method in the present embodiment will be described below with reference to examples.
In one example, the identification of the SDK is represented by a letter, the version number of the one SDK is represented by a number, and the same letter is the same SDK. If the update of the version of the target SDK C is detected, determining a target application program for applying the target SDK, namely an APP shown in FIG. 4; acquiring a direct dependent SDK of a target application program, namely acquiring B1, F1 and C1 shown in FIG. 4; acquiring an association-dependent SDK with a dependency relationship with the direct-dependent SDK, namely respectively acquiring the SDKs with the association relationship with B1, F1 and C1, and acquiring B1 direct-dependent C2, C2 direct-dependent D1 and E2 and F1 direct-dependent E1 shown in FIG. 5; it is determined whether there are other versions of C, D1, E2, and E1, i.e., C2 is confirmed, and thus there is a dependency conflict.
The embodiment of the disclosure provides a possible implementation manner, and the dependency conflict detection method may further include:
(1) If at least one target SDK different from other versions of the version to be updated exists in the associated dependent SDK, determining that the target SDK has a dependent conflict;
(2) A dependency conflict hint is issued for the target SDK.
Specifically, if at least one package name exists in the associated dependent SDK or the SDK with the same identification as the target SDK is queried, determining the version number of the queried SDK, and if the version number of the SDK is different from the version number to be updated, determining that the target SDK has the dependency conflict.
As shown in fig. 5, if C is queried from the association dependent SDK in fig. 5, and the version number of C is 2, and the version to be updated is C3, there is a dependency conflict.
In the implementation process, the dependency conflict can be prompted in different forms such as a message prompting mode, a sound prompting mode and the like, and the specific prompting form is not limited herein.
The embodiment of the disclosure provides a possible implementation manner, and the dependency conflict detection method may further include:
(1) If the target SDK which is different from other versions of the version to be updated exists in the associated dependent SDK, determining the version number of the target SDK which is different from other versions of the version to be updated;
(2) And if the determined version number is not compatible with the version to be updated, determining that the target SDK has a dependency conflict.
Specifically, it is possible that the version to be updated and the existing version are compatible, so it is necessary to determine whether other versions for the target SDK exist in the association dependent SDK first, and determine whether the version number is compatible with the version number to be updated to determine the dependency conflict.
The embodiment of the disclosure provides a possible implementation manner, and the dependency conflict detection method may further include:
(1) Based on the association dependent SDK and the direct dependent SDK, constructing a dependency relationship tree aiming at the target application program;
(2) Target SDKs of versions other than the version to be updated are marked in the dependency tree.
Specifically, a dependency tree of the target application program may be formed according to the association dependent SDKs and the direct dependent SDKs, and the dependency tree may include all SDKs having a dependency relationship with the application program.
As shown in fig. 6, in one example, the direct dependent SDKs shown in fig. 4 and the associated dependent SDKs shown in fig. 5 may be combined to form a dependency tree as shown in fig. 6, wherein the direct dependent SDKs of the APP include B1, F1, and C1; b1 directly depends on C2, C2 directly depends on D1 and E2, and F1 directly depends on E1; as shown in fig. 7, if it is detected whether there are other versions of C, i.e., confirming that there is still C2, among C2, D1, E2, and E1, C2 and C1 may be marked.
In order to more clearly illustrate the dependency collision detection method of the present application, further description will be made below with reference to examples.
As shown in fig. 8, in one example, the dependency conflict method of the present application may include the steps of:
1) Detecting that the target SDK issues a new version, and acquiring the dependent data of a target application program applying the target SDK; namely, obtaining the dependent data of the host APP; the dependent data includes a direct dependent SDK and an associated dependent SDK of the target application;
2) Judging whether the non-primary dependence of the host APP has SDK dependence of other versions or not; judging whether the SDK of other versions exists in the association-dependent SDK or not;
3) If the dependency conflict exists, the dependency conflict is determined, a dependency conflict prompt is sent out, and a developer is informed of the occurrence of the dependency conflict.
According to the dependency conflict detection method, if the target SDK version update is detected, the target application program applying the target SDK is determined, the direct dependent SDK of the target application program and the associated dependent SDK are obtained, the dependency conflict of the target SDK is detected based on the associated dependent SDK and the direct dependent SDK, whether the application program applying the target SDK has the dependency conflict or not can be determined when the target SDK version update is carried out, and APP breakdown caused by the target SDK version update is effectively avoided.
The embodiment of the present disclosure provides a dependency collision detection apparatus, as shown in fig. 9, the dependency collision detection apparatus 90 may include: a determination module 901, a first acquisition module 902, a second acquisition module 903, and a detection module 904, wherein,
A determining module 901, configured to determine a target application program for applying the target SDK if the update of the version of the SDK of the target software development kit is detected;
a first obtaining module 902, configured to obtain a direct dependent SDK of the target application;
a second obtaining module 903, configured to obtain an association dependent SDK having a dependency relationship with the direct dependent SDK from a preset dependency relationship database;
A detection module 904, configured to detect a dependency conflict of the target SDK based on the association dependent SDK and the direct dependent SDK.
One possible implementation is provided in the embodiments of the present disclosure, where the association-dependent SDKs include SDKs directly dependent on the SDK and SDKs indirectly dependent on the SDK.
The embodiment of the disclosure provides a possible implementation manner, and the detection module is specifically used for, when detecting the dependency conflict of the target SDK based on the association dependent SDK and the direct dependent SDK:
determining whether the target SDK belongs to a direct dependent SDK of the target application program;
if yes, based on the associated dependent SDK, the dependent conflict of the target SDK is detected.
The embodiment of the disclosure provides a possible implementation manner, and the detection module is specifically configured to, when detecting a dependency conflict of a target SDK based on an association dependent SDK:
The query is dependent on whether there is at least one target SDK in the SDK that is different from the other versions to be updated.
The embodiment of the disclosure provides a possible implementation manner, which further comprises a prompting module, configured to:
If at least one target SDK different from other versions of the version to be updated exists in the associated dependent SDK, determining that the target SDK has a dependent conflict;
a dependency conflict hint is issued for the target SDK.
The embodiment of the disclosure provides a possible implementation manner, and the prompting module is specifically configured to, when determining that a dependency conflict exists in a target SDK if at least one target SDK different from other versions to be updated exists in the associated dependent SDK,:
If the target SDK which is different from other versions of the version to be updated exists in the associated dependent SDK, determining the version number of the target SDK which is different from other versions of the version to be updated;
and if the determined version number is not compatible with the version to be updated, determining that the target SDK has a dependency conflict.
One possible implementation manner is provided in the embodiments of the present disclosure, and the method further includes a marking module, configured to:
Based on the association dependent SDK and the direct dependent SDK, constructing a dependency relationship tree aiming at the target application program;
target SDKs of versions other than the version to be updated are marked in the dependency tree.
According to the dependency conflict detection device, if the target SDK version update is detected, the target application program applying the target SDK is determined, the direct dependent SDK of the target application program and the associated dependent SDK are obtained, the dependency conflict of the target SDK is detected based on the associated dependent SDK and the direct dependent SDK, whether the application program applying the target SDK has the dependency conflict or not can be determined when the target SDK version update is carried out, and APP breakdown caused by the target SDK version update is effectively avoided.
The image dependency conflict detection apparatus according to the embodiments of the present disclosure may perform a method for detecting an image dependency conflict provided by the embodiments of the present disclosure, and the implementation principle is similar, and actions performed by each module in the image dependency conflict detection apparatus according to each embodiment of the present disclosure correspond to steps in the image dependency conflict detection method according to each embodiment of the present disclosure, and detailed functional descriptions of each module in the image dependency conflict detection apparatus may be referred to the descriptions in the corresponding image dependency conflict detection method shown in the foregoing, which are not repeated herein.
Referring now to fig. 10, a schematic diagram of an electronic device 600 suitable for use in implementing embodiments of the present disclosure is shown. The electronic devices in the embodiments of the present disclosure may include, but are not limited to, mobile terminals such as mobile phones, notebook computers, digital broadcast receivers, PDAs (personal digital assistants), PADs (tablet computers), PMPs (portable multimedia players), in-vehicle terminals (e.g., in-vehicle navigation terminals), and the like, and stationary terminals such as digital TVs, desktop computers, and the like. The electronic device shown in fig. 10 is merely an example and should not be construed to limit the functionality and scope of use of the disclosed embodiments.
An electronic device includes: a memory and a processor, where the processor may be referred to as a processing device 601 hereinafter, the memory may include at least one of a Read Only Memory (ROM) 602, a Random Access Memory (RAM) 603, and a storage device 608 hereinafter, as shown in detail below:
As shown in fig. 10, the electronic device 600 may include a processing means (e.g., a central processing unit, a graphic processor, etc.) 601, which may perform various appropriate actions and processes according to a program stored in a Read Only Memory (ROM) 602 or a program loaded from a storage means 608 into a Random Access Memory (RAM) 603. In the RAM 603, various programs and data required for the operation of the electronic apparatus 600 are also stored. The processing device 601, the ROM 602, and the RAM 603 are connected to each other through a bus 604. An input/output (I/O) interface 605 is also connected to bus 604.
In general, the following devices may be connected to the I/O interface 605: input devices 606 including, for example, a touch screen, touchpad, keyboard, mouse, camera, microphone, accelerometer, gyroscope, and the like; an output device 607 including, for example, a Liquid Crystal Display (LCD), a speaker, a vibrator, and the like; storage 608 including, for example, magnetic tape, hard disk, etc.; and a communication device 609. The communication means 609 may allow the electronic device 600 to communicate with other devices wirelessly or by wire to exchange data. While fig. 10 shows an electronic device 600 having various means, it is to be understood that not all of the illustrated means are required to be implemented or provided. More or fewer devices may be implemented or provided instead.
In particular, according to embodiments of the present disclosure, the processes described above with reference to flowcharts may be implemented as computer software programs. For example, embodiments of the present disclosure include a computer program product comprising a computer program embodied on a non-transitory computer readable medium, the computer program comprising program code for performing the method shown in the flow chart. In such an embodiment, the computer program may be downloaded and installed from a network via communication means 609, or from storage means 608, or from ROM 602. The above-described functions defined in the methods of the embodiments of the present disclosure are performed when the computer program is executed by the processing device 601.
It should be noted that the computer readable medium described in the present disclosure may be a computer readable signal medium or a computer readable medium, or any combination of the two. The computer readable storage medium can be, for example, but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device, or a combination of any of the foregoing. More specific examples of the computer-readable storage medium may include, but are not limited to: an electrical connection having one or more wires, a portable computer diskette, a hard disk, a Random Access Memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or flash memory), an optical fiber, a portable compact disc read-only memory (CD-ROM), an optical storage device, a magnetic storage device, or any suitable combination of the foregoing. In the context of this disclosure, a computer-readable storage medium may be any tangible medium that can contain, or store a program for use by or in connection with an instruction execution system, apparatus, or device. In the present disclosure, however, the computer-readable signal medium may include a data signal propagated in baseband or as part of a carrier wave, with the computer-readable program code embodied therein. Such a propagated data signal may take any of a variety of forms, including, but not limited to, electro-magnetic, optical, or any suitable combination of the foregoing. A computer readable signal medium may also be any computer readable medium that is not a computer readable storage medium and that can communicate, propagate, or transport a program for use by or in connection with an instruction execution system, apparatus, or device. Program code embodied on a computer readable medium may be transmitted using any appropriate medium, including but not limited to: electrical wires, fiber optic cables, RF (radio frequency), and the like, or any suitable combination of the foregoing.
In some embodiments, the clients, servers may communicate using any currently known or future developed network protocol, such as HTTP (HyperText Transfer Protocol ), and may be interconnected with any form or medium of digital data communication (e.g., a communication network). Examples of communication networks include a local area network ("LAN"), a wide area network ("WAN"), the internet (e.g., the internet), and peer-to-peer networks (e.g., ad hoc peer-to-peer networks), as well as any currently known or future developed networks.
The computer readable medium may be contained in the electronic device; or may exist alone without being incorporated into the electronic device.
The computer readable medium carries one or more programs which, when executed by the electronic device, cause the electronic device to:
If the update of the SDK version of the target software development kit is detected, determining a target application program for applying the target SDK;
Acquiring a direct dependent SDK of a target application program;
Acquiring an association dependent SDK with a dependency relationship with the direct dependent SDK from a preset dependency relationship database;
Based on the association dependent SDK and the direct dependent SDK, a dependency conflict of the target SDK is detected.
Computer program code for carrying out operations of the present disclosure may be written in one or more programming languages, including, but not limited to, an object oriented programming language such as Java, smalltalk, C ++ and conventional procedural programming languages, such as the "C" programming language or similar programming languages. The program code may execute entirely on the user's computer, partly on the user's computer, as a stand-alone software package, partly on the user's computer and partly on a remote computer or entirely on the remote computer or server. In the case of a remote computer, the remote computer may be connected to the user's computer through any kind of network, including a Local Area Network (LAN) or a Wide Area Network (WAN), or may be connected to an external computer (for example, through the Internet using an Internet service provider).
The flowcharts and block diagrams in the figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods and computer program products according to various embodiments of the present disclosure. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of code, which comprises one or more executable instructions for implementing the specified logical function(s). It should also be noted that, in some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems which perform the specified functions or acts, or combinations of special purpose hardware and computer instructions.
The modules or units involved in the embodiments of the present disclosure may be implemented by means of software, or may be implemented by means of hardware. Where the name of a module or unit does not constitute a limitation on the unit itself in some cases, for example, a detection module may also be described as "a module for detecting dependency conflicts".
The functions described above herein may be performed, at least in part, by one or more hardware logic components. For example, without limitation, exemplary types of hardware logic components that may be used include: a Field Programmable Gate Array (FPGA), an Application Specific Integrated Circuit (ASIC), an Application Specific Standard Product (ASSP), a system on a chip (SOC), a Complex Programmable Logic Device (CPLD), and the like.
In the context of this disclosure, a machine-readable medium may be a tangible medium that can contain, or store a program for use by or in connection with an instruction execution system, apparatus, or device. The machine-readable medium may be a machine-readable signal medium or a machine-readable storage medium. The machine-readable medium may include, but is not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device, or any suitable combination of the foregoing. More specific examples of a machine-readable storage medium would include an electrical connection based on one or more wires, a portable computer diskette, a hard disk, a Random Access Memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or flash memory), an optical fiber, a portable compact disc read-only memory (CD-ROM), an optical storage device, a magnetic storage device, or any suitable combination of the foregoing.
According to one or more embodiments of the present disclosure, there is provided a dependency collision detection method including:
If the update of the SDK version of the target software development kit is detected, determining a target application program for applying the target SDK;
Acquiring a direct dependent SDK of a target application program;
Acquiring an association dependent SDK with a dependency relationship with the direct dependent SDK from a preset dependency relationship database;
Based on the association dependent SDK and the direct dependent SDK, a dependency conflict of the target SDK is detected.
In accordance with one or more embodiments of the present disclosure, the association-dependent SDKs include SDKs that directly depend on the SDK and SDKs that indirectly depend on the SDK.
According to one or more embodiments of the present disclosure, detecting a dependency conflict of a target SDK based on an association dependent SDK and a direct dependent SDK includes:
determining whether the target SDK belongs to a direct dependent SDK of the target application program;
if yes, based on the associated dependent SDK, the dependent conflict of the target SDK is detected.
According to one or more embodiments of the present disclosure, based on associating dependent SDKs, detecting a dependency conflict of a target SDK includes:
The query is dependent on whether there is at least one target SDK in the SDK that is different from the other versions to be updated.
According to one or more embodiments of the present disclosure, further comprising:
If at least one target SDK different from other versions of the version to be updated exists in the associated dependent SDK, determining that the target SDK has a dependent conflict;
a dependency conflict hint is issued for the target SDK.
According to one or more embodiments of the present disclosure, if it is queried that there is at least one target SDK of the associated dependent SDKs that is different from the version to be updated, determining that the target SDK has a dependency conflict includes:
If the target SDK which is different from other versions of the version to be updated exists in the associated dependent SDK, determining the version number of the target SDK which is different from other versions of the version to be updated;
and if the determined version number is not compatible with the version to be updated, determining that the target SDK has a dependency conflict.
According to one or more embodiments of the present disclosure, further comprising:
Based on the association dependent SDK and the direct dependent SDK, constructing a dependency relationship tree aiming at the target application program;
target SDKs of versions other than the version to be updated are marked in the dependency tree.
According to one or more embodiments of the present disclosure, there is provided a dependency collision detection apparatus including:
the determining module is used for determining a target application program for applying the target SDK if the SDK version update of the target software development kit is detected;
the first acquisition module is used for acquiring the direct dependence SDK of the target application program;
the second acquisition module is used for acquiring the association dependent SDK with the dependency relationship with the direct dependent SDK from a preset dependency relationship database;
and the detection module is used for detecting the dependence conflict of the target SDK based on the association dependent SDK and the direct dependent SDK.
According to one or more embodiments of the present disclosure, there is provided an electronic device including:
one or more processors;
A memory;
one or more applications, wherein the one or more applications are stored in the memory and configured to be executed by the one or more processors, the one or more applications configured to: the dependency collision detection method according to any one of the above embodiments is performed.
According to one or more embodiments of the present disclosure, there is provided a computer readable medium having stored thereon a computer program which, when executed by a processor, implements the dependency collision detection method of any one of the above embodiments.
The foregoing description is only of the preferred embodiments of the present disclosure and description of the principles of the technology being employed. It will be appreciated by persons skilled in the art that the scope of the disclosure referred to in this disclosure is not limited to the specific combinations of features described above, but also covers other embodiments which may be formed by any combination of features described above or equivalents thereof without departing from the spirit of the disclosure. Such as those described above, are mutually substituted with the technical features having similar functions disclosed in the present disclosure (but not limited thereto).
Moreover, although operations are depicted in a particular order, this should not be understood as requiring that such operations be performed in the particular order shown or in sequential order. In certain circumstances, multitasking and parallel processing may be advantageous. Likewise, while several specific implementation details are included in the above discussion, these should not be construed as limiting the scope of the present disclosure. Certain features that are described in the context of separate embodiments can also be implemented in combination in a single embodiment. Conversely, various features that are described in the context of a single embodiment can also be implemented in multiple embodiments separately or in any suitable subcombination.
Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are example forms of implementing the claims.