text:
Patent application title: MODEL-OPERATIVE PATTERN REPRESENTATION HARVESTING USING AN AUTOMATED EXEMPLAR-DIRECTED APPROACH
Scott E. Schneider (Rolesville, NC, US)
Jason M. Smith (Ossining, NY, US)
International Business Machines Corporation
IPC8 Class: AG06F944FI
USPC Class:
Class name: Data processing: software development, installation, and management software program development tool (e.g., integrated case tool or stand-alone development tool) code generation
Publication date: 2011-05-05
Patent application number: 20110107296
Sign up to receive free email alerts when patent applications with chosen keywords are published SIGN UP
Pattern harvesting is disclosed, using an automated exemplar-directed
approach to harvest patterns from a model-operative pattern
representation. A domain is identified, and existing pattern occurrences
are detected therein in an automated manner. The detected pattern
occurrences are used for creating a new pattern specification.
1. A computer-implemented method of harvesting model-operative pattern
representations, comprising: detecting, from an identified boundary of a
model containing at least one identified exemplar, all existing pattern
occurrences; determining, from the detected existing pattern occurrences,
all overlapping pattern occurrences, wherein the overlapping pattern
occurrences comprise pattern occurrences that share at least one pattern
participant; defining, for each determined overlapping pattern
occurrence, a shared role in a new pattern; generating a pattern
codification for the new pattern, further comprising: determining roles
of the new pattern; determining constraints of the new pattern;
determining relationships between the roles of the new pattern; codifying
the roles and the relationships in a structure section of the generated
pattern codification; and codifying the constraints in a behavior section
of the generated pattern codification; and recording the generated
pattern codification on a storage medium.
2. The method according to claim 1, wherein the detecting, determining, defining, and generating are performed using computer-readable program code executed by a computer.
3. The method according to claim 1, further comprising customizing, using an editor program, a textual specification generated as the codification of the new pattern.
4. The method according to claim 3, wherein the customizing further comprises assigning names to the new pattern and at least one role specified therein.
5. The method according to claim 1, further comprising validating the pattern.
6. The method according to claim 1, wherein: the structure section specifies structural features of the new pattern, the structural features comprising at least one pattern role for the new pattern and at least one relationship involving the at least one pattern role; and the behavior section specifies behavioral features of the new pattern, the behavioral features comprising how to use the structural features in constraining structural features of other composited patterns from which the new pattern is composed or, when the new pattern is not composed of other composited patterns, an operation to invoke for implementing the new pattern.
7. The method according to claim 1, wherein each role and relationship in the new pattern provides a point of variability for the new pattern, and these variability points enable reuse of the new pattern.
8. The method according to claim 1, further comprising: determining redundant ones of the detected pattern occurrences; and removing the redundant occurrences before determining the overlapping occurrences.
9. The method according to claim 1, wherein the generated codification for the new pattern specifies the patterns separate from code for execution of the new pattern.
10. The method according to claim 1, further comprising: storing the generated pattern codification for the new pattern in a pattern library that stores pattern codifications for a plurality of patterns; and using the stored pattern codification for the new pattern as a component for compositing a different pattern.
11. A computer program product for building patterns as composites, the computer program product embodied on one or more computer-readable storage media and comprising computer-readable program code for: detecting, from an identified boundary of a model containing at least one identified exemplar, all existing pattern occurrences; determining, from the detected existing pattern occurrences, all overlapping pattern occurrences; defining, for each determined overlapping pattern occurrence, a shared role in a new pattern; and generating a pattern codification for the new pattern.
12. The computer program product according to claim 11, wherein the overlapping pattern occurrences comprise pattern occurrences that share at least one pattern participant.
13. The computer program product according to claim 11, further comprising computer-readable program code for recording the generated pattern codification on a storage medium.
14. The computer program product according to claim 11, wherein the generating further comprises: determining roles of the new pattern; determining constraints of the new pattern; determining relationships between the roles of the new pattern; codifying the roles and the relationships in a structure section of the generated pattern codification; and codifying the constraints in a behavior section of the generated pattern codification.
15. A system for operational enablement of patterns, comprising: a computer comprising a processor; and instructions which are executable, using the processor, to implement functions comprising: detecting, from an identified boundary of a model containing at least one identified exemplar, all existing pattern occurrences; determining, from the detected existing pattern occurrences, all overlapping pattern occurrences; defining, for each determined overlapping pattern occurrence, a shared role in a new pattern; and generating a pattern codification for the new pattern.
16. The system according to claim 15, wherein the overlapping pattern occurrences comprise pattern occurrences that share at least one pattern participant.
17. The system according to claim 15, wherein the functions further comprise recording the generated pattern codification on a storage medium.
18. The system according to claim 15, wherein the generating further comprises: determining roles of the new pattern; determining constraints of the new pattern; determining relationships between the roles of the new pattern; codifying the roles and the relationships in a structure section of the generated pattern codification; and codifying the constraints in a behavior section of the generated pattern codification.
[0001] The present patent application is related to commonly-assigned and co-pending patent application Ser. No. 12/205,692 (filed Sep. 5, 2008), titled "MODEL-OPERATIVE PATTERN REPRESENTATION AND OPERATIONAL ENABLEMENT USING DECLARATIVE COMPONENTIAL-DRIVEN DOMAIN-SPECIFIC PROGRAMMING LANGUAGE", the disclosure of which is hereby incorporated herein by reference.
[0002] A portion of the disclosure of this patent document contains material to which a claim of copyright protection is made. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent file or records, but reserves all other rights whatsoever.
[0003] The present invention relates to computer programming, and deals more particularly with automated harvesting of patterns.
[0004] In the general sense, a pattern is a recurring abstraction that specifies a configuration of objects and relationships among them. The relationships may be of various types, including sequential, spatial, temporal, logical, mathematical, and so forth. A pattern can be said to represent a common solution to a common problem in a given context.
[0005] In the context of software development, patterns are used extensively to solve small-scale as well as large-scale problems in the design, modeling, implementation, deployment, and/or maintenance of software systems. The application of a pattern to, or within, a software system causes the system to be structured, and to behave, in certain ways as dictated by or consistent with the pattern.
[0006] The present invention is directed to model-operative pattern representation harvesting. In one embodiment, this comprises: detecting, from an identified boundary of a model containing at least one identified exemplar, all existing pattern occurrences; determining, from the detected existing pattern occurrences, all overlapping pattern occurrences; defining, for each determined overlapping pattern occurrence, a shared role in a new pattern; and generating a pattern codification for the new pattern. The generated pattern codification may be validated and/or stored on a storage medium. A textual specification generated as the codification of the new pattern may be customized, using (for example) an editor program. Redundant ones of the detected pattern occurrences are preferably removed before determining the overlapping occurrences.
[0007] In one aspect, the generating further comprises: determining roles of the new pattern; determining constraints of the new pattern; determining relationships between the roles of the new pattern; codifying the roles and the relationships in a structure section of the generated pattern codification; and codifying the constraints in a behavior section of the generated pattern codification. The generated pattern codification for the new pattern may be stored in a pattern library that stores pattern codifications for a plurality of patterns, and may be used as a component for compositing a different pattern.
[0008] Embodiments of these and other aspects of the present invention may be provided as method, systems, and/or computer program products. It should be noted that the foregoing is a summary and thus contains, by necessity, simplifications, generalizations, and omissions of detail; consequently, those skilled in the art will appreciate that the summary is illustrative only and is not intended to be in any way limiting. Other aspects, inventive features, and advantages of the present invention, as defined by the appended claims, will become apparent in the non-limiting detailed description set forth below.
[0009] The present invention will be described with reference to the following drawings, in which like reference numbers denote the same element throughout.
[0010] FIGS. 1 and 2 provide a sample pattern and corresponding sample pattern occurrence, respectively;
[0011] FIG. 3 provides an abstract graph, illustrating how the pattern and pattern occurrence from FIGS. 1 and 2 are related;
[0012] FIG. 4 provides sample syntax that may be used to codify the sample pattern in FIG. 1;
[0013] FIG. 5 illustrates a sample pattern composition, with regard to the sample pattern from FIG. 1, showing how one pattern may be composed of other patterns;
[0014] FIGS. 6 and 7 provide another sample pattern and sample syntax that may be used to codify this sample pattern, respectively;
[0015] FIG. 8 illustrates a sample pattern composition with regard to the sample pattern from FIG. 6;
[0016] FIGS. 9 and 11 provide sample syntax that may be used to codify atomic patterns from which the sample pattern illustrated in FIGS. 6-7 is composed;
[0017] FIG. 10 provides sample object-oriented programming language code that may be used to implement the atomic pattern in FIG. 9;
[0018] FIG. 12 shows an overlapping-barbell pattern, which may be harvested using an embodiment of the present invention;
[0019] FIG. 13 provides a flowchart depicting logic which may be used when implementing an embodiment of the present invention;
[0020] FIG. 14 provides sample syntax which may be programmatically generated during harvesting to codify the overlapping-barbell pattern illustrated in FIG. 12;
[0021] FIG. 15 illustrates a metamodel which may be used with an embodiment of the present invention;
[0022] FIG. 16A illustrates an example of object-oriented code that programmatically constructs two patterns, manipulating a pattern at the meta-model level, and FIG. 16B shows a sample meta-model pattern representation for these same patterns using a declarative pattern specification language;
[0023] FIG. 17 depicts a data processing system suitable for storing and/or executing program code; and
[0024] FIG. 18 depicts a representative networking environment in which one or more embodiments of the present invention may be used.
[0025] Many different things may exhibit patterns, including everyday items, models of various types, programming language code, and so forth, and thus in the general sense, patterns may be found anywhere. Java® code, for example, may exhibit patterns. In a modeling environment, patterns may be exhibited in Unified Modeling Language ("UML") models, data models, and so forth.
[0026] A model-operative pattern is a pattern that operates on models or elements in models. For example, an operation may correspond to applying an "observer" design pattern to a particular group of UML model elements, or to detecting a business process pattern in a business model, and so forth. Patterns may be used as components to compose other patterns, and this may be referred to as componential-driven pattern construction.
[0027] Embodiments of the present invention are directed toward pattern harvesting, whereby patterns represented in a model are detected in an automated manner and used for creating new patterns. A pattern occurrence may exist in a particular domain even though that occurrence has not been formally codified as a pattern. Techniques disclosed herein enable detecting the pattern and programmatically codifying its definition.
[0028] Commonly-assigned and co-pending patent application Ser. No. 12/205,692 (filed Sep. 5, 2008), titled "MODEL-OPERATIVE PATTERN REPRESENTATION AND OPERATIONAL ENABLEMENT USING DECLARATIVE COMPONENTIAL-DRIVEN DOMAIN-SPECIFIC PROGRAMMING LANGUAGE" (hereinafter, "the related application") discloses a declarative, domain-specific language for pattern representation. This language is referred to herein as "Prose", which is an acronym for "pattern reasoning and object-oriented specification environment", and may be considered as leveraging concepts from predicate calculus. This declarative language is based upon a premise that most patterns are defined in terms of other patterns. Stated another way, patterns are usable as components of other patterns. A pattern may therefore be considered a reusable software component.
[0029] While patterns offer advantages in a traditional software design cycle, patterns are also general enough to be relevant and valuable to other uses outside this arena. A pattern can be considered as a named, context-sensitive, constrained, composite, parameterized abstraction. By way of review of the related invention, a description of these terms will now be presented. When a pattern is named, the pattern can be referenced for purposes such as reuse. Context-sensitive means that the pattern may be defined with regard to a particular context or area of applicability. Constrained refers to defining a pattern through constraints on the entities (referred to equivalently herein as elements) that make up the pattern. Composite refers to specifying a pattern in terms of other patterns. Parameterized refers to declaring a pattern with regard to variability points. These variability points enable a particular pattern to be adapted and applied in varying domains as parameter values are provided for the variability points. Accordingly, a pattern may be reused in different models. Abstraction refers to hiding implementation details while enabling a pattern to embrace domain-specific concepts.
[0030] The term "pattern occurrence", as used herein, refers to an instance of a pattern. A pattern occurrence, or instance, therefore makes concrete (or "concretizes") what was abstract in the pattern itself. As described in the related application, constraints may be completely or partially satisfied in a pattern instance. When a pattern is instantiated, instances are preferably also created for the underlying patterns from which this particular pattern is composed, although alternatively, the instantiation of at least some underlying patterns may be delayed (as discussed in more detail in the related application). Concrete elements are specified in a pattern instance for at least some of the variability points in the pattern. And although the pattern instance includes concrete elements, the abstraction provided by the pattern itself may remain apparent in the instance. A pattern occurrence may therefore be considered as a concretization of the constrained, composite, parameterized abstraction.
[0031] An example is provided in FIGS. 1 and 2 to illustrate the above-discussed concepts. FIG. 1 depicts a pattern referred to herein as the "state" pattern, and FIG. 2 illustrates one sample instance of this state pattern. The state pattern provides an abstraction of real-world entities that have an associated, and variable, state. By way of example, the instance shown in FIG. 2 illustrates a traffic signal and its potential states.
[0032] As shown in FIG. 1, the state pattern 100 of this example comprises three roles 110, 130, 150 and two relationships 120, 140. In the general case, the roles and relationships in a pattern provide points of variability for that pattern, and these variability points enable reuse of the pattern. Reuse of a pattern occurs when different participants fulfill, or assume, the roles of that pattern. So, for example, while FIG. 2 illustrates a sample instance where a role in the state pattern is fulfilled (i.e., assumed) by a traffic signal, that role might alternatively be assumed by another entity that has a state, such as a baking oven, thus reusing the state pattern.
[0033] FIG. 1 illustrates a first role 110 which indicates that the state pattern 100 operates in a context. A second role 130 indicates a state, which corresponds to the actual state being modeled and which is related to context 110 by a "delegates-to" relationship 120. A third role 150 indicates that the state pattern 100 has a concrete state. This concrete state 150 is related to state 130 by an "abstracts" relationship 140. A cardinality is shown as "1 . . . *" for the abstracts relationship 140; see 141. In other words, state 130 is an abstract role that is related to one or more concrete states 150 by the abstracts relationship 140.
[0034] FIG. 2 provides an example occurrence 200 of the state pattern 100, showing how this state pattern 100 may be used to represent the states of a traffic signal. In the sample state pattern occurrence 200, which concretizes the state pattern for the traffic signal scenario, the participants that assume the various roles of the state pattern are as follows: a signal participant (see 210) assumes the context role 110 from FIG. 1; a light participant (see 230) assumes the state role 130; and three different states of the light of a traffic signal (see 250, 251, 252) assume the concrete state role 150. In this example, the participants assuming the concrete state role 150 are identified as "Green" 250, "Yellow" 251, and "Red" 252, thereby indicating that the state of the light for the traffic signal may be green, yellow, or red. Note that the "illuminate( )" syntax specified for each of "Green" 250, "Yellow" 251, and "Red" 252 in FIG. 2 is the name of the operation that all concrete state roles must implement according to the "concretization" pattern (not shown in FIG. 2) that defines the operation name and signature for the sample state pattern. When a particular state of "Green", "Yellow", or "Red" is plugged in and delegated to at run time, the behavior of what it means to be in a certain state for this certain operation will be executed.
[0035] Conceptually, a pattern may be represented as an abstract graph where the vertices correspond to roles and the edges correspond to relationships. This is illustrated in FIG. 3 for the state pattern 100 and state occurrence 200, showing the pattern and the occurrence in graph form at 300 and 350, respectively. In graph 300, vertex 310 corresponds to the context role 110 of FIG. 1; vertex 320 corresponds to the state role 130; and vertex 330 corresponds to the concrete state role 150. Graph 300 also shows edge 315, which corresponds to the delegates relationship 120 of FIG. 1, and edge 325, which corresponds to the abstracts relationship 140. (Note also that the cardinality of the abstracts relationship 140 is indicated as 1-to-many by use of a "+" sign 326 in the sample graph 300.) The state pattern corresponding to graph 300 is instantiated as the state occurrence corresponding to graph 350, as indicated by arrow 340. In the graph 350 for the state occurrence, vertex 360 corresponds to the signal participant 210 of FIG. 2; vertex 370 corresponds to the light participant 230; and vertices 380, 381, 382 correspond to the green, yellow, and red participants 250, 251, 252. Edge 365 of graph 350 corresponds to the delegates relationship 120 of FIG. 1, and edges 375, 376, 377 correspond to the abstracts relationship 140.
[0036] In the general case, a pattern represented using the Prose language is defined as having three parts. The parts are a context (which may alternatively be optional or omitted), a structure, and behavior. Each of these parts will now be discussed briefly for the general case, and an example showing how the state pattern may be codified using these parts will then be described with reference to FIG. 4.
[0037] The context indicates where and when a pattern is applicable. An alternative embodiment may omit the context, or provide for context to be optional, although inclusion of this part is believed to enable an implementation to operate in a more optimal manner (e.g., by narrowing the range of applicability of a pattern). As shown by way of example in FIG. 2, the state pattern 100 is applicable in the traffic signal context 210. However, as will be obvious to the reader, many different entities may be determined to exhibit a state property, in many different contexts. As one example of these other entities, a baking oven may assume the context role 110, and the state role 130 might then be assumed by a heating element, a timer, an oven light, and so forth. The concrete role 150 may then be assumed, for example, by participants identified as "On" and "Off".
[0038] The structure is the abstract syntax of a pattern, and may alternatively be referred to as the pattern signature. The structural features for a pattern define pattern roles and relations involving those roles. Referring again to the state pattern example as depicted in FIG. 1, the pattern signature in this example comprises three roles and two relationships.
[0039] The behavior is the pattern semantics, and thus specifies what it means for an entity to exhibit the pattern. The behavioral features use the structural features (e.g., the roles and relations) of the pattern for constraining expressions that are defined using structural features from another pattern or patterns.
[0040] As disclosed in the related application, the specification of a pattern is provided in a declarative and consistent manner, using a human-readable and machine-processable document that details the defining characteristics of that pattern (as will be discussed with reference to the examples in FIGS. 4 and 7), and the code for execution of specific operational use cases (that is, for executing specific operations) against these patterns, occurrences, and models of interest (e.g., for pattern application, pattern detection, and so forth) is separate from the pattern specification. A benefit of this decoupling approach is that new patterns can be created while leveraging the current operations supported on standard pattern specifications. In addition, new operations can be added and honed, and can then be reused by other existing patterns in the system.
[0041] Referring now to FIG. 4, a sample codification 400 of the state pattern is illustrated. (It should be noted that the syntax shown in the example codifications is illustrative but not limiting.) A "library" statement 401 specifies where this pattern codification will be stored (and may be considered as being similar to a package declaration in the Java® programming language). One or more "use" statements 410 specify where to find other patterns used by this pattern. (These other patterns are discussed in more detail with reference to FIG. 5, below). Note that the "use" statements 410 provide information on where to find the Delegation 422, Concretization 423, and Singleton 424 patterns; however, if a particular pattern is stored in the same library as this State pattern, then the "use" statement is not strictly required at 410 for that pattern.
[0042] A "pattern" statement 420 provides a declaration of the pattern, and a name 421 for the pattern is specified therein along with a "composites" attribute that identifies other patterns 422-424 which are used by this pattern. In the general case, the "composites" attribute may name one or more other patterns. For patterns which are not composed of other patterns, the "composites" attribute is preferably replaced by a "native" attribute that precedes the "pattern" keyword in the pattern statement to signify that an atomic pattern is being defined. (See, for example, reference number 921 of FIG. 9.) Atomic patterns are described in more detail below.
[0043] A "structure" definition 430 provides the pattern signature and defines the roles and relationships for the pattern, as mentioned earlier. For this example 400, the structure comprises three roles 440 and two relationships 450. These roles 440 and relationships 450 are as described above with reference to FIGS. 1-3. In the illustrated syntax, a "?" follows the "context" role name (see 441), thereby indicating that this role is optional, and a "+" follows the "concrete-state" name (see 443), thereby indicating that one or more participants for this role may exist in an occurrence of this particular pattern 400; by default, absence of a "?" or "+" character after a role name (see 442) indicates that the role will be assumed by a single participant in an occurrence of the pattern. Each of the relationships 120, 140 in the state pattern example is between participants in two different ones of the pattern's roles, and thus each relationship definition specified at 450 includes two parameters within a parameter list that is enclosed in parentheses and in which the parameters are separated by commas (by way of illustration but not of limitation), and each of these parameters corresponds to one of the role names defined at 440.
[0044] A "behavior" definition 460 specifies constraints on occurrences of pattern 400. That is, the syntax specified at 470 must be in effect (i.e., must be true) for this pattern to be applied. For example, the "delegates" constraint at 471 indicates that the participant proposed for assuming the context role (see 110 of FIG. 1) must have a delegates-to relationship (see 120) to the participant proposed for assuming the state role (see 130) in order for the state pattern to be applied using these participants.
[0045] Note that the sample state pattern codification 400 omits the optional context part. (Similarly, the sample barbell codification 700 provided in FIG. 7, which is discussed below, also omits the context part.)
[0046] Codifying pattern implementations using model-driven development tools according to known techniques is typically time-consuming and error-prone. Often, a new pattern representation is created by an end user as a portable pattern that can then be reused by others who wish to reap the benefit of the already-created pattern representation and its corresponding implementation. However, pattern authoring tools provided using known approaches are limited in the degree of automated assistance available to the user before the user must resort to Java language coding in order to fully express the semantics equated to the pattern. That is, while the tool may generate code to represent a skeleton of the pattern implementation, codification of the pattern semantics is left as an exercise for the pattern author. The codification process is often quite difficult and tedious, and may require the pattern author to expend a week's time (or more) in finalizing the definition of the pattern.
[0047] Because known solutions are so time-consuming, the cost of codifying a pattern in this manner often outweighs any cost-savings that might be anticipated from using the pattern being constructed. Techniques disclosed herein, by contrast, allow a user to construct portable pattern implementations using a point-and-click approach that initiates automated processing; alternatively, the automated processing may be initiated by another automated process. This automated pattern construction is referred to herein as pattern "harvesting". As disclosed herein, the harvesting operation uses existing pattern occurrences as concrete exemplars, and these are then used to generalize the occurrence back into an abstract pattern with variability points by leveraging the compositional nature of existing Prose pattern representations and a pattern detection process that operates on those existing pattern representations.
[0048] FIG. 5 provides an illustration of pattern composition, using the sample state pattern to depict how patterns may be composites which are composed from other patterns. As shown in FIG. 5, the three-role and two-relationship state pattern may be decomposed into (or conversely, may be composed from) a delegation pattern 500, a concretization pattern 510, and a singleton pattern 520. The delegation pattern 500, for example, comprises two roles and a relationship therebetween, where the relationship corresponds to a particular one of the roles delegating to the other. The concretization pattern 510 also comprises two roles and a relationship, and the relationship corresponds to a particular one of the roles providing a concrete instance of the other role. (Note that the concretization in this example may be considered as the inverse of the abstracts relationship 140 from FIG. 1, or stated another way, if a participant "A" abstracts a participant "B", then the participant "B" concretizes the participant "A".) The singleton pattern 520 involves a single role.
[0049] Patterns which are composed of other patterns and which may be of interest to an end user (such as a programmer or software designer) as providing interesting and unique semantics for direct use by such end user may be referred to as "macro patterns". On the other hand, some patterns may be of more use as building blocks from which the macro patterns may be composed. For example, these other patterns may be of less interest for direct usage by an end user, while being useful for enabling a pattern processing tool to accomplish its operation. These other "building block" type patterns may be termed as "micro" patterns and "atomic" patterns, where the micro patterns are composed from other patterns and the atomic patterns (sometimes referred to as "elementary patterns") are those patterns which cannot be further decomposed into component patterns. While the declarative approach of the Prose language disclosed in the related application is preferably used for defining patterns that use composition (i.e., micro patterns and macro patterns), the atomic patterns are preferably specified using imperative code from a conventional programming language (and may include programming languages yet to be developed). An example of micro-patterns is the barbell pattern which is discussed in more detail below with reference to FIGS. 6-8. Examples of atomic patterns include equality, inequality, class, and association, and these atomic patterns are also discussed in more detail below with regard to the barbell pattern.
[0050] The barbell pattern is discussed herein as another example pattern, and comprises two roles and one relationship. Whereas the sample state pattern is illustrated herein as a macro pattern, the barbell pattern is illustrated as a micro pattern (in recognition that it may be deemed more useful as a building block than as a pattern of interest to an end user, although this characterization is by way of illustration and not of limitation). Referring now to FIG. 6, a graph 600 illustrates the barbell pattern, showing roles 610, 630 and a relationship 620 between them. The sample barbell pattern will now be discussed in more detail.
[0051] FIG. 7 illustrates a sample codification 700 of the barbell pattern. The "library" statement 701 specifies where this pattern codification will be stored (i.e., in the "example" library), and "use" statements 710 specify where to find other patterns used by this barbell pattern and in particular, where to find a class, association, and inequality pattern used by the barbell pattern. A "pattern" statement 720 provides a declaration of the barbell pattern, providing its name at 721 and specifying a "composites" attribute that identifies the class pattern 722, association pattern 723, and inequality pattern 724 which are used by this barbell pattern. In other words, the barbell pattern is defined in terms of (or composed from) the class, association, and inequality patterns.
[0052] A "structure" definition 730 provides the pattern signature for the barbell pattern, and in this example 700, the structure comprises two roles 740 and one relationship 750. These roles 740 and relationship 750 are as illustrated in FIG. 6, and comprise a "left-bell" role (see 610), a "right-bell" role (see 630), and a "bar" relationship (see 620). The "bar" relationship 750 in this example is between participants that assume the left-bell and right-bell roles 740, and thus the bar relationship definition specifies these role names as parameters in a parenthesized and comma-separated parameter list.
[0053] A "behavior" definition 760 specifies constraints on occurrences of barbell pattern 700. That is, the syntax specified at 770 must be in effect (i.e., must be true) for this barbell pattern to be applied. In particular, the syntax at 771 specifies that both the left-bell and right-bell participants must exhibit the class pattern; the syntax at 772 specifies that the "not-equals" relationship (which is presumably defined, in this example, in the "inequality" pattern referenced at 710 and 724) applies to participants assuming the role of left-bell and right-bell (i.e., a single participant cannot fill both roles simultaneously); and the syntax at 773 specifies that the "associates" relationship (which is presumably defined, in this example, in the "association" pattern referenced at 710 and 723) applies to the participants assuming the left-bell and right-bell roles. (As an alternative to the shorthand notation "left-bell, right-bell=class" shown at 771, this syntax may be expressed as "class(left-bell), class(right-bell)".)
[0054] FIG. 8 shows an abstract graphical representation of composition of the barbell pattern, illustrating a representation of this pattern in the Prose language (see, generally, 800) as disclosed in the related application as well as an underlying implementation 850 in the Java programming language (by way of illustration but not of limitation) for the atomic patterns used by the barbell pattern. The barbell pattern itself is depicted abstractly at 810, showing the pattern's roles at 811 and relationship at 812. A set of pointers 813, 814, 815 point to graphical representations 820, 830, 840 of the three atomic patterns from which the barbell pattern is composed (as specified in the "pattern" statement at 720 of FIG. 7).
[0055] Referring to the graphical representation 820 of the class pattern, for this example, this pattern is shown in FIG. 8 as having a single role named "x" and a single relationship (which may be referred to as a property; see the discussion of reference number 950 of FIG. 9, below) which is named "class". The graphical representation 830 of the association pattern shows two roles named "x" and "y" and a single relationship named "associates", and the graphical representation 840 of the inequality pattern shows two roles named "x" and "y" and a single relationship named "not-equals". (This illustration also shows that the associates and not-equals relationships use a parameter list, as indicated in the sample codification at 770 of FIG. 7.)
[0056] For the barbell pattern example as described herein, patterns 820, 830, 840 are deemed to be atomic patterns, meaning that they cannot be further decomposed into other patterns. Accordingly, each of these atomic patterns is preferably implemented using code of an imperative programming language. FIG. 8 therefore shows a pointer from each of these atomic patterns to a corresponding Java programming language implementation thereof (References herein to use of the Java programming language, or more generally to use of an object-oriented language, are by way of illustration but not of limitation.) Thus, "Class.java" 860 provides code that implements the class pattern 820, "Association.java" 870 provides code that implements the association pattern 830, and "Inequality.java" 880 provides code that implements the inequality pattern 840. For example, "Inequality.java" 880 may be presumed to include code for evaluating the "not-equals" relationship between two participants that fulfill the "x" and "y" roles (see 840), thereby determining whether those participants are "not-equals" to each other.
[0057] FIG. 9 specifies a sample codification 900 of the class pattern in the Prose language disclosed in the related application. In the example, the class pattern is an atomic pattern that is referenced at 710 and 722 of FIG. 7 (and is shown abstractly at 820 in FIG. 8). As contrasted to the "pattern" statements 420 of FIGS. 4 and 720 of FIG. 7, note that the "pattern" statement 920 in codification 900 is prefixed with a "native" attribute (see 921) and does not specify a "composites" attribute. Accordingly, this statement 920 identifies an atomic pattern. A "structure" part 930 and "behavior" part 960 are specified for the atomic pattern, as in the macro-pattern definition in FIG. 4 and the micro-pattern definition in FIG. 7. The "structure" part 930 in this example 900 specifies a single role 940, having a name of "x" (as also depicted at 820 of FIG. 8), and a "properties" statement 950 defines "x" as being a class. Note that the syntax within the "structure" part 930 uses the keyword "properties", in contrast to "structure" part 730 of FIG. 7, which uses the keyword "relations". In the general case, a property is a "1-ary" relation. Because the atomic pattern 920 has only one role, this role may therefore be characterized using properties rather than relationships. A "behavior" definition 960 specifies operations 970 of this atomic pattern 900, and in this example, a single operation is defined. In this particular example, a wildcard "*" 972 is used as the condition for a "when" clause 971, indicating (in this example) that each iteration of this operation will invoke (see 973) the Java code identified at 974. As an alternative to use of the wildcard symbol "*" in a when clause, a particular pattern codification may specify other syntax, such as "when `apply` invoke . . . " or "when `detect` invoke . . . " to indicate conditions for invoking the recited operation. Multiple "when" statements may be specified in the behavior part of a particular pattern codification, such as both a "when `apply` . . . " and a "when `detect` . . . ", thereby indicating that different underlying imperative code can be invoked under different conditions.
[0058] FIG. 10 provides sample Java code 1000 that may be invoked responsive to the when clause 971 of FIG. 9. In this example, the class pattern implements a single operation, which is shown through its implementation of the "Detectable" interface. If the participant bound to the "x" role in the "Class" pattern is of type UML class, then the invocation of code 1000 returns a value of "true".
[0059] The association pattern is an atomic pattern that is referenced at 710 and 723 of FIG. 7 (and is shown abstractly at 830 in FIG. 8). In one implementation, if the participants bound to the "x" and "y" roles in the association pattern are related to each other through a UML association, then the invocation of code underlying the association pattern returns a value of "true". Details of the codification and implementation of the association patterns are presented in the related application, and those details are not repeated herein.
[0060] FIG. 11 specifies a sample codification 1100 of the inequality pattern In the example, the inequality pattern is an atomic pattern that is referenced at 710 and 724 of FIG. 7 (and is shown abstractly at 840 in FIG. 8). The "pattern" statement 1120 is prefixed with a "native" attribute and does not specify a "composites" attribute, thereby indicating that this statement 1120 identifies an atomic pattern. A "structure" part 1130 and "behavior" part 1160 are specified, as in FIGS. 4, 7, and 9. The "structure" part 1130 in this example 1100 specifies two roles 1140, having names of "x" and "y" (as also depicted at 840 of FIG. 8), and a "relations" statement 1150 specifies a single relationship named "not-equals" between participants assuming these "x" and "y" roles. A "behavior" definition 1160 specifies operations 1170 of this atomic pattern 1100, and in this example, a single operation is defined. In this particular example, a wildcard "*" 1172 is used as the condition for a "when" clause 1171, indicating that each iteration of this operation will invoke (see 1173) the Java code identified at 1174. In one implementation of this invoked code (details of which are provided in the related application), if the participants bound to the "x" and "y" roles in the inequality pattern are not equal, then the invocation of the underlying code returns a value of "true".
[0061] Using pattern harvesting techniques disclosed herein, presence of patterns in a model can be detected in an automated manner, and these detected patterns can then be used for creating new patterns. Once a user or process has identified the boundary or scope of the candidate pattern occurrence, this is used as input to the harvesting process. The boundary might correspond to a Java package definition or a collection of UML diagrams, by way of example. The harvesting process of a preferred embodiment first performs an automated search to detect all existing pattern occurrences within the domain of model elements identified by the boundary marking action. See also the discussion of FIG. 13, below, which depicts logic which may be used when implementing the harvesting process. (The domain of model elements might comprise, by way of example, a model used for software architecture, design, and implementation; a model used in a requirements management or business process modeling tool; a data model used with audio or video applications; and so forth.) After these existing patterns are detected, the harvesting process determines all overlapping pattern occurrences. The term "overlapping pattern", as used herein, refers to pattern occurrences that share some or all of their respective pattern participants. That is, a pattern "A" overlaps a pattern "B" if a participant assuming a particular role "R1" in pattern "A" also assumes role "R2" in pattern "B". A concrete example of an overlapping pattern is discussed below with reference to the "overlapping barbell" pattern shown in FIG. 12.
[0062] Once the shared participants are determined, these participants are collapsed into a shared role for a new pattern as the pattern occurrence is generalized back to an abstract pattern specification. Non-shared participants are generalized up into the abstract pattern, each as a new non-shared role. Overlapping roles are constrained as such in the behavior section of the newly-codified, or harvested, pattern specification. It will be observed that a sufficient number of existing and recognizable pattern components should be present in the marked boundary, and that the larger the number of such pattern components, the better the results that may be achieved through harvesting.
[0063] When the harvesting process completes, there is immediately a new pattern ready for use. By performing the harvesting as disclosed herein, this process of creating a new pattern may be reduced to hours or even minutes, as contrasted to a manual, human-operated process of the prior art which may require days or even weeks. Depending on the level of detail available in the harvested pattern, a user may customize the pattern by editing the human-readable text of the Prose specification with a text editor; as another approach, a visual editor may be provided through which a user can edit the pattern specification. This customization may comprise refining undetected or improperly generalized semantics. As another example, the automated harvesting may result in variability points the user did not intend for the new pattern to include. In this case, the user has the option to keep certain pattern occurrences concrete, and when rolled-up into the pattern specification, restrict them from being generalized. Also, as yet another example, the harvesting may result in constituent patterns that are of no concern for the pattern creation at-hand. In this case, the harvested component pattern(s) can be selectively ignored when generating the harvested pattern specification.
[0064] FIG. 12 illustrates a pattern 1200 which is referred to herein as the "overlapping barbell" pattern. This pattern 1200 is used herein as an example of a pattern that will be harvested from a domain of model elements, and is composed of two overlapping occurrences 1210, 1220 of the barbell pattern illustrated at 600 of FIG. 6. That is, while a participant "A" assumes the role of left-bell and participant "B" assumes the role of right-bell in a first occurrence 1210 of the barbell pattern, this same participant "B" assumes the role of left-bell in a second occurrence 1220 of the barbell pattern while a different participant "C" assumes the role of right-bell in this second occurrence 1220. (It should also be noted that FIG. 12 may be considered as showing four occurrences of the barbell pattern, because the barbell pattern of the example is sensitive to the order in which the participants are assigned to the roles. Accordingly, occurrence 1210 is distinct from an occurrence where participant "B" assumes the role of left-bell and participant "A" assumes the role of right-bell, and similarly occurrence 1220 is distinct from an occurrence where participant "C" assumes the role of left-bell and participant "B" assumes the role of right-bell.)
[0065] FIG. 12 also illustrates an identifiable yet unnamed association 1215 between the participants in pattern 1210, and an identifiable yet unnamed association 1225 between the participants in pattern 1220. In this example, the association 1225 is depicted as a directed association connecting participant "C" to participant "B". A number of atomic pattern occurrences are also found within the scope of FIG. 12. There are three occurrences of the "class" pattern (one for each of the participants "A", "B", and "C"); the two association pattern occurrences shown at 1215, 1225; and multiple inequality pattern occurrences, indicating pair-wise inequality between each pair of pattern participants (indicating, for example, that participant "A" is not equal to participant "B" in pattern 1210, and that participant "B" is not equal to participant "C" in pattern 1220).
[0066] A scenario using the overlapping barbell pattern with an implementation of the present invention will now be described with reference to the flowchart provided in FIG. 13. To harvest a new pattern, which the end user in the example desires to codify and to name "overlapping barbell", the user directs (Block 1300) a tool implementing the invention to the model elements represented in FIG. 12. This comprises identifying the domain from which the pattern is to be harvested, which is also referred to herein as defining or marking the boundary, and identifying at least one exemplar. It is assumed, for the example scenario, that the user sets three classes, their relationships, and their contents as the boundary/scope for the harvesting operation. (It is also assumed that the classes do not have any attributes or operations.) The user then instructs the tool (Block 1305) to harvest a new pattern--a pattern that specifies the abstraction hinted at by the concrete configuration of model elements exhibited within the marked boundary. The process then detects and records (Block 1310) pattern occurrences which are exhibited within this marked boundary. So, with reference to the model elements in FIG. 12, the two barbell pattern occurrences are detected and recorded, in addition to the three class pattern occurrences, the two association pattern occurrences, and the multiple inequality pattern occurrences.
[0067] Next, the process detects (Block 1315) that participant "A" is involved with a class pattern occurrence, an association pattern occurrence, and a barbell pattern occurrence. These pattern occurrences are therefore candidates for overlapping patterns, as they share some or all of their respective pattern participants. The process also determines (Block 1320) all overlapping pattern occurrences. For discussion purposes, the class, association, and barbell patterns are referred to as "C1", "A1", and "B1", respectively. The process realizes that C1 and A1 are component pattern occurrences comprising the B1 occurrence. Accordingly, the process recognizes that the occurrences C1 and A1 can be ignored in the definition of the new pattern specification because they would be redundant otherwise. (That is, occurrences C1 and A1 are already specified by the appearance of composite pattern occurrence B1.) As the process continues evaluating occurrences and removing redundant ones thereof, it eventually determines that there are three roles in the pattern being harvested. An embodiment of the present invention preferably provides an interface through which meaningful names can be assigned to the harvested pattern, its roles, and so forth. Suppose, for discussion purposes, that the tool presents a graphical user interface through which the user can assign names, and that the user in the example scenario names the three roles "left-bell", "middle-bell", and "right-bell".
[0068] FIG. 14 depicts a sample codification 1400 of the overlapping-barbell pattern, and illustrates output generated by the harvesting process disclosed herein. Preferably, the codification is recorded as a text file; as can be seen in FIG. 14, this codification is human-readable and expressed using the Prose language disclosed in the related application.
[0069] The "library" 1401 and "use" statements 1410 of codification 1400 are as discussed earlier with reference to manually-created patterns. The "pattern" statement 1420 provides a declaration of the overlapping-barbell pattern, providing its name at 1421 and specifying a "composites" attribute that identifies the barbell pattern 1423 and inequality pattern 1424 which are determined during harvesting as being used by this overlapping-barbell pattern. In other words, the overlapping-barbell pattern is defined in terms of (or composed from) the barbell and inequality patterns.
[0070] Overlapping roles are determined among the detected pattern occurrences. For example, a participant "P" may be detected as fulfilling a first role "R1" in an occurrence of the barbell pattern and as fulfilling a second role "R2" in an occurrence of an inequality pattern, and this overlap may be used in deducing information about the pattern being harvested. Preferably, overlapping roles are collapsed into a shared role for the new pattern as the pattern occurrence is generalized back to an abstract pattern specification. Accordingly, the determined roles are recorded (Block 1325) in the "structure" section of the pattern codification. See the structure definition 1430 in FIG. 14. The structure definition is programmatically created during the harvesting, with input from a user for assigning names as noted earlier, and provides the pattern signature for the overlapping-barbell pattern. In this example 1400, the three detected roles are specified in the "roles" portion 1440 of structure definition 1430.
[0071] The harvesting process determines constraints, and records those constraints in the behavior section of the codification of the overlapping-barbell pattern (Block 1330). In the example, the harvesting will determine that "left-bell", "middle-bell", and "right-bell" are constrained by the fact that the class pattern must exist on each of them. (That is, for any set of three domain elements which are proposed for fulfilling the roles "left-bell", "middle-bell", and "right-bell", each of the domain elements must exhibit the class pattern. If they do not, then this set of domain elements cannot exhibit the overlapping barbell pattern.) In addition, the harvesting process will determine that the association pattern must be exhibited between "left-bell" and "middle-bell", and it must also be exhibited between "middle-bell" and "right-bell". The harvesting process will also determine that "left-bell" and "right-bell" must together exhibit the inequality pattern. Other inequalities may be ignored since those become redundant by the barbell pattern.
[0072] Accordingly, "behavior" definition 1460 specifies constraints on occurrences of overlapping-barbell pattern 1400. That is, the syntax specified at 1470 must be in effect (i.e., must be true) for this overlapping-barbell pattern to be applied. In particular, the syntax at 1471 specifies that the "bar" relationship (which is defined, in this example, in the "relations" syntax 750 of FIG. 7) applies to a pair of participants assuming the role of left-bell and middle-bell; the syntax at 1472 specifies that the "bar" relationship also applies to a pair of participants assuming the role of middle-bell and right-bell; and the syntax at 1472 specifies that the "not-equals" relationship (which is presumably defined, in this example, in the "inequality" pattern referenced at 1424) applies to participants assuming the role of left-bell and right-bell (i.e., a single participant cannot fill both roles simultaneously).
[0073] Once the harvesting process accounts for all pattern occurrences in the new pattern specification and the roles have been determined, relations between the roles are inferred and recorded (Block 1335) in the "structure" section of the pattern codification. Relations are preferably inferred by looking at the component pattern occurrences and the behavioral constraints, and then deducing which relations must be present in the new pattern in order for the component occurrences to be completely bindable by real participants at instantiation time. Accordingly, in the example, the relation "overlaps" is specified in the "relations" portion 1450 of structure definition 1430 as a ternary relationship between the three roles 1440.
[0074] A normalization may be performed when determining the relations at Block 1335, whereby several overlapping pattern occurrences are collapsed into fewer pattern occurrences when the multiplicities defined by the component pattern allow this. For example, if the multiplicity for a given relation is one-to-many and the one is shared across pattern occurrences, then this can be collapsed into one occurrence since the one-to-many is still honored by this action. The multiplicities for each relation and additional role cardinalities are preferably set to the most constraining values that still describe the pattern occurrences represented within the marked boundary. (It is also possible that the normalization is performed earlier, at the time when pattern occurrences are detected.)
[0075] Lastly, the harvesting process preferably validates the candidate harvested pattern (Block 1340) by attempting to detect it in the same marked boundary which was set at Block 1300. The candidate pattern is valid if at least one pattern occurrence is detected within the marked boundary with the appropriate participants assuming the roles as set forth by the harvested pattern.
[0076] A user or process may optionally be allowed to further customize the harvested pattern (not shown in FIG. 13), as discussed earlier. In addition to assigning names, the customization may include other operations such as assigning properties. Or, as noted earlier, the user may wish to remove some level of detail from the pattern generated during the harvesting in order to introduce more variability into the pattern specification.
[0077] While the sample overlapping-barbell pattern used in describing operation of the present invention is relatively simple, there may be patterns which are quite complex and for which it would be difficult for a user to determine how to manually create a pattern codification.
[0078] Patterns may be harvested from many different types of domains, as mentioned earlier. Patterns from audio or video data models might be harvested, for example, for music creation or video creation. As another example, spatial patterns of objects might be harvested for use in virtual worlds software. Patterns in documents might be harvested for document creation applications. A number of other scenarios may be envisaged. The harvesting may act upon software elements--such as object-oriented classes--through a metamodel or metamodels that describe the software elements and allow their manipulation. Referring now to FIG. 15, a pattern specification metamodel (or data model) which may be used with an embodiment of the present invention is illustrated therein using UML notation. UML notation is well known to those in the art, and a detailed description herein of FIG. 15 is therefore not deemed necessary.
[0079] An embodiment of the present invention may be deployed in an Eclipse environment, leveraging Eclipse plug-ins, and the metamodel of FIG. 15 may be defined using the Eclipse EMF Ecore metamodel. Eclipse is an open development platform from the Eclipse Foundation. Eclipse and EMF are well known in the art, and a detailed discussion thereof is not deemed necessary herein.
[0080] Referring now to FIG. 16A, an example 1600 of Java code that programmatically constructs two patterns, "pair" and "string", is depicted (where the "pair" pattern composites the "string" pattern, all in the same library, in this example). This sample code manipulates a pattern at the meta-model level, and may be used for detecting a pair of roles where string values are bound in a pattern occurrence to "left" and "right" roles; thus, the "pair" pattern may be harvested from a model having occurrences of the barbell pattern. FIG. 16B shows a sample meta-model pattern representation 1650, representing the same "pair" and "string" patterns using the Prose declarative pattern specification language disclosed herein. As can be seen from FIGS. 16A and 16B, the pattern representation at 1650 is more concise than the programmatically-created code 1600.
[0081] Referring now to FIG. 17, a data processing system 1700 suitable for storing and/or executing program code includes at least one processor 1712 coupled directly or indirectly to memory elements through a system bus 1714. The memory elements can include local memory 1728 employed during actual execution of the program code, bulk storage 1730, and cache memories (not shown) which provide temporary storage of at least some program code in order to reduce the number of times code must be retrieved from bulk storage during execution.
[0082] Input/output ("I/O") devices (including but not limited to keyboards 1718, displays 1724, pointing devices 1720, other interface devices 1722, etc.) can be coupled to the system either directly or through intervening I/O controllers or adapters (1716, 1726).
[0083] Network adapters may also be coupled to the system to enable the data processing system to become coupled to other data processing systems or remote printers or storage devices through intervening private or public networks (as shown generally at 1732). Modems, cable modem attachments, wireless adapters, and Ethernet cards are just a few of the currently-available types of network adapters.
[0084] FIG. 18 illustrates a data processing network environment 1800 in which the present invention may be practiced. The data processing network 1800 may include a plurality of individual networks, such as wireless network 1842 and wired network 1844. A plurality of wireless devices 1810 may communicate over wireless network 1842, and a plurality of wired devices, shown in the figure (by way of illustration) as workstations 1811, may communicate over network 1844. Additionally, as those skilled in the art will appreciate, one or more local area networks ("LANs") may be included (not shown), where a LAN may comprise a plurality of devices coupled to a host processor.
[0085] Still referring to FIG. 18, the networks 1842 and 1844 may also include mainframe computers or servers, such as a gateway computer 1846 or application server 1847 (which may access a data repository 1848). A gateway computer 1846 serves as a point of entry into each network, such as network 1844. The gateway 1846 may be preferably coupled to another network 1842 by means of a communications link 1850a. The gateway 1846 may also be directly coupled to one or more player devices 1811 using a communications link 1850b, 1850c, and/or may be indirectly coupled to such devices. The gateway computer 1846 may be implemented utilizing an Enterprise Systems Architecture/390® computer available from IBM. Depending on the application, a midrange computer, such as an Application System/400® (also known as an AS/400®), iSeries®, System i®, and so forth may be employed. ("Enterprise Systems Architecture/390", "Application System/400", "AS/400", and "iSeries" are registered trademarks of IBM in the United States, other countries, or both, and "System i" is a trademark of IBM.)
[0086] The gateway computer 1846 may also be coupled 1849 to a storage device (such as data repository 1848).
[0087] Those skilled in the art will appreciate that the gateway computer 1846 may be located a great geographic distance from the network 1842, and similarly, the player devices 1810a, 1811a and/or other devices 1810b, 1811b may be located some distance from the networks 1842 and 1844, respectively. For example, the network 1842 may be located in California, while the gateway 1846 may be located in Texas, and one or more of the player devices 1810a may be located in Florida. The player devices 1810a may connect to the wireless network 1842 using a networking protocol such as the Transmission Control Protocol/Internet Protocol ("TCP/IP") over a number of alternative connection media, such as cellular phone, radio frequency networks, satellite networks, etc. The wireless network 1842 preferably connects to the gateway 1846 using a network connection 1850a such as TCP or User Datagram Protocol ("UDP") over IP, X.25, Frame Relay, Integrated Services Digital Network ("ISDN"), Public Switched Telephone Network ("PSTN"), etc. The player devices 1811a may connect directly to the gateway 1846 using dial connections 1850b or 1850c. Further, the wireless network 1842 and network 1844 may connect to one or more other networks (not shown), in an analogous manner to that depicted in FIG. 18.
[0088] As will be appreciated by one skilled in the art, aspects of the present invention may be embodied as a system, method, or computer program product. Accordingly, aspects of the present invention may take the form of an entirely hardware embodiment, an entirely software embodiment (including firmware, resident software, micro-code, etc.), or an embodiment combining software and hardware aspects that may all generally be referred to herein as a "circuit," "module", or "system". Furthermore, aspects of the present invention may take the form of a computer program product embodied in one or more computer readable media having computer readable program code embodied thereon.
[0089] Any combination of one or more computer readable media may be utilized. The computer readable medium may be a computer readable signal medium or a computer readable storage medium. A computer readable storage medium may be, for example, but 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 (a non-exhaustive list) of the computer readable storage medium would include the following: 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), a portable compact disc read-only memory ("CD-ROM"), DVD, an optical storage device, a magnetic storage device, or any suitable combination of the foregoing. In the context of this document, 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.
[0090] A computer readable signal medium may include a propagated data signal with computer readable program code embodied therein, for example, in baseband or as part of a carrier wave. Such a propagated signal may take any of a variety of forms, including, but not limited to, electro-magnetic, optical, or any suitable combination thereof. A computer readable signal medium may 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.
[0091] Program code embodied on a computer readable medium may be transmitted using any appropriate medium, including but not limited to wireless, wireline, optical fiber cable, radio frequency, etc., or any suitable combination of the foregoing.
[0092] Computer program code for carrying out operations for aspects of the present invention may be written in any combination of one or more programming languages, including the declarative Prose language disclosed in the related application; an object oriented programming language such as Java, Smalltalk, C++, or the like; and conventional procedural programming languages such as the "C" programming language or similar programming languages. The program code may execute as a stand-alone software package, and may execute partly on the user's playback device and partly on a remote computer associated with the rental media provider. The remote computer may be connected to the user's playback device through any type of network, including a local area network ("LAN"), a wide area network ("WAN"), or through the Internet using an Internet Service Provider.
[0093] Aspects of the present invention are described above with reference to flow diagrams and/or block diagrams of methods, apparatus (systems), and computer program products according to embodiments of the invention. It will be understood that each flow or block of the flow diagrams and/or block diagrams, and combinations of flows or blocks in the flow diagrams and/or block diagrams, can be implemented by computer program instructions. These computer program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flow diagram flow or flows and/or block diagram block or blocks.
[0094] These computer program instructions may also be stored in a computer readable medium that can direct a computer, other programmable data processing apparatus, or other devices to function in a particular manner, such that the instructions stored in the computer readable medium produce an article of manufacture including instructions which implement the function/act specified in the flow diagram flow or flows and/or block diagram block or blocks.
[0095] The computer program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other devices to cause a series of operational steps to be performed on the computer, other programmable apparatus, or other devices to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide processes for implementing the functions/acts specified in the flow diagram flow or flows and/or block diagram block or blocks.
[0096] Flow diagrams and/or block diagrams presented in the figures herein illustrate the architecture, functionality, and operation of possible implementations of systems, methods, and computer program products according to various embodiments of the present invention. In this regard, each flow or block in the flow diagrams 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 flows and/or blocks 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 each flow of the flow diagrams, and combinations of blocks in the block diagrams and/or flows in the flow diagrams, may be implemented by special purpose hardware-based systems that perform the specified functions or acts, or combinations of special purpose hardware and computer instructions.
[0097] While embodiments of the present invention have been described, additional variations and modifications in those embodiments may occur to those skilled in the art once they learn of the basic inventive concepts. Therefore, it is intended that the appended claims shall be construed to include the described embodiments and all such variations and modifications as fall within the spirit and scope of the invention.
Patent applications by Scott E. Schneider, Rolesville, NC US
Patent applications by International Business Machines Corporation
Patent applications in class Code generation
Patent applications in all subclasses Code generation
User Contributions:
Comment about this patent or add new information about this topic:


text:
Zach Miller
Ben Ayres
Zach MillerStill reeling from the death of his best friend last season, E.R. doctor and resident ladies man Dr. Zach Miller is coping with life without Dr. Joel Goran the only way he knows how: work and women. Leaning on his devil-may-care attitude and personal motto of "Treat 'em and street 'em" – part of his commitment to medicinal excellence and personal philandering – it will take the patients he's quick to discharge, and the doctors he's quick to dismiss, to get him to confront his inability to process the trauma of losing his friend.
Ben AyresBenjamin Ayres is a leading performer in the film and television industry, well known for slipping seamlessly between genres. After two seasons as a series regular on the CTV hit series "Dan For Mayor," Ayres nabbed the role of Dr. Zachary Miller in the highly acclaimed CTV original series "Saving Hope." He also plays Eric Blake on HBO Canada's Gemini Award-winning series "Less Than Kind," for which Ayres recently received a Canadian Screen Award nomination. He also played the chain-smoking sex addict with a morbid death obsession in "Jpop," based on the Douglas Coupland novel of the same name. The role garnered Ayres a Leo nomination in 2008.
During his early twenties, Ayres studied at The Lyric School of Acting under the direct mentorship of studio head Michele Lonsdale Smith. He later collaborated with her as a performer in a wide range of theatrical productions; including multiple mountings of Eric Bogosian's one man play "Sex, Drugs, Rock & Roll," Judith Thompson's "Lion in the Streets," and August Strindberg's "Miss Julie." Ayres became one of Vancouver's most in-demand stage actors and was approached to originate the role of Tench in the world premiere of Raul Inglis's In "The Eyes of God," and again in Inglis's next original play, "Surveillance."
Ayres has also appeared in various guest starring and recurring roles on the following hit series: "Bitten," "Lost Girl," "The Vampire Diaries." "Flashpoint," "Combat Hospital," "Smallville," "Battlestar Galactica," and the miniseries "Diamonds and Impact."

subset: commoncrawl


text:
$$\frac{\mathrm d^2y}{\mathrm dt^2} + p\frac{\mathrm dy}{\mathrm dt} + qy = 0$$
If the eigenvalues are complex, what conditions on $p$ and $q$ guarantee that solutions spiral around the origin in a clockwise direction ?
I found the eigenvalues to be: $\lambda = -\frac{p}{2} \pm \frac{\sqrt{p^2 - 4q}}{2}$
and not sure how we can answer this. All I note that if $p > 0$ and $p^2 - 4q < 0$, then we have a spiral sink. How does it help me if I can get conditions for spiral sink or source and match their directions (counterclockwise or clockwise) when the problem indicates we are able to do this without the use of technology sketching a phase portrait?


text:
Occasionally (ok more than occasionally) old habits take over and I add an extra space after punctuation. I've been writing in the visual editor lately and I've noticed rather than strip that extra space after a period it adds a
tag, even when I switch to the HTML editor. As a result this causes formatting issues.
Is this normal behavior for the visual editor, or could a theme/plugin be screwing with things? It used to be that I had to actually add the code
in the HTML editor to force additional spaces, but now that no longer seems to be true.


text:
Jack Black in a 1980's Atari commercial
(via Hypervocal)
Bored? Well, snap out of it sister! There's no excuse when the answer is so simple. You have email, right? Facebook? Subscribe to 22Words and things are gonna get a whole lot better for you. That's a promise.
Stop Moaning. Get the Antidote. Fight Boredom!Fight Boredom
Continue Reading After This Advertisement
Not only is Disney World one of the happiest places on Earth, but it also turns out that it's one of the most interesting.
You might think you know everything about the park in Orlando, Florida, but do you know how much the first ticket cost? How much Coca-Cola is consumed there each year?
You will after you read this post, so let's enter the magical gates...
Continue Reading After This Advertisement
Continue Reading After This Advertisement


text:
Comments about 'Utah Jazz notebook: Mehmet Okur gets OK to return to practice on limited basis'
- Oldest first
- Newest first
- Most recommended
Okur is a good guy. I feel bad for him. We could use his outside threat in a
big way.
He used to be the iron-man for the Jazz but now he is undoing that in a big way.
$10 million for this season and the team got nothing for it in terms of on the court results.
While Okur and Boozer were never going to win it for us, at least they kept us in the top 5 in rebounding for the NBA.
Guess where we are now with Millsap and Jefferson as replacements?
28th out of 30 teams!
Now you know why we have gone into a tailspin. If you can't rebound the ball it means teams get 2-3 chances to score and your offense starts by taking the ball out under the basket.
So much for early offense and easy baskets on the fast-break.
The domino effect of rebounding has taken its toll.
Game after game Millsap and Jefferson don't box out. They have had a few games where they have made more effort recently but as a body of work they both stink and our results (wins) prove it.
- 1:12 p.m. March 2, 2011
- Like (1)
- Report abuse
Wonder if the best idea is for Millsap to be the talented 6th man that he is?
- 2:27 p.m. March 2, 2011
- Like
- Report abuse
Memo could only help this current team. His outside shooting is sorely missed.
However, I do not think he will lace them up the rest of the season.
Millsap needs to be traded or go to a reserve role. Jefferson and he together on the floor has been a huge disaster. I think we let the wrong player go to Portland.
- 2:32 p.m. March 2, 2011
- Like
- Report abuse
To Jazz Source:
Great comments!
If we were to add the rebound totals of AK to thouse of AJ & PM I think we would be even worse?
- 2:55 p.m. March 2, 2011
- Like
- Report abuse
Time for a buy out? I loved Memo in his good years, but those good years seem to be long gone. I think paying Okur 10 million would be a huge mistake next year, but that is what he is contracted to rake in. I know the Jazz get insurance money when a player misses games, so that helps this year, but can the Jazz afford to keep him on the roster? Time will tell. I actually am rooting for the big guy, I think he adds length and rebounding and scoring to this team, which I think we all can agree that this team is in desperate need of scoring from the perimeter, but for 10 million, I would rather have a guy like Igudala from the sixers, or a higher caliber shooting guard. Any thoughts?
- 3:09 p.m. March 2, 2011
- Like
- Report abuse
Nation: I wish he would retire but no one in their right mind is walking away
from 10 million next year. The only thing the Jazz have going from them is he
is good trade bait due to his expiring contract next year. But that won't happen
until the trade deadline next season.
Back problems are things that don't go away. Surgery doesn't fix it. Plus he just came off major surgery on his leg. Doesn't look good for a complete return.
So all the Jazz can hope for is that there is an unhappy shooting guard out there with a longer term contract that the Jazz can take on through a trade. Or perhaps they can package him with Millsap and send him on his way sooner rather than later.
- 3:56 p.m. March 2, 2011
- Like
- Report abuse
What's this I hear about KOC watching Entes Kanter work out???? I think Okur may be officially done.
- 4:24 p.m. March 2, 2011
- Like (1)
- Report abuse
Okur will be fine if he can just get into game shape. He has always been an okay rebounder. He does have some post moves. His outside shooting is his biggest asset and that should come back faster than rebounding.
- 5:31 p.m. March 2, 2011
- Like
- Report abuse
Oh, grand. I can't wait to see how this turns out.
- 8:02 p.m. March 2, 2011
- Like
- Report abuse
Thought it was a bad idea to resign Okur (Kevin mistake). Not sure how he fits in with the Jazz now. We need Favors to get some playing time and Millsap and Jefferson are legit starters. I think the Jazz will have to trade Millsap eventually and they should get a good return for him (hopefully we trade for Matthews (Kevin mistake). Love you Money Man!
- 10:45 p.m. March 2, 2011
- Like
- Report abuse
I say make Okur the captain...the Jazz trade them away
- 2:35 p.m. March 3, 2011
- Like
- Report abuse
We should have shopped Millsap to sacramento...for their first round pick and Omri Casspi or Francisco Garcia...
- 12:03 a.m. March 4, 2011
- Like
- Report abuse
We should have traded Okur when we could have.. throw Ak in there and get a guy that can make a layup at the end of a game... Who knows maybe we could get a good number 2 in exchange for Okur and his lil suit he wears every night and his shined shoes. Come on man, if your back hurts retire and free up our salary space!
- 11:56 a.m. March 4, 2011
- Like
- Report abuse
DeseretNews.com encourages a civil dialogue among its readers. We welcome your thoughtful comments.
— About comments
- ACC, ESPN extend deal to 2036 that includes...
- NBA moving All-Star Game out of Charlotte,...
- Brazil nabs 10 IS backers in Olympics...
- Oklahoma State forward Tyrek Coger dies after...
- Jeff Gordon readies for the Brickyard in...
- Froome crashes in Tour, finishes stage with...
- Former NFL coach Dennis Green dies at 67
- Warriors' Draymond Green settles assault case...
- Morning links: National college... 93
- BYU football: Certain games on the... 87
- Report: Tom Holmoe tells Big 12 he's... 75
- Finding a Power 5 home for all BYU... 55
- Annual instate college basketball... 38
- BYU football coaching staff upbeat... 34
- Former BYU QB Max Hall confronts... 31
- NBA moving All-Star Game out of... 20


text:
Look Out – Blizzard
App Developer: The App Company
Version Reviewed: 1.0.1
License: US$0.99 – Universal App. Compatible with iPhone, iPod touch, and iPad. Requires iOS 4.3 or later. This app is optimized for iPhone 5.
If you like fluffy snow balls and maze games, then you are going to love Look Out – Blizzard.
You assume the role of the defenseless little snowball and it is your aim to guide it to safety. Sounds simple enough, doesn't it? It would be, if it were not for fireballs and electrified obstacles doing their best to prevent you from succeeding. Not to mention droplets of water that will have you slipping everywhere, and rocks that will slow you down.
Continue reading »
Continue reading »
About Mark Greentree
Mark Greentree is the principle blogger and podcast creator of www.everydaymacsupport.com. His aim is to inform users at all levels of experience how to get the most out of the Apple hardware and associated software. He is also the lead host on Not Another Mac Podcast, an Apple based round table discussion with Mac users and experts from all over world.
- Web |
- More Posts (59)
Blue Microphones
Price: $99.99 on Blue Microphones web site, less on Amazon
About Elisa Pacelli
Elisa is a wife, mother to 3 boys, "creative genius", and all-around techno geek. She enjoys reading, quilting, knitting, cruising to Caribbean beaches, and learning new things in the technology world. In the evenings Elisa can be found knitting while listening to podcasts or watching Netflix on her iPad. Listen to her podcast, 3 Geeky Ladies, co hosted with Suzé Gilbert and Vicki Stokes.
- Web |
- More Posts (168)


text:
eSports page added to StarCraft II website
StarCraft tournaments are popular occurrences, and Blizzard wants you to be able to keep up with the schedule. If you venture over to the StarCraft website, you'll notice the Esport section which details the various tournaments occurring or coming up. Next up are the Brazil Nationals which take place may 5 through May 6. Thanks, Talkar.
Sometimes we include links to online retail stores. If you click on one and make a purchase we may receive a small commission. For more information, go here.


text:
Unified auditions for local actors
Published: Sunday, February 13, 2005 at 4:30 a.m.
Last Modified: Sunday, February 13, 2005 at 12:00 a.m.
ASHEVILLE -- Asheville-Buncombe Technical Community College will host the 2005 Western North Carolina Theatre League Unified Auditions Wednesday, Feb. 23 and Saturday, Feb. 26. The annual event allows local actors to showcase their talents in a professional audition setting for a variety of companies.
The schedule for the Unified Auditions is as follows:
There will also be professional seminars throughout the day.
The Unified Auditions will be held at Ferguson Auditorium on the campus of A-B Tech.
Actors are asked to prepare 90 seconds of material: one monologue or two contrasting monologues or a monologue and 16 bars of a song. An accompanist will be available. Participants should provide their own sheet music in their key, as the accompanist will not transpose. Children should present a memorized selection, poem, rhyme, monologue and, if they wish, sing a song. Singing to tapes is not allowed.
Pre-register by e-mailing firstname.lastname@example.com Please indicate your preference for Wednesday evening, Saturday morning (children only), or Saturday afternoon. Registration begins at 5 p.m. Wednesday, Feb. 23, 9:30 a.m. (for children only) Saturday morning and 12:30 p.m. Saturday afternoon. An instructional meeting will take place approximately 15 minutes before each audition session.
Reader comments posted to this article may be published in our print edition. All rights reserved. This copyrighted material may not be re-published without permission. Links are encouraged.
Comments are currently unavailable on this article


text:
Obamas Attend Dance Recital for Daughter Sasha in Montgomery CountyPresident Barack Obama and first lady Michelle Obama attended their youngest daughter's dance recital at an arts center in the Maryland suburbs of the capital.
O.A.R. Returns Home to HelpIn the wake of Friday's tragedy in Newtown, Conn., a band of homegrown superstars took to the stage to bring a little bit of relief — if only for a few hours.
Best Bets For Live Music On Valentine's Day Around DC
Best Budget Arts And Culture Events In DCExplore these enriching cultural options in DC that provide exceptional artistic experiences for the entire family at a low price.


text:
Established 1971
Head Coach
Tucker Bitting
Varsity Assistant Coach
Reynae Hutchinson
Junior Varsity Head Coach
Tamea Brinson
Freshman Head Coach
Morgan Seaman '17
Miami (OH) University
Carly Cason '16
Stony Brook University
Kari Truax '16
Wittenberg University
Mckenzie Kiesle '15
Univ. of Rhode Island
Jamie Scherb '15
Univ. of Tenn-Martin
Carly Skodjt '15
University of Michigan
© 2016 CCS All Rights Reserved
Web Design by LightSky


text:
Gallstones have occurred in laboratory animals only after certain artificial conditions are met. Shortly after 1950, it was found that a colony of deer mouse (Peromyscus maniculatus) occasionally bore gallstones spontaneously.1 This provided a unique opportunity to investigate gallstones occurring naturally in a suitable laboratory animal. A colony of 6,416 of these animals was maintained over an eight-year period, and examination of the records of this colony has revealed groups in which there is a higher incidence of gallstones than in others. Maintenance of this colony provides the opportunity to study chemical and hormonal as well as genetic factors influencing formation of stones in this species.
The American deer mouse is one of the most widely distributed animals on the North American continent. It ranges from the Atlantic to the Pacific oceans and from the Arctic Circle to the Isthmus of Tehuantepec. Peromyscus maniculatus has been modified into more
Thank you for submitting a comment on this article. It will be reviewed by JAMA Surgery editors. You will be notified when your comment has been published. Comments should not exceed 500 words of text and 10 references.
Do not submit personal medical questions or information that could identify a specific patient, questions about a particular case, or general inquiries to an author. Only content that has not been published, posted, or submitted elsewhere should be submitted. By submitting this Comment, you and any coauthors transfer copyright to the journal if your Comment is posted.
* = Required Field
Disclosure of Any Conflicts of Interest*
Indicate all relevant conflicts of interest of each author below, including all relevant financial interests, activities, and relationships within the past 3 years including, but not limited to, employment, affiliation, grants or funding, consultancies, honoraria or payment, speakers' bureaus, stock ownership or options, expert testimony, royalties, donation of medical equipment, or patents planned, pending, or issued. If all authors have none, check "No potential conflicts or relevant financial interests" in the box below. Please also indicate any funding received in support of this work. The information will be posted with your response.
Some tools below are only available to our subscribers or users with an online account.
Download citation file:
Customize your page view by dragging & repositioning the boxes below.
More Listings atJAMACareerCenter.com >
Enter your username and email address. We'll send you a link to reset your password.
Enter your username and email address. We'll send instructions on how to reset your password to the email address we have on record.
Need assistance?
Athens and Shibboleth are access management services that provide single sign-on to protected resources. They replace the multiple user names and passwords necessary to access subscription-based content with a single user name and password that can be entered once per session. It operates independently of a user's location or IP address. If your institution uses Athens or Shibboleth authentication, please contact your site administrator to receive your user name and password.


text:
WunderPhotos Upload
Forest Dew in B&W
Uploaded by: algoressister
Thursday March 13, 2014
North Bend, OR (Current Weather Conditions)
Caption:No caption given.
Manufacturer: FUJIFILM
Model: FinePix S4000
x-Resolution: 72.00
y-Resolution: 72.00
Resolution Unit: Inch
Software: Digital Camera FinePix S4000 Ver1.02
Artist: Picasa
YCbCr Positioning: co-sited
Copyright: [None] (Photographer) - (Editor)
PRINT Image Matching: 28 bytes undefined data
Compression: JPEG compression
Exposure Time: 1/45 sec.
FNumber: f/4.2
Exposure Program: Normal program
ISO Speed Ratings: 64
Exif Version: Unknown Exif Version
Components Configuration: Y Cb Cr -
Compressed Bits per Pixel: 2.00
Shutter speed: 5.50 EV (APEX: 6, 1/45 sec.)
Aperture: 4.14 EV (f/4.2)
Brightness: 5.27 EV (132.21 cd/m^2)
Exposure Bias: 0.00 EV
MaxApertureValue: 3.26 EV (f/3.1)
Metering Mode: Pattern
Light Source: 0
Flash: Flash did not fire, compulsory flash mode.
Focal Length: 9.1 mm
FlashPixVersion: FlashPix Version 1.0
Color Space: sRGB
PixelXDimension: 1024
PixelYDimension: 625
Focal Plane x-Resolution: 6992.00
Focal Plane y-Resolution: 6992.00
Focal Plane Resolution Unit: Centimeter
Sensing Method: One-chip color area sensor
File Source: DSC
Scene Type: 1
Custom Rendered: Normal process
Exposure Mode: Auto exposure
White Balance: Auto white balance
Scene Capture Type: Standard
Sharpness: Normal
Subject Distance Range: Unknown
Image Unique ID: 368172af0ed8906f1ca7da266e70c49d
InteroperabilityIndex: R98
InteroperabilityVersion: 0100
RelatedImageWidth: 4288
RelatedImageLength: 3216
March 13, 2014 Photo Series
Viewer Comments
You must be signed in to leave comments.
Sign In or Register Sign In or Register
Members can leave comments, upload and share photos in our Wunder Photos section and participate on the WunderBlogs.
About algoressister
Recent Comments for algoressister
(5 hours ago)view 2 comments »
(11 days ago)view 1 comment »
(12 days ago)view 1 comment »
(16 days ago)view 2 comments »
(23 days ago)view 2 comments »
(24 days ago)view 4 comments »
(25 days ago)view 1 comment »
(27 days ago)view 1 comment »
(30 days ago)view 1 comment »
(31 days ago)view 2 comments »


text:
Google's 8 Biggest App And Gadget Flops
Steve Kovach, Business InsiderGoogle seems to be dipping into just about everything these days.
From self-driving cars to augmented reality glasses, it's clear the company isn't just about search any more.
While those projects sound cool, there are several recent gadgets and apps from Google that have either completely failed or still haven't taken off with the public. We put together the biggest of those flops.
Comments on this post are now closed.


text:
Even though we ARE Nikon lovers,we are NOT affiliated with Nikon Corp. in any way.
Already have an account? Login
Boise, US
57 posts
"RE: New CLS Preflash Sequence Images"
>Max,>>I read your discussion about how multiple remote flashes>operate.>>My results were quite different. Whenever two remote TTL>flashes overlapped, the image did increase in brightness by>about 0.7 stops(assuming both were set to the same power).>>Here are a couple of things I have noticed:>>1) Books with shiny covers are not good subjects when you are>up close. The reflected specular highlights can cause the>flash power to decrease unpredictably. This doesn't make a big>difference, but it might partially explain why your test>didn't show much brightness increase when you used two>overlapping flashes.>>2) It's not usually a good idea to use use TTL-BL when on the>SC-28 cord. The TTL-BL equations require that the distance>from the subject to the camera equals the distance of the>subject to the flash. Also, TTL-BL works best when the camera>and flash are colocated. The background ambient must be the>same for the flash as for the camera. Bright areas in the>background (a window allowing outside light for instance) from>the camera position will cause the flash power to increase to>try to balance with it, but if the flash is not co-located>with the camera and pointed in the same direction, its power>may be increased drastically trying to balance the area that>the camera sees.>>3) TTL on the SC-28 cord works normally, as though the flash>were mounted on the camera.>Russ,Thanks for your comment. I noticed the specular reflection in the initial tests so in the second batch of the tests I tried to avoid them by arranging the camera-subject-flash angles. I originally shot just the wall and the results were similar.In the tests, I changed the mode on the flash to TTL (no BL) when shooting with the SC-28 connection. I will do some more tests to investigate this further.Max
Visit My Blog. Visit My Nikonians Gallery.
Visit my Nikonians gallery.


text:
Excavators are seen during rescue operations at an industrial estate hit by a landslide in Shenzhen, Guangdong province, China
© The Financial Times Ltd 2016 FT and 'Financial Times' are trademarks of The Financial Times Ltd.
Excavators are seen during rescue operations at an industrial estate hit by a landslide in Shenzhen, Guangdong province, China
A Chinese woman wearing a mask walks in a shopping street during a hazy day in Beijing city, China, on Tuesday. Beijing issued a red alert for smog, urging schools to close and residents to stay indoors for the second time in 10 days
Rescuers search for potential survivors following a landslide at an industrial park in Shenzhen, in south China's Guangdong province, Tuesday
Rescue workers search for survivors in the aftermath of a landslide in Shenzhen in southern China's Guangdong province Monday. The massive landslide buried dozens of buildings when it swept through an industrial park in the Chinese cit
A woman wears a mask as she visits the Forbidden City during a sunny day in Beijing Friday. Residents in the Chinese capital are preparing for its second smog red alert as a wave of smog is forecasted to settle over the city
A man walks past steam rising from underground heating pipes outside a shopping mall in Beijing
Chinese Paramilitary guards stand on the stairs after Sheikh Mohammed bin Zayed al-Nahyan, Crown Prince of Abu Dhabi and UAE's deputy commander-in-chief of the armed forces leaves the Great Hall of the People in Beijing on Monday
Members from North Korea's Moranbong band walk out of their hotel in Beijing on Friday. North Korea's premier pop group, the all-girl Moranbong band formed by leader Kim Jong-Un, is electrifying audiences in China
A paramilitary policeman wearing a mask stands guard in front of the giant portrait of Chinese late chairman Mao Zedong, amid heavy smog after the city issued its first ever "red alert" for air pollution in Beijing, China
A woman wearing a mask to protect against smog poses for photos at the Temple of Heaven Park in Beijing, China
Chinese man wears a protective face mask as he passes by the CCTV building on a day of heavy pollution on Monday in Beijing, China. China's capital and many cities in the northern part of the country recorded the worst smog of the year with air quality devices in some areas unable to read such high levels of pollutants
A Chinese tourist walks in the tongue of Glacier 1 at the base of the 7,556 m (24,790 ft) Mount Gongga, known in Tibet as Minya Konka. Hailuogou is one of China's 8,500 monsoonal glaciers and the longest of 71 glaciers on the eastern slope of Mt. Gongga
Two Chinese J-10 aircraft from the People's Liberation Army Air Force cross each other during the combined exercise "Falcon Strike 2015" at the Wing 1 Korat air base in Korat on Tuesday. Thailand and China have been conducting their first ever joint air force drill, a symbol of the blossoming military and political ties between junta-run kingdom and its huge northern neighbour
Visitors watch a robot demonstration during the World Robot Conference in Beijing on Tuesday
Chinese tourists walk on a slippery section of ice as snow is seen on the Great Wall after a snowfall on Monday near Beijing, China
Mother of a fireman Zhang Qian who killed in the Tianjin chemical explosions accident, grieves on her son's tombstone at the 100th days memorial in a martyr's cemetery in Tianjin city, China, on Thursday
Workers walk past a billboard display showing a scene of Central Business District, as capital city skylines are shrouded with pollutant haze in Beijing, China
Anna Cappellini and Luca Lanotte of Italy compete at the ice dance during the China ISU Grand Prix of Figure Skating, in Beijing, China, on Friday
Women practice yoga during a performance on a glass bridge at the Shiniuzhai National Geo-park in Pingjiang county, Hunan province, China on Thursday