text:
|Publication number
|Publication type
|Application number
|Publication date
|Mar 5, 2002
|Filing date
|Sep 22, 1999
|Priority date
|Sep 22, 1999
|Fee status
|Publication number
|Raymond Paul Stata, Cormac Flanagan, K. Rustan M. Leino, Mark D. Lillibridge, James Benjamin Saxe
|Original Assignee
|Compaq Computer Corporation
|Export Citation
|BiBTeX, EndNote, RefMan
|Patent Citations (13), Non-Patent Citations (4), Referenced by (89), Classifications (5), Legal Events (8)
|External Links: USPTO, USPTO Assignment, Espacenet
The present invention relates generally to compilers and program analyzers, and more particularly to an improved system and method for lexing and parsing computer programs that include tool-specific annotations.
A compiler or a source-level program analyzer is capable of parsing source programs, which are written in a particular programming-language. Compilers generally include a lexer and a parser. Similarly, other types of programming tools include a lexer and parser. The lexer reads the source-level program and generates tokens based upon the programming-language statements in the source-level program. The lexer passes the generated tokens to the parser, which assembles the tokens into an abstract syntax tree (AST). The abstract syntax tree is further processed by one or more tools, such as a compiler back-end or a program correctness tester.
Tool specific annotations are typically used in the source program to give the tools special instructions; for example, "generate the following machine code instruction at this point in the target code," "generate code that uses a machine register for this program variable," "ignore possible errors of type x in this program statement," or "check that this parameter is always a non-zero integer." As new tools are devised, and as new features are added to those tools, the lexer and parser used by the tools will often require corresponding revisions.
The present invention addresses the problem of revising the lexer and parser for a programming-language when new tools are created, or new annotation-based features are added to tools. In particular, using the present invention, tool-specific annotations are effectively separated from programming-language-specific statements. Further, the present invention makes it relatively simple to implement a wide range of tool-specific annotations, including annotations that employ a complex programming-language.
Two conventional approaches that allow tool-specific annotations are known. In a first approach, tool-specific annotations are recognized and processed by the lexer. In a second approach, tool-specific annotations are recognized and processed by the parser.
An example of the first conventional approach to supporting tool-specific annotations is the way a "#line N" tool-specific annotation may be handled by a C compiler. There, the C compiler lexer may keep track of the line number information of every token it recognizes. If the C compiler lexer reads the "#line N" annotation, then the C compiler lexer changes an internal counter to N, as if the next line were N, and proceeds to read the next token. Since the lexical structure of the "#line N" is so simple, a standard lexer, such as the C compiler lexer, can recognize the tool-specific annotation.
An example of the second conventional approach to supporting tool-specific annotations in a compiler is the way a compiler for the Modula-3 language handles an "<* ASSERT P *>" tool-specific annotation. It is treated as if it were a Modula-3 program statement. Although "P" is an expression, it can be parsed appropriately because the annotation is recognized by the Modula-3 parser.
The conventional methods for recognizing tool-specific annotations, while functional, are less than satisfactory in practice. If a new tool (such as a type-checker or an error-checker) is created for a particular programming-language, extensive recoding of the standard programming-language lexer and parser may be required to handle program annotations specific to that tool. Even a simple modification made to the syntax of the annotations used by an existing tool may require extensive modification of the lexer and parser of that tool.
In the system and methods of the present invention, tool-specific annotations are recognized by the lexer for the programming-language, but the lexing and parsing of the tool-specific annotations are handled by a separate, tool-specific annotation processor.
A compiler or other programming tool includes a lexer capable of detecting computer programming-language units present in a character stream. The lexer generates a stream of tokens based upon these units. The lexer is further capable of detecting the units of computer programming-language statements such as identifiers. As the lexer detects tool-specific annotations in the character stream, it passes them to the back-end annotation processor. The back-end annotation processor is designed to lex and parse the annotations for a specific tool (or set of tools). In a system having a plurality of tools that use different tool-specific annotations, the back-end of the system will have a corresponding set of tool-specific annotation processors.
When the back-end annotation processor receives a tool-specific annotation from the lexer, the annotation processor generates an annotation token based upon the tool-specific annotation and returns the annotation token to the lexer. The lexer in turn adds the annotation token to the end of a list of tokens it has generated so far. The lexer passes the mixed stream of tokens, some generated within the lexer, and some generated by the back-end annotation processor, to the parser. The parser assembles the stream of tokens and annotation tokens into an abstract syntax tree and passes the tree to the aforementioned tool. The tool processes the annotation tokens as well as the other tokens in the abstract syntax tree.
In a preferred embodiment, at least one of the annotation processors has the capability of generating an annotation token that includes an abstract syntax tree within the annotation token. The abstract syntax tree within the annotation token may be referred to as a secondary abstract syntax tree and the abstract syntax tree assembled by the parser may be referred to as the primary abstract syntax tree. In this embodiment, the annotation token including a secondary abstract syntax tree is incorporated into the primary abstract tree in a context-sensitive manner by the parser.
In a preferred embodiment, an annotation processor includes an annotation lexer and an annotation parser. Preferably, the annotation lexer is context-free and the annotation parser is context-sensitive.
Additional objects and features of the invention will be more readily apparent from the following detailed description and appended claims when taken in conjunction with the drawings, in which:
FIG. 1 is a flow chart of a method in accordance with the present invention.
FIG. 2 is a block diagram of a system in accordance with the present invention.
FIGS. 3A and 3C are examples of parse trees. FIG. 3B is the AST representation of FIG. 3A and FIG. 3D is the AST representation of FIG. 3C.
FIG. 4A is an example of an annotation token and FIGS. 4B and 4C provide examples of how an annotation token is incorporated into an abstract syntax tree.
FIGS. 5A and 5B are examples of annotation classes.
Consider a system that takes as input a computer program and processes the program in some way. Examples of such systems are compilers, type checkers, lint-like program checkers, extended static checkers, program verifiers, program documentation systems, and the like. The input computer program may be written in a standard programming-language, but the programming tool may need additional information provided by the programmer and specific to the tool.
Therefore, annotations can be defined for the tool. If the annotation language is defined as an extension of an existing programming-language, then one would want the implementation of the programming tool's parser to be defined as an extension of the parser for the standard programming-language, as much as possible.
FIG. 1 shows the data flow 100 of an implementation of a method that converts an input program into a data structure that a tool can then manipulate and analyze. A source file 102 is read by a lexer 104. Lexer 104 recognizes programming-language units in source file 102 and generates tokens representing these units. Lexer 104 also detects annotations in source file 102. When lexer 104 detects an annotation, it passes the annotation 106 to the back-end 120. In some implementations, the lexer 104 may recognize comments in the program, and may pass all comments to the back-end 120. Since the lexer 104 for any programming-language would normally already be coded to recognize comments, this implementation minimizes changes to the lexer 104. The lexer 104, instead of ignoring (and effectively discarding) program comments, passes them to the back-end 120.
Back-end 120 includes a plurality of annotation processors 124 and a corresponding set of tools 122. In some implementations, if two or more of the tools use identical sets of annotations, it is possible that one of the annotation processors will correspond to two or more of the tools.
Generally, the process of lexing and parsing a program is initiated when a user of the system requests a user-specified tool to process a user-specified program. All the tools 120 in the back-end are assumed, for the purposes of this explanation, to be tools used to process computer programs in one particular programming-language, such as C or C++ or Java (trademark of Sun Microsystems, Inc.). In accordance with the present invention, and unlike prior systems, the lexer 104 and parser 130 are generic to the programming-language for the specified program. That is, the same lexer and parser are used with all the tools 122. All tool-specific annotation handling is performed by the particular back-end annotation processor 124 that corresponds to the user-specified tool.
There are some circumstances in which a user may specify that a particular program is to be processed by two tools. For instance, the user may specify that a particular program is to be first processed by a compiler, and then if no errors are detected by the compiler, the program is to be processed by a documentation generator. Similarly, in some circumstances a first tool in the back-end may automatically invoke another tool in the back-end to process the AST either before or after the first tool. In these circumstances, the front-end, with the lexer and parser, only converts the program into an AST once, and thus only passes the annotations to one particular annotation processor. In such circumstances, it is assumed that either (A) both tools use the same annotations, or (B) that one or both tools include facilities for ignoring annotation tokens in the AST not applicable to that tool.
When back-end 120 receives annotation 106 from lexer 104, the annotation is sent to the annotation processor 124 for the user-specified tool. After processing the annotation into an annotation token, annotation processor 124 returns the annotation token 126 to lexer 104. If the annotation was a simple comment, including no applicable instructions for the user-specified tools 122, annotation processor 124 returns a NULL value to lexer 104. Lexer passes a stream of tokens, generated by lexer 104, and annotation tokens, generated by annotation processor 124, to parser 130. Parser 130 assembles the token and annotation token stream into an abstract syntax tree (AST) 132 according to the grammar of the programming-language in which the input source file 102 is written. In a preferred embodiment, the programming-language grammar used to write the input source file 102 is extended to include context-sensitive annotation slots. For example, a programming-language that includes the statement
may be extended to
where annotation represents a slot where an annotation such as "Frequently Used" may be placed. Parser 130 passes AST 132 to back-end 120. The user-specified tool or tools 122 process the AST 132, including the annotation tokens therein, to produce target file 140.
FIG. 2 shows a system, such as system 200, in accordance with the present invention. The system preferably includes:
a user interface 202, including a display 204 and one or more input devices 206;
one or more central processing units 210;
a main non-volatile storage unit 212, preferably a hard disk drive, for storing source files (102FIG. 1) and target files (140 FIG. 1);
a system memory unit 214, preferably including both high speed random-access memory (RAM) and read-only memory (ROM), for storing system control programs and application programs loaded from disk 212; and
one or more internal buses 216 for interconnecting the aforementioned elements of the system.
The operation of system 200 is controlled primarily by control programs that are executed by the system's data processor 210. The system's control programs may be stored in system memory 214. In a typical implementation, the programs stored in the system memory 214 will include:
an operating system 220;
a file handling system 222;
one or more application programs 224;
a lexer 226;
a parser 228; and
a back-end 230.
Back-end 230 includes one or more tools 232 and corresponding annotation processors 234. Each tool 232 processes specific components of an abstract syntax tree passed to back-end 230 by parser 228. As an illustration, a first tool 232 in back-end 230 may be a type checker, a second tool 232 may be an extended static checker, a third tool 232 may be a program verifier, and so forth. Conceptually, each of these tools has a corresponding annotation processor 234, but as indicated above, some tools may share a common annotation processor. In a preferred embodiment, at least one of the annotation processors 234 includes an annotation lexer 236 and an annotation parser 238.
As an example of how a source file is processed by a lexer and a parser to form an AST, consider a hypothetical programming-language with the following grammar:
Program ::= ExprA EOS
;where EOS denotes end-of-stream
ExprA ::= ExprB "+" ExprA
;addition, or,
| ExprB "−" ExpA
| ExprB
ExprB ::= Variable
;variable value, or
| Number
;numeric value, or
| "−" ExprB
;unary minus, or
| "(" ExprA ")"
;parenthetical expression.
The tokens for this hypothetical language may be:
;where "n" denotes a non-negative integer
;where "s" denotes a name
;addition operator ("+")
;subtraction operator ("−")
;open parenthetical expression
;close parenthetical expression, and
;end of input stream
Every token in the hypothetical language has a label such as "NUMBER" or "PLUS," and some tokens also have a parameter value, such as an integer (n) or a string (s). Now consider a particular one line source file 102 (FIG. 1) written in the hypothetical language:
The stream of characters corresponding to this one line source file is:
Referring to FIG. 1, lexer 104 converts this stream of characters into the following sequence of tokens:
The parser 130 (FIG. 1) then conceptually generates parse tree 300 (shown in FIG. 3A) from these tokens. In practice, the parser actually generates the AST data structure 132 shown in FIG. 3B. In a preferred embodiment AST 132 does not contain unneeded and redundant information present in parse tree 300. In FIG. 3B, AST includes a program node 302, node 304 for the addition expression, a node 306 for the variable "size", and a node 308 for the number "13."
As another example, consider a second one line source file written in the hypothetical language described above:
The sequence of tokens corresponding to this second one line source file is:
which is converted by parser 130 (FIG. 1) into parse tree 350 and AST 132 shown in FIGS. 3C and 3D, respectively. In this example, lexer 104 converts any occurrence of the character "−" into the token MINUS, however, the parser 130 may interpret MINUS either as a unary minus operator negation or as the binary subtraction operator depending on which tokens precede or follow the MINUS token. In this sense, parser 130 is context-sensitive whereas lexer 104 is context-free.
Note that in the two examples above, lexer 104 does not produce any tokens for the " " (whitespace) characters of source file 102. Most modem programming-languages are designed in that way. In fact, most languages also allow the program to include "comments" that the programmer writes to document the source program. A standard lexer 104 also ignores comments, and therefore, comments are never processed by parser 130. This has the advantage that a programmer can include whitespace and comments anywhere in the program, as long as a comment or whitespace is not inserted inside consecutive characters that make up a token. It also means that the grammar for a programming-language need not specify all places where comments or whitespace can be placed.
Comments are usually delimited by a sequence of characters that begin the comment, and a sequence of characters that end the comment. For example, in the programming-languages C++ and Java, a comment can begin with the characters "/*" and end with the characters "*/".
Thus, if a lexer for Java detects the character "/*" followed by the character "*" in a source file, the lexer (assuming that it does not incorporate the present invention) will ignore all following characters up until the next consecutive occurrence of the characters "*" and "/".
Referring to FIG. 1, annotations are used by tools 122. Each tool 122 may have a set of annotations that it recognizes and supports. The annotations are placed in the source file along with the programming-language statements. A standard lexer, one that does not incorporate the present invention, treats the annotations as comments and does not process them. However, in accordance with the present invention the lexer 104 is modified to either (A) send all comments to an annotation processor 124 for processing, or (B) recognize the beginning of a string in a comment that appears to represent an annotation, and pass that string to the annotation processor 124.
As indicated earlier, each tool 122 (FIG. 1) in the back-end 120 may use a different set of annotations than the other tools. If a program (source file) contains annotations for use with more than one tool, it may contain annotations not recognized by the user-specified tool. Stated in another way, each tool 122 only processes the annotations that belong to the set of annotations recognized by the particular tool 122. Each tool 122 is preferably coded to ignore annotations in the AST that are not supported by the tool. Furthermore, each annotation processor 124 is preferably coded to return NULL values to the lexer 104 for annotations that are not supported by the corresponding tool 122.
As a simple way to define which comments are to be interpreted as annotations, the annotation language of a tool 122 may say that any comment whose first character is the character "@" is an annotation. Thus, for example, the input program fragment:
would be considered a comment that is ignored whereas the input program fragment:
"/*@ this is an annotation */"
would be considered an annotation. One of skill in the art will recognize that there are many schemes, in addition to the /*@*/ example described above, for distinguishing annotations, which are processed by an annotation processor, and comments, which are simply ignored.
The following are examples of annotations that are useful in particular tools 122:
/*@ INVARIANT x<y+10*/
/*@ This is a comment used in some special way by a program documentation system */
/*@ DEPENDS a[t: T] ON c[t] */
In most systems, each tool that uses annotations has a custom designed lexer and parser that are used only with that tool. As discussed above, in the present invention the lexer 104 and parser 130 are generic and are used with all the tools (or at least a set of several tools) for processing programs written in a particular programming-language. When new tools are developed, or new types of annotations are developed for an existing tool, the lexer 104 and parser 130 remain unchanged, since annotation lexing and parsing has been compartmentalized and delegated to the annotation processors 124.
Referring to FIG. 1, the present invention introduces the concept of a "annotation token." An annotation token is like a token in that it has a label and can be passed by lexer 104 to parser 130. An annotation token is distinguished from other tokens in that its parameter value is not only capable of being a simple integer or string, but also a more complex structure, for example, an abstract syntax tree.
Furthermore, the structure of the annotation token is not defined by the lexer 104 or parser 130, but rather by a specific tool 122. That is, the lexer 104 never "looks inside" an annotation token, and is not dependent upon the internal structure of the annotation token. This lets the lexer 104 remain independent of the tools 122.
As mentioned above, when lexer 104 detects an annotation (or a comment that might contain an annotation), it passes the annotation to an annotation processor 124. Annotation processor 124 takes annotations 106 as input and returns annotation tokens 126 to the lexer. Lexer 104 passes the annotation tokens received from annotation processor 124 to parser 130.
FIG. 2 shows the details of one embodiment of an annotation processor 234 (124 FIG. 1). An annotation lexer 236 receives an annotation from the lexer 226. The annotation lexer determines the lexical content of the annotation and passes one or more tokens to annotation parser 238. Annotation parser 238 generates an annotation token based upon the tokens passed to it by the annotation lexer 236. This annotation token is then returned to lexer 226.
Note, with this structure, lexer 226 (104FIG. 1) does not need to know all possible annotation tokens that can be returned by annotation processor 234. Lexer 226 simply passes the annotation tokens to parser 228 as it would any other token.
In some embodiments, the annotation processor 124 for some tools may have a combined lexer and parser. This combined lexer/parser is preferred when all annotations defined for the tool are extremely simple in structure, each annotation typically consisting of a label or a label and one or two parameters. For more complex annotations, the separate lexer and parser arrangement shown in FIG. 2 is preferred.
The present invention works most cleanly when the annotation processor 124 is context-free. That is, the annotation processor 124 produces annotation tokens according to the given annotation 106, without regard to where in the source file 102 the annotations 106 occur.
Although the annotation processor 124 is preferably context-free, the context of the annotation in source file 102 may have meaning because the context of the annotation in source file 102 will affect how an annotation token 126, corresponding to the annotation 106, is assembled into AST 132 by parser 130 and processed by tools 122. Put more simply, the position of each annotation token in the sequence of tokens sent by the lexer 104 to the parser 130 will provide context information for the annotation.
As a simple example, consider a programming-language whose syntax is given by the following grammar:
::= Statements EOS
::= Statement ";" Statements
| Statement
::= "VAR" Variable "IN" Statements "END"
| Variable ":=" Expr
;variable assignment
::= Number
;numeric value, or
| Variable
;variable value
| Expr "+" Expr
Now, consider a simple example in which a tool 122 allows a variable declaration to be annotated to, for example, indicate that the variable declared is frequently used, and that allows an assignment to be annotated to indicate that the numeric value assigned to the variable is even or will be frequently used in the rest of the program, or both even and frequently used.
To allow the use of such annotations, the portion of the grammar for the programming-language for defining a Statement, where G* denotes any number of occurrences of G's (including none), is modified to read as follows:
::= "VAR" Annotation* Variable "IN" Statements "END"
| Annotation* Variable ":=" Expr
::= FrequentlyUsed | Even
where FrequentlyUsed and Even denote the respective annotations.
Using our invention, the precise grammar for annotations is known only to the tool-specific annotation processor 234 (FIG. 2); the non-tool specific lexer 226 and parser 228 treat Annotation as denoting any annotation (token). We allow multiple annotations for a given statement to allow a variable to be declared both frequently used and even. It is the job of the tool 122 (FIG. 1) to disallow the use of an Even annotation on a variable declaration. Note that this factoring of the grammar allows us to change the set of legal annotations later without changing the non-tool specific lexer 226 and parser 228 so long as the new annotations can only appear in the same places as the old annotations.
In accordance with the programming-language grammar specified above, the tokens that can be returned by the lexer are:
BECOMES ;the token for":="
and the forms of annotation tokens that the annotation processor (and thus also the lexer) can return are:
Thus, consider the following annotated program that is written in the programming-language defined above:
VAR x IN
VAR /*@ FREQUENTLY_USED */ y IN
y :=x+3;
/*@EVEN*/ y :=y+2;
/*@ FREQUENTLY_USED */ x :=1;
y :=y+x+y+x+y+x
The lexer 104, after returning the second VAR token and upon recognizing the characters "/*@", will generate a substream consisting of the following characters:
This substream is sent by the lexer 104 to the annotation processor 124. The annotation processor 124 will then produce the following annotation token:
This annotation is returned by the annotation processor 124 to lexer 104, and lexer 104 passes it on to parser 130.
After lexer 104 reaches the second FREQUENTLY_USED annotation, lexer 104 will pass a substream also consisting of the characters above to the annotation processor 124, which will again return:
It is noted that the same annotation token is returned, even though the parser 130 will use the annotation token in different ways in these two cases. The first FREQUENTLY_USED annotation applies to a variable that is declared, whereas the second annotation applies to the result of an assignment statement. Accordingly, the two FREQUENTLY_USED annotations are assembled by the parser 130 into the AST tree in a context-sensitive manner and processed by a tool that supports the FREQUENTLY-USED annotation.
In the example above, annotation processor 124 is quite simple. In general, however, annotation processor 124 may construct more complex annotation tokens. For example, to create an annotation token for the INVARIANT annotation:
the annotation processor must parse the expression that follows the keyword INVARIANT to generate the annotation token depicted in FIG. 4A. More specifically, for tools using complex annotations of this type, the annotation processor will preferably include a lexer 236 (FIG. 2) that converts the annotation text into a sequence of tokens, and a parser 238 that assembles the tokens into an abstract syntax tree in accordance with the grammar of the "annotation language" for the tool.
Even a complex annotation token such as that depicted in FIG. 4A is not processed by lexer 104 (FIG. 1) or parser 130. Rather, parser 130 assembles the annotation token into an AST without "looking inside" the annotation token. Then, when the parser passes the AST to the back-end, a tool capable of processing the INVARIANT annotation analyzes the token depicted in FIG. 4A.
Tools may support annotations that are highly complex mathematical formulas. For example, a tool may support the annotation:
In such an example, lexer 104, noting the /*@ */ structure, will pass the annotation to an annotation processor 124. An annotation processor that supports the quadratic function will then generate an abstract syntax tree in accordance with the quadratic equation:
For tools that utilize complex annotation tokens, preferred embodiments of the annotation processor include an annotation lexer and an annotation parser.
The advantage of the system and methods of the present convention can further be illustrated by considering the following examples.
Consider the hypothetical programming-language:
P ::= ε | S ";" P
S ::= ε
| "var" X
| "if" E "then" S1 "else" S2
where ε represents a null element and X represents a variable name such as x. Now consider the following two-line program written in the hypothetical programming-language:
A parser will build the AST depicted in FIG. 4B. Now, suppose that we desire to change the programming-language to support context-sensitive annotations such as:
var x annotation; and
These annotations are context-sensitive in the sense that in the first case they apply to the variable immediately preceding them and in the second case they act as a new kind of statement. Such annotations may be used to convey special meaning to a back-end tool such as an error-checker. For example, the annotation "/*@ non_null */" when placed in a variable declaration might mean that the declared variable should never be assigned a null value, and the annotation "/*@ assert x>0*/" placed where a statement could go might instruct the error checker to make sure that when the program reaches that point in the program that x is greater than 0.
P ::= ε | S ";" P
S ::= ε
| Annotation
| "var" X Annotation*;
| "if" E "then" S1 "else" S2
The two-line program written in the hypothetical programming-language may then read:
var xj annotation;
When the lexer detects the annotation, it will send it to the appropriate annotation processor. The annotation processor will generate an annotation token and return the annotation token to the lexer. The lexer will pass the annotation token along with the tokens generated by the lexer to the parser. The parser will then generate the AST depicted in FIG. 4C. The annotation token assembled into the AST by the parser will not be processed until the AST is passed to the appropriate tool. Thus, the lexer need only be recoded to the extent that it distinguishes "annotations" from comments in order to support the newly modified hypothetical language.
In practice, each type of annotation often makes sense only when placed in certain annotation slots of the modified programming-language grammar. For example, the non_null annotation is meaningless when used as a statement and since assert annotations act like statements, it doesn't make much sense to allow them to be attached to variable declarations. While tool 122 can scan an AST and complain about ill-placed annotations, it is easier, in such cases, to put the information about where annotations can occur directly in the non-tool specific grammar. For example:
P ::= ε | S ";" P
S ::= ε
| StatementAnnotation
| "var" X DeclAnnotation*;
| "if" E "then" S1 "else" S2
Here, we have divided up the set of possible annotations into those that may be attached to variable declarations (DeclAnnotations) and those can may be used like statements (StatementAnnotations).
To handle this, annotation tokens now contain information about what kind they are (DeclAnnotation or StatementAnnotation). The non-tool specific lexer 104 works as before. The non-tool specific parser 130 is modified to use this kind information when generating parse trees. It ignores all other information in annotation tokens. This means that we may change the set of annotations in any way without changing the non-tool-specific lexer 226 or parser 228 so long as every annotation can appear only either where DeclAnnotation appears in the grammar or where StatementAnnotation appears in the grammar. For most programming languages, given a reasonable choice of grammar slots, this limitation is seldom an issue. Putting information about the kinds of annotations into the grammar also has the advantage of making the parser's job easier because it may need to do less lookahead to determine what it is seeing; the kind information may also enable the parser to produce better error messages.
The system and method of the present invention is particularly advantageous when annotations are represented as objected-oriented classes. Referring to FIG. 5A, consider a particular tool that represents annotations as subclasses 510 of a class named BASE_CLASS 500. Because subclasses can be used anywhere a superclass is required, this means that the lexer 104 and parser 130 need deal with annotation tokens only of type BASE_CLASS. Moreover, if new annotations are added later that require new classes, we can avoid having to make any change to the original lexer and parser by making the new classes subclasses of BASE_CLASS.
Referring to FIG. 5B, in some embodiments, the original lexer may be designed to recognize multiple kinds of annotations (e.g., example 2). In this case, it is most advantageous to have a separate base class 550 for each kind of annotation. Thus, for example, all annotations of variable declarations might be subclasses of BASE_CLASS 1 and all stand-alone statement annotations might be subclasses of BASE_CLASS 2. Here, the lexer 104 and parser 130 need deal with annotation tokens only of types BASE_CLASS 1 and BASE_CLASS 2. This means that they do not need to be changed as new annotation subclasses are added to the two base classes.
The foregoing description has been directed to specific embodiments of this invention. It will be apparent, however, that variations and modifications may be made to the described embodiments, with the attainment of all or some of the advantages. Therefore, it is the object of the appended claims to cover all such variations and modifications as come within the spirit and scope of the invention.
|Cited Patent
|Filing date
|Publication date
|Dec 13, 1991
|Nov 9, 1993
|Educational Testing Service
|Method and system for interactive computer science testing, anaylsis and feedback
|Jan 9, 1992
|Jun 28, 1994
|Digital Equipment Corporation
|Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines
|Feb 17, 1994
|Jan 23, 1996
|Mitsubishi Electric Industrial Co., Ltd.
|Syntactic analysis apparatus
|Jul 6, 1995
|May 5, 1998
|Sun Microsystems, Inc.
|System and method for textual editing of structurally-represented computer programs with on-the-fly typographical display
|Jul 6, 1995
|May 12, 1998
|Sun Microsystems, Inc.
|System and method for inter-token whitespace representation and textual editing behavior in a program editor
|Jan 28, 1994
|Jun 2, 1998
|Sun Microsystems, Inc.
|Method and apparatus for a type-safe framework for dynamically extensible objects
|Oct 7, 1994
|Jun 16, 1998
|Tandem Computers Incorporated
|Method and apparatus for translating source code from one high-level computer language to another
|Jul 6, 1995
|Sep 22, 1998
|Sun Microsystems, Inc.
|Token-based computer program editor with program comment management
|Sep 12, 1996
|Jan 5, 1999
|Sun Microsystems, Inc.
|System and method for horizontal alignment of tokens in a structural representation program editor
|Aug 26, 1998
|Feb 1, 2000
|Fujitsu Limited
|Image forming apparatus
|Sep 11, 1998
|Oct 24, 2000
|Nec Corporation
|GDMO translator, method of GDMO translation, and recording medium containing program for GDMO translator
|Apr 15, 1997
|Nov 21, 2000
|Samuel C. Kendall
|Link-time and run-time error detection, and program instrumentation
|Apr 16, 1997
|Jan 30, 2001
|International Business Machines Corporation
|Incremental compilation of C++ programs
|Blanche, Proof Nets for Controlling Ambiguity in Natural Language Processing, 1998, p. 459-465.
|Devanbu, Genoa-A Customizable, Front-End-Retargetable Source Code Analysis Framework, Apr. 1999, ACM, p. 177-212.*
|Devanbu, Genoa—A Customizable, Front-End-Retargetable Source Code Analysis Framework, Apr. 1999, ACM, p. 177-212.*
|Wile, Abstract Syntax from Concrete Syntax, 1997, ACM, P. 471-480.*
|Citing Patent
|Filing date
|Publication date
|Feb 15, 2000
|Jan 20, 2004
|International Business Machines Corporation
|Aggregating constraints and/or preferences using an inference engine and enhanced scripting language
|Jun 15, 2000
|Mar 30, 2004
|Bruce Hodge
|Multiphase single pass interpreter
|Jan 7, 2002
|Dec 20, 2005
|Hewlett-Packard Development Company, L.P.
|Method and apparatus for organizing warning messages
|Apr 13, 2001
|Jan 10, 2006
|Sun Microsystems, Inc.
|Method and apparatus for detecting violations of type rules in a computer program
|Dec 18, 2002
|Sep 19, 2006
|Ge Medical Systems Information Technologies, Inc.
|Method, system and computer product for parsing binary data
|Jun 12, 2003
|Mar 27, 2007
|Sun Microsystems, Inc.
|Multipurpose lexical analyzer
|Feb 3, 2003
|Apr 24, 2007
|John Fairweather
|System and method for parsing data
|Dec 21, 2002
|Feb 12, 2008
|International Business Machines Corporation
|Fault-tolerant dynamic editing of GUI display and source code
|Oct 8, 2003
|Apr 28, 2009
|Microsoft Corporation
|Plug-in pre- and postconditions for static program analysis
|Jun 16, 2006
|May 12, 2009
|John Fairweather
|System and method for mining data
|Jun 28, 2006
|Sep 1, 2009
|Hewlett-Packard Development Company, L.P.
|Verifying information in a database
|Oct 15, 2004
|Nov 17, 2009
|Yahoo! Inc.
|Systems and methods for indexing content for fast and scalable retrieval
|Mar 20, 2006
|Jul 27, 2010
|Intuit Inc.
|Automatic code generation via natural language processing
|Sep 3, 2004
|Nov 9, 2010
|Hewlett-Packard Development Company, L.P.
|System and method for committing to a set
|Feb 28, 2008
|Nov 9, 2010
|International Business Machines Corporation
|Service identification in legacy source code using structured and unstructured analyses
|Oct 15, 2004
|Dec 7, 2010
|Yahoo! Inc.
|Systems and methods for indexing content for fast and scalable retrieval
|Jul 25, 2006
|Feb 15, 2011
|Hewlett-Packard Development Company, L.P.
|Method and system for utilizing sizing directives for media
|May 24, 2006
|Feb 22, 2011
|Hewlett-Packard Development Company, L.P.
|Proving that a user profile satisfies selection criteria for targeted data delivery
|Oct 13, 2005
|May 17, 2011
|Hewlett-Packard Development Company, L.P.
|Method and system for utilizing user information to provide a network address
|Oct 13, 2005
|May 17, 2011
|Hewlett-Packard Development Company, L.P.
|Method and system for improving targeted data delivery
|Mar 16, 2006
|Jun 21, 2011
|Oracle America, Inc.
|Incremental modification detector, and methods, systems, and apparatus for implementing the same
|Jun 28, 2006
|Jul 5, 2011
|Hewlett-Packard Development Company, L.P.
|Method and system for protecting queryable data
|Jan 15, 2008
|Aug 30, 2011
|International Business Machines Corporation
|Fault-tolerant dynamic editing of GUI display and source code
|Apr 27, 2006
|Sep 6, 2011
|Hewlett-Packard Development Company, L.P.
|Method and system for anonymous reporting
|Jun 29, 2007
|Sep 27, 2011
|Oracle America, Inc.
|Method and system for generating a test file
|Oct 30, 2007
|May 15, 2012
|International Business Machines Corporation
|Using annotations to reuse variable declarations to generate different service functions
|Oct 27, 2005
|Oct 2, 2012
|Hewlett-Packard Development Company, L.P.
|Method and system for retaining offers for delivering targeted data in a system for targeted data delivery
|Apr 27, 2006
|Oct 23, 2012
|Hewlett-Packard Development Company, L.P.
|Method and system for offsetting printing costs in a system for targeted data delivery
|Mar 21, 2008
|Dec 4, 2012
|Carnegie Mellon University
|Method for statically checking an object-oriented computer program module
|Jan 30, 2006
|Nov 26, 2013
|Microsoft Corporation
|Context based code analysis
|Feb 26, 2009
|Jan 14, 2014
|International Business Machines Corporation
|Optimizing code generation system with input data integration
|Sep 29, 2008
|May 27, 2014
|Apple Inc.
|Data detection of a character sequence having multiple possible data types
|Oct 26, 2011
|Jun 3, 2014
|Google Inc.
|Methods and systems for dynamically composing distributed interactive applications from high-level programming languages
|Aug 1, 2008
|Aug 12, 2014
|Sap Ag
|Annotation data filtering of computer files
|Aug 1, 2012
|Sep 23, 2014
|Oracle International Corporation
|System and method for using an abstract syntax tree to encapsulate the descriptive assertions in an annotation based standard into a code based library
|Feb 2, 2007
|Sep 30, 2014
|Microsoft Corporation
|Direct access of language metadata
|Aug 1, 2012
|Oct 7, 2014
|Oracle International Corporation
|System and method for using a shared standard expectation computation library to implement compliance tests with annotation based standard
|Aug 1, 2008
|Feb 10, 2015
|Sap Se
|Annotation processing of computer files
|Nov 19, 2013
|Mar 31, 2015
|Microsoft Corporation
|Context based code analysis
|Apr 14, 2009
|Aug 11, 2015
|Empire Technology Development Llc
|Program and data annotation for hardware customization and energy optimization
|Jan 8, 2009
|Nov 3, 2015
|Infosys Limited
|Method and system for automatically generating questions for a programming language
|Apr 28, 2006
|Nov 24, 2015
|Hewlett-Packard Development Company, L.P.
|Method and system for data retention
|Apr 1, 2013
|Sep 6, 2016
|Yahoo! Inc.
|Systems and methods for a search-based email client
|Apr 4, 2008
|Sep 27, 2016
|Intuit Inc.
|Executable code generated from common source code
|May 23, 2014
|Sep 27, 2016
|Apple Inc.
|Detection of data in a sequence of characters
|Jan 21, 2014
|Oct 4, 2016
|ArtinSoft Corporation
|Automated porting of application to mobile infrastructures
|Mar 15, 2013
|Oct 11, 2016
|ArtinSoft Corporation
|Code separation with semantic guarantees
|Nov 2, 2001
|May 8, 2003
|Fu-Hwa Wang
|Compiler annotation for binary translation tools
|Jan 7, 2002
|Jul 10, 2003
|Flanagan Cormac Andrias
|Method and apparatus for organizing warning messages
|Apr 13, 2001
|Jan 22, 2004
|Nicolai Kosche
|Method and apparatus for detecting violations of type rules in a computer program
|Feb 3, 2003
|Feb 12, 2004
|John Fairweather
|System and method for parsing data
|Dec 21, 2002
|Jun 24, 2004
|Kulp Richard L.
|Fault-tolerant dynamic editing of GUI display and source code
|Dec 18, 2002
|Jun 24, 2004
|Schrader Stuart Lyle
|Method, system and computer product for parsing binary data
|Aug 12, 2003
|Feb 17, 2005
|Lukose Rajan M.
|Targeted advertisement with local consumer profile
|Jul 30, 2004
|Feb 17, 2005
|Lillibridge Mark David
|System and method for targeted advertising via commitment
|Oct 8, 2003
|Apr 14, 2005
|Deline Robert Anthony
|Plug-in pre-and postconditions for static program analysis
|Oct 15, 2004
|Jun 2, 2005
|Stata Raymond P.
|Systems and methods for indexing content for fast and scalable retrieval
|Oct 15, 2004
|Jun 30, 2005
|Stata Raymond P.
|Systems and methods for a search-based email client
|Oct 15, 2004
|Sep 8, 2005
|Stata Raymond P.
|Systems and methods for indexing content for fast and scalable retrieval
|Apr 20, 2004
|Oct 20, 2005
|General Electric Company
|Systems, methods and apparatus for image annotation
|Aug 23, 2004
|Feb 23, 2006
|Lukose Rajan M
|Systems and methods of interfacing an advertisement with a message presentation client
|Nov 12, 2004
|May 18, 2006
|Lillibridge Mark D
|Method and system for assured document retention
|Jun 16, 2006
|Oct 19, 2006
|John Fairweather
|System and method for mining data
|Oct 13, 2005
|Apr 19, 2007
|Jouppi Norman P
|Method and system for targeted data delivery using weight-based scoring
|Jan 30, 2006
|Aug 2, 2007
|Microsoft Corporation
|Context based code analysis
|Feb 16, 2006
|Aug 16, 2007
|Microsoft Corporation
|Generic expression framework for computer implementable expressions
|Apr 28, 2006
|Nov 29, 2007
|Lillibridge Mark D
|Method and system for data retention
|Apr 26, 2005
|Jan 24, 2008
|Google Inc.
|Method and System for Dynamically Composing Distributed Interactive Applications from High-Level Programming Languages
|Jul 26, 2006
|Jan 31, 2008
|Halcrow Michael A
|System and method for authenticating file content
|Dec 6, 2006
|Jun 12, 2008
|Microsoft Corporation
|Scope-Constrained Specification Of Features In A Programming Language
|Jan 15, 2008
|Jul 24, 2008
|International Business Machines Corporation
|Fault-tolerant dynamic editing of gui display and source code
|Feb 2, 2007
|Aug 7, 2008
|Microsoft Corporation
|Direct Access of Language Metadata
|Mar 21, 2008
|Dec 18, 2008
|Bierhoff Kevin M
|Method for statically checking an object-oriented computer program module
|Aug 1, 2008
|Feb 5, 2009
|Dietmar Theobald
|Annotation processing of computer files
|Aug 1, 2008
|Feb 5, 2009
|Dietmar Theobald
|Annotation data filtering of computer files
|Oct 30, 2007
|Apr 30, 2009
|International Business Machines Corporation
|Using annotations to reuse variable declarations to generate different service functions
|Feb 28, 2008
|Sep 3, 2009
|Netta Aizenbud-Reshef
|Service identification in legacy source code using structured and unstructured analyses
|Apr 4, 2008
|Oct 8, 2009
|Intuit Inc.
|Executable code generated from common source code
|Jan 8, 2009
|Nov 12, 2009
|Infosys Technologies Limited
|Method and system for automatically generating questions for a programming language
|Sep 29, 2008
|Dec 10, 2009
|Olivier Bonnet
|Data detection
|Aug 7, 2008
|Feb 11, 2010
|Microsoft Corporation
|Grammar-based generation of types and extensions
|Oct 15, 2009
|Jun 10, 2010
|Stata Raymond P
|Systems and methods for indexing content for fast and scalable retrieval
|Feb 26, 2009
|Aug 26, 2010
|International Business Machines Corporation
|Optimizing code generation system with input data integration
|Apr 14, 2009
|Oct 14, 2010
|Miodrag Potkonjak
|Program And Data Annotation For Hardware Customization And Energy Optimization
|Feb 10, 2012
|Aug 15, 2013
|Oracle International Corporation
|Method and Apparatus for Synchronization Annotation
|Aug 1, 2012
|Feb 6, 2014
|Oracle International Corporation
|System and method for using an abstract syntax tree to encapsulate the descriptive assertions in an annotation based standard into a code based library
|Mar 15, 2013
|Sep 18, 2014
|ArtinSoft Corporation
|Code separation with semantic guarantees
|Jun 2, 2014
|Sep 25, 2014
|Microsoft Corporation
|Immutable parsing
|Apr 26, 2005
|Nov 10, 2005
|Google Inc.
|Methods and systems for dynamically composing distributed interactive applications from high-level programming languages
|U.S. Classification
|717/112, 704/9
|International Classification
|Cooperative Classification
|European Classification
|Sep 22, 1999
Owner name: DIGITAL EQUIPMENT CORPORATION, CALIFORNIA
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:STATA, RAYMOND PAUL;FLANAGAN, CORMAC;LEINO, K. RUSTAN M.;AND OTHERS;REEL/FRAME:010270/0284;SIGNING DATES FROM 19990914 TO 19990922
|Nov 16, 2001
Owner name: COMPAQ INFORMATION TECHNOLOGIES GROUP, L.P., TEXAS
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:DIGITAL EQUIPMENT CORPORATION;COMPAQ COMPUTER CORPORATION;REEL/FRAME:012306/0486;SIGNING DATES FROM 19991209 TO 20010620
|Sep 6, 2005
|Fee payment
Year of fee payment: 4
|Jun 6, 2007
Owner name: HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P., TEXAS
Free format text: CHANGE OF NAME;ASSIGNOR:COMPAQ INFORMATION TECHNOLOGIES GROUP, L.P.;REEL/FRAME:019390/0141
Effective date: 20021001
|Sep 8, 2009
|Fee payment
Year of fee payment: 8
|Oct 11, 2013
|Maintenance fee reminder mailed
|Mar 5, 2014
|Lapse for failure to pay maintenance fees
|Apr 22, 2014
|Expired due to failure to pay maintenance fee
Effective date: 20140305


text:
New iMac bliss
Although I use my MacBook 90% of the time, I still like having an additional desktop Mac to encode DVDs, download torrents, and other long-haul tasks like editing videos. I've been using a Power Mac for the past four years, which was a screamer when it came out, but lately I just felt so behind the times using a non-Intel Mac. I've been eyeing the new iMac for a long time, since I love its simplicity, and last week I finally got one! I thought it would take forever for me to get everything moved and setup how I want, but I actually blazed through the job in a couple evenings. There are lots of things I'm really happy about, starting with the 24-inch screen, plus I hooked up my old Cinema Display as a second monitor (which just worked like magic the moment I plugged it in). The new tiny keyboard took a few minutes to get used to, but I love the small footprint. Although I've avoided iPhoto for years, I've finally decided to use it now, and I'm having a blast running through my entire photo collection and watching it do face recognition on my pals! I've also decided to start using Time Machine, so I won't have to mess with my usual monthly backup (except for my MacBook, but I may remedy that in the future). This weekend I've really enjoyed using it and enjoying that elegant Apple feeling - I'm really happy with my iMac!
Memorial Day starving
On Memorial Day my pals Jonathan & Anne-Marie had a fantastic cookout at their house, which was a lot of fun! Amazing looking food was everywhere, but believe it or not, I didn't eat a bite of it since I'm dieting right now. Of course, I still had some wonderful drinks (the bar was setup for mix-your-own Mint Juleps and Mohitos), and Jonathan bought a couple nice cigars for us to enjoy. It was a simple, relaxed, and peaceful time with friends, followed by a great Memorial Day nap!
View photos: Memorial Day 2009
View photos: Memorial Day 2009
Godzilla Against Mechagodzilla : 3 of 5
I can't believe I'm already up to the 26th Godzilla movie, released in 2002. This is the fourth Godzilla film to feature Mechagodzilla (hence the somewhat awkward title), so I was really curious to see how he would be re-imagined this time around. It turns out he's just a massive weapon developed by the Anti-Megalosaurus Force (AMF) to fight Godzilla, and he even gets a name this time, Kiryu. The twist is that he's controlled by advanced "DNA computers", and they use bits of Godzilla's own DNA (obtained from his actual bones after his destruction in 1954 - yes, this is yet another reboot!). This one little fact sets up the best scene in the movie - when Kiryu hears Godzilla's roar, his DNA goes berserk and Mechagodzilla goes on a rampage (definitely a little embarrassing for the AMF)! The characters are a little sappy this time, since Akane (an AMF soldier looking for a reason to live) has some moments with the scientist's daughter that seem pulled right out of a Japanese TV drama, but the kaiju fighting is fantastic (I've become a connoisseur by now!). I loved the fierce contact and the rotating camera moves, which must have been really difficult to pull off, but unfortunately it seemed all of the aircraft were completely computer-generated. Kiryu's ultimate weapon is the Absolute Zero Gun, and there's an incredible shot where a misfire takes out three buildings instantly! There are also a few special scenes for Godzilla fans of all types, including flashbacks from Mothra and War of the Gargantuas, a cameo by Kumi Mizuno (my favorite Godzilla actress), and even baseball great Hideki Matsui knocking one out of the park (of course, his nickname is Godzilla!). Godzilla Against Mechagodzilla is a fast-paced, action-packed film, and although I prefer a slower, more menacing pace, I could definitely watch it again anytime. Two more Godzilla movies to go!
Up : 5 of 5
Thanks once again to lucky Melinda (who seems to my source of free sneak previews now!), I got to see Up a couple days early (and we even got press seats this time). Being the first animated feature to ever open the Cannes Film Festival, there were lots of reviews for me to read beforehand, and since all of them are so positive, I was prepared to be amazed. All I can say is that I'm completely impressed that Pixar is a studio that can totally focus on the art and storytelling of a truly great film, creating movies that can speak to everyone without compromising for Hollywood's money-making schemes. Up is so wonderful that I'm practically speechless, and it's a perfect example of Pixar's solid integrity. There won't be a lot of kids wanting to play with a 78-year old man action figure, yet Carl Fredricksen is an incredibly compelling character. Of course, animation has to include some suspension of belief (so we have to accept a house flying to South America on helium balloons), but the situations and emotions of falling in love, growing old, losing a spouse, and finding something to live for are all intensely real, and definitely intended for an adult audience. That's not to say there aren't tons of laughs to be had, because electronically-talking dogs ("Squirrel!") and great dialogue from Wilderness Explorer Russel make for some hilarious moments. Just about every detail is fantastic, from the beautiful score (which you can actually hum as you leave the theater), to the subtle use of 3D (which adds a little to the movie, but certainly isn't abused). I know I've said this before, but I'm so glad that Disney bought Pixar so their logo is on this film, because Pixar is without a doubt making the movies that Disney could have only made in the past. Up is not only a triumph of animation, but also a success in every element that makes a great film, period!
Day Jobs original: Get Go-Getter
Time for another time capsule post about my old swing band, The Day Jobs! Some of the old files that I recently discovered were song lyrics, since we had several original tunes written by Dae and Ernesto. For a few songs, after the guys wrote the melody, I got to write some lyrics to go along with them, and it was really fun to see what I could come up with, and even better to hear Matt sing them with the band. One my favorites was Get Go-Getter, which Ernesto wrote and titled, so I had to write around that idea. At the time I was into the complex and funny rhymes of Lorenz Hart (lyricist of My Funny Valentine and a million other songs you know), so I wanted to be clever with lots of three syllable rhymes. Some of them aren't so hot, but they're close! By the way, this song isn't about anyone I've ever known (although I remember I did have a car battery problem back then!). You can actually listen along to The Day Jobs performing live at Speakeasy on February 25th, 2000, thanks to Club Cast Live (a now defunct website that used to broadcast Austin music on the net)!
Play Get Go-Getter
Play Get Go-Getter
She's a get go-getter, you ought to see her go
She's a hip jet-setter, flyin' to her French chateau
She's a maestro on the Wurlitzer
All her fiction wins the Pulitzer
She's a get go-getter
Goin' after me
She's a dancer - a romancer
You won't believe your eyes
A mediocre - stock broker
A recipient of the Nobel Prize
She's a get go-getter, she drinks the finest wine
She's a high stakes better, rolls seven every time
Though she may not care for flattery
She can change your car's dead battery
She's a get go-getter
Goin' after me
She's a get go-getter, she dresses so sublime
She's a cashmere sweater, top of the line - so fine
She's a thrice-degreed colle-gi-an
She can tell you in Norwe-gi-an
She's a get go-getter
Goin' after me
A navigator - of the equator
She can sail the seven seas
She's a doctor - so don't mock her
She performed her own appendectomy
She's a get go-getter, she could have any guy
She's a sweet love letter, the kind that makes you sigh
I'm a nice guy, don't get mad at me
But the lady's got anatomy
She's a get go-getter
Goin' after me
Night at the Museum / Battle of the Smithsonian : 4 of 5
I really enjoying seeing the original Night at the Museum a few years ago, so I was kind of excited to check out this sequel, even though this movie is just pure goofy entertainment. I can't really pin down the reason why, but I just had a fantastic time! It has nothing to do with the characters, since there is practically no development (even though they try to get a brief moral across about doing what you love), and while the special effects are cool, they aren't miles ahead of anything else you can see these days. I guess it's just the magic of the idea that makes these movies click for me - I love seeing museums I have visited and real works of art and history that I've seen in person actually coming to life! Something new this time around is living paintings and photos - it was awesome to recognize so many famous ones and see them moving, and I loved the scene where Ben and Amelia Earhart jump into the classic VJ Day photo (which leads to a funny scene during the closing credits). Speaking of Amelia, Amy Adams was super-cute and hilarious in the role, and I got a kick out of her cliched slang and adventuresome attitude. Seeing the whole Air & Space Museum filled with activity was pretty awesome, and I enjoyed the exciting flying scenes (it makes no difference to me that the Wright brothers' flyer could never make those moves - remember, this is magic!). I think they could have done more with the Darth Vader scene, but Oscar the Grouch totally made up for it. It was also kind of interesting to see no less than three cast members of The Office in small roles in a single film. There's no doubt this movie is all fluff, but it's high quality and exceptionally fun fluff, and I hope they figure out how to make a third one!
Labels: movies
BoA / BoA : 3 of 5
Utada / This Is The One : 4 of 5
Two of my favorite Jpop/Kpop superstars coincidentally both decided they should break into the US market this year with English language albums, so of course I had to support these artists by buying them both (it's pretty nice to be able to pay ten bucks rather than the usual $25 or so!). The first is BoA, the beautiful Korean pop singer that I have been listening to since I bought her CD in Japan (she often releases Japanese language albums), with her US debut CD titled BoA (so original). When I first heard the single Eat You Up, I was a little disappointed since the song didn't showcase her great voice, but I had hoped the album would fix that problem. Unfortunately, that's not the case - BoA's producers made the terrible decision that she needs to sound like every other generic American hip-hop artist, so the album is filled with electronic vocal effects. Let me tell you, BoA does not need to sing through an Auto-Tune! Several of the songs are kind of duets with other ethnic singers, and there are no ballads (which I think are BoA's best songs!). I really wish she would have continued her normal music progression into the US, but now she's just going to blend in with the crowd (I think Lose Your Mind would have been a fantastic hit). However, even after saying all of that, I can't make myself dislike this album - for what it is, it's a totally awesome dance-fest that I can listen to over and over. I don't think the true BoA shines through, but the hip-hop BoA can kick it out.
The second artist is Utada Hikaru, who is such a superstar in Japan that her debut album is still the number one selling album ever. Utada actually attempted to break into the US market a few years ago with the album Exodus, which was kind of a disaster (even though I still enjoy the CD) with its embarrassing lyrics (Easy Breezy comes to mind), but now she's ready to try it again with This Is The One. Unlike BoA's complete 180 style change, this Utada album is a natural progression of her musical feel, and the results are totally fantastic (maybe not as good as her previous Heart Station, but still wonderful). The melodies show off her voice, the production is lush, and the mood is perfect - listening to Utada in English feels something like Everything But The Girl crossed with Sade. If you look at the translation of some of Utada's Japanese songs, you quickly realize that she is a talented poet (so much deeper than your average Jpop!), and although her English lyrics are a little more shallow, they are still filled with beautiful metaphors that go far beyond BoA's dance floor urgings (though I have to say Dirty Desire is way beneath her!). This Is The One is a solid album that I'll be listening to a lot. I hope both of these artists accomplish what they want with these US releases, although I have to admit it feels a little cooler to buy import CDs directly from Japan!
The second artist is Utada Hikaru, who is such a superstar in Japan that her debut album is still the number one selling album ever. Utada actually attempted to break into the US market a few years ago with the album Exodus, which was kind of a disaster (even though I still enjoy the CD) with its embarrassing lyrics (Easy Breezy comes to mind), but now she's ready to try it again with This Is The One. Unlike BoA's complete 180 style change, this Utada album is a natural progression of her musical feel, and the results are totally fantastic (maybe not as good as her previous Heart Station, but still wonderful). The melodies show off her voice, the production is lush, and the mood is perfect - listening to Utada in English feels something like Everything But The Girl crossed with Sade. If you look at the translation of some of Utada's Japanese songs, you quickly realize that she is a talented poet (so much deeper than your average Jpop!), and although her English lyrics are a little more shallow, they are still filled with beautiful metaphors that go far beyond BoA's dance floor urgings (though I have to say Dirty Desire is way beneath her!). This Is The One is a solid album that I'll be listening to a lot. I hope both of these artists accomplish what they want with these US releases, although I have to admit it feels a little cooler to buy import CDs directly from Japan!
Batman: The Animated Series Vol 4 : 4 of 5
For the past few weeks I've been enjoying this final volume of the Batman animated series (yet another Christmas DVD set), although I prefer the first few seasons more than this one. This time around (from 1997-1998) Warner Bros. went with a completely new design of the show in more ways than one - all of the character looks were updated to be more angular and modern, and Batman operates much more as a "team leader", since Batgirl, Nightwing (the original Robin) and Robin (now Tim Drake) are all full-fledged crime fighters. This season doesn't have quite the same level of style (no more beautiful title cards, for example), but there are still several classic episodes that everyone loves. Over The Edge is a brilliant dream sequence that explores the end of Batman (and even includes the death of Batgirl), and Old Wounds does a great job of explaining the Dick Grayson split and transition into becoming Nightwing. Holiday Knights is a really fun set of vignettes, including the hilarious Harley & Ivy Christmas spree, and this multi-part style is also used in the fantastic Legends of the Dark Knight, which features a glimpse of the campy 60s Batman as well as the gritty Frank Miller Batman! Watching these episodes again was really fun, since I remember how shocking the visual redesign was to me in the beginning, which now seems totally normal. Most of the designs are successful (especially Scarecrow, who went from silly to terrifying), although reducing Mr. Freeze to a living head was a little much (and I also think the female characters like Batgirl and Poison Ivy were sexier before). It's nice that almost all of the rogues gallery is used in this season (most likely to show off their new looks), so overall there's an episode for everyone. The bonus features are wimpy as usual, with only three half-hearted audio commentaries (which I totally enjoyed anyway!), but this is still an essential DVD set if you're a Batman fan!
Maximum space and book swapping
Back when I organized all my books and manga, I made a firm commitment to the concept of "maximum space", meaning that when a defined space is full and I want to buy more, I have to get rid of things to make room. This idea has been guiding all of my collections and their growth for quite a while, so I know they will never get out of hand! I have two small shelves designated as my maximum space for manga, and recently I reached the limit. Since I'm still buying and enjoying manga, I had to find a way to lose some old series. The problem with manga is it's worth next to nothing for trade-in (I found a place online that would do one dollar per volume, but it just wasn't worth the effort). However, I remembered reading about a site called PaperBackSwap, which basically just acts as a broker of one-for-one book trading, which seemed like a good fit for manga. It turns out there were tons of people who wanted the books I decided to offer, since I had about 10 requests in minutes! PaperBackSwap actually knows the weight of the books you're sending, so it can print out Media Mail postage (pretty cheap) for you, which is super handy. You can actually wrap the book in printer paper if you want, but I found it easier to use brown paper and just tape the postage on. Anyway, it was really simple, and now I have lots of credit to use to get swapped books. The site has over three million books registered, but you can even put books they don't have yet on a wish list, so if someone offers them you can snatch them up. Since you pay the postage when you send books, you don't pay anything to receive them, and today I just received my first book, a Steve Martin novel that has been on my Amazon Wish List for ages! It will take me a long time to "spend" the credit I have built up, but I'm definitely sold on the idea!
Labels: decluttering, manga
Fun festival, frustrating camera
This weekend I was asked to be a photographer at the Japan-America Society of Greater Austin Sastuki Matsuri (May Festival). It was kind of cool that someone discovered my website and photos and figured out how to contact me (via my pal Kumiko), so I was happy to do it. Several years ago I went to this festival with my pal Barron, when it was held at the Zilker Botanical Garden, but thank goodness it was in a middle school cafeteria this year, since it poured rain all day. I had a good time trying to capture all of the various events, from taiko drums to kendo sparring, but it was pretty challenging, and made it clear that I really need to upgrade my ancient Canon SD400, which is completely beat-up and starting to physically malfunction every now and then. My biggest problem was white balance, since the lighting appeared to be florescent, but I think it was actually tungsten, so most of my photos are too orange even though I thought I was doing the right thing (I think I was using the wrong metering mode, too, but there's not much you can do after 600 photos!). I also had to shoot everything in grainy 400 speed with my pitiful zoom, which certainly didn't help! It was still fun, though - I enjoyed the performances, and it was nice to see the huge crowd of people interested in Japanese culture. (But I'll definitely be buying a new camera before the next photo taking opportunity!)
View photos: JASGA Satsuki Matsuri 2009
View photos: JASGA Satsuki Matsuri 2009
Labels: photos
Godzilla, Mothra & King Ghidorah: Giant Monsters All-Out Attack : 5 of 5
It's interesting how the Millennium series Godzilla films are either hit or miss, but I'm happy to say that this 2001 movie is definitely a major hit - maybe one of the best Godzilla movies ever (which is a big complement since I prefer the Showa series)! Just like the previous film, the entire timeline is thrown away yet again, leaving the past with only the original 1954 Godzilla (plus a brief mention of the US fiasco), but it's worth it because it allows other classic kaiju to be re-imagined as mystical "guardian monsters" who have been sleeping, waiting to protect the Earth from Godzilla. This movie features the meanest, most destructive Godzilla ever (he even has creepy white eyes), and there are several scenes that focus on his victims just long enough to establish how evil he is, which is necessary since you have to root for Baragon, Mothra, and King Ghidorah (yes, he's a good guy now!) during the climactic battle! The main character is a cute reporter named Yuri, the daughter of the military commander who remembers the 1954 attack (as shown in a nice flashback), and it's incredible how easy it is to get attached to them and their coworkers during the course of the film. After a fantastic build-up, the huge battle is simply fantastic, featuring some of the best effects I've seen in a kaiju movie! The use of CG and digital compositing that wasn't possible in previous movies is pretty incredible, making for some truly awesome and realistic shots (although at times the effects are so crystal clear that it doesn't have that Godzilla film look!). Mothra is truly beautiful as she hatches from her cocoon, and King Ghidorah is almost majestic! Because of the great characters, the wonderful pace of the plot, and the awesome effects, watching this movie was an engaging experience, and I can't recommend it enough. If you're someone who has blown off Godzilla movies as being silly, it's time for you to watch Giant Monsters All-Out Attack!
Mobile Suit Gundam SEED Vol 5 & Vol 6 : 4 of 5
I'm really enjoying this awesome anime series, and I can easily see how so many fans have been obsessed with all the amazing technology - everything has a intricate design and a cool code name (and new vehicles and weapons are introduced in almost every episode!). But along with the action, the character development on this series is stellar, since they always manage to focus on both sides of the war, showing the conflict inside each character doing what they feel they must do, even though they may be a kind soul with no desire to kill. That point is made clear in two key battles: first with Kira's defeat of the Desert Tiger (it was a shame to see this interesting character go so soon), and next with the huge face-off between Kira and Athrun, during which two of the most likable personalities are killed (Nichol's death at Kira's hands is particularly sad, since Nichol's sensitive and artistic nature is brought out in the previous scenes). On the female side of things, Flay (I still don't like her) is jealous of Cagalli, who befriends Athrun while they are stranded on an island, and we also learn of Cagali's connections to Orb, the neutral nation who made the new mobile suits in the first place. There's also some big news mentioned by Kira's parents about his sibling, but it's no surprise to me (I'm just waiting for the inevitable to be revealed!). Action-wise, I loved the undersea battle, and the Archangel's huge barrel roll was pretty spectacular! Although Volume 6 has a few obligatory flashback episodes, they're definitely well done (and the switch to Nami Tamaki's new theme song is pretty awesome!). I'm really looking forward to seeing where this series goes next, but I have to take a break to complete my Godzilla goal!
Manga Mentions 5/09
Kaze Hikaru Vol 11: This series continues to be one of my favorites, since it always does an amazing job of combining factual (and researched) history and culture with Shojou emotion! This volume has the story of Mabo, a boy who finally learns to speak by using the Iroha poem (awesome cultural reference!), and also contains the baffling seppuku of Yamanami (leaving behind poor Akesato), which left me in tears. Bushido seems so complex at times, but watching it lived through these characters is fascinating!
Hikaru no Go Vol 14: I'm getting a little tired of this story, but the artwork is so spectacular that I've got to keep reading it. Toya Meijin (Akira's father) gets to play Sai online (to keep Hikaru's involvement secret), and there's also an interesting game where Hikaru is challenged to "one color Go" (they have to memorize which stones are their own!). I feel like they really need to move the plot along, rather than spending page after page showing people holding stones, but I'm still enjoying it!
Appleseed Vol 2: Since I'm getting close to finishing a few series, it's fun to continue this one for a great change of pace! This volume has some great action, and there's so much detail on every page that I have to stop and study it awhile, especially since I love futuristic cities so much. Strangely, this volume kind of ends the main story (and "appleseed" has a somewhat different meaning from the movie version), so I'm interested in finding out what Deunan and Briareos do in the next volume.
Video Girl Ai Vol 12: This manga is a great example of a story that went on for too long, so I decided to just knock out the last few volumes and get it over with. The Gokuraku bad guy completely turns into a Wizard of Oz kind of character, and Moemi cuts her hair to be more like Ai, even though she doesn't have a chance at this point. The only touching scene is Yota's celebration for Ai's imaginary 17th birthday.
Video Girl Ai Vol 13: This final volume has a bunch of crazy conflict between the Gokuraku bad guy and the kind old clerk, which really seems out of left field this late in the story. The ending isn't too bad, although the brief wrap up of all the other characters is a little forced, but it took so long to get here that the finale was disappointing. Video Girl Ai is a good story overall with some excellent moments, but it would have been much better as an 8-10 volume series!
Hikaru no Go Vol 14: I'm getting a little tired of this story, but the artwork is so spectacular that I've got to keep reading it. Toya Meijin (Akira's father) gets to play Sai online (to keep Hikaru's involvement secret), and there's also an interesting game where Hikaru is challenged to "one color Go" (they have to memorize which stones are their own!). I feel like they really need to move the plot along, rather than spending page after page showing people holding stones, but I'm still enjoying it!
Appleseed Vol 2: Since I'm getting close to finishing a few series, it's fun to continue this one for a great change of pace! This volume has some great action, and there's so much detail on every page that I have to stop and study it awhile, especially since I love futuristic cities so much. Strangely, this volume kind of ends the main story (and "appleseed" has a somewhat different meaning from the movie version), so I'm interested in finding out what Deunan and Briareos do in the next volume.
Video Girl Ai Vol 12: This manga is a great example of a story that went on for too long, so I decided to just knock out the last few volumes and get it over with. The Gokuraku bad guy completely turns into a Wizard of Oz kind of character, and Moemi cuts her hair to be more like Ai, even though she doesn't have a chance at this point. The only touching scene is Yota's celebration for Ai's imaginary 17th birthday.
Video Girl Ai Vol 13: This final volume has a bunch of crazy conflict between the Gokuraku bad guy and the kind old clerk, which really seems out of left field this late in the story. The ending isn't too bad, although the brief wrap up of all the other characters is a little forced, but it took so long to get here that the finale was disappointing. Video Girl Ai is a good story overall with some excellent moments, but it would have been much better as an 8-10 volume series!
Grand Canyon adventure
Last weekend I took a four-day vacation to visit my pals Ryan & Jennifer in Phoenix, which included an incredible adventure to the one-and-only Grand Canyon! After I arrived, Ryan and I spent the first day enjoying the Phoenix Zoo, which was so unusual since I've never seen a zoo in the middle of the desert before. Even though most of the animals were hiding from the hot sun, they have a fantastic giraffe habitat and a cool enclosure were you can hang out with squirrel monkeys. The next morning we got up early to drive to the canyon, and on the way we found a crazy Flintstones RV park, plus an aviation museum with an old Constellation (Dad navigated on this plane in the Air Force, and I had never seen one in person)! After checking out our hotel, we entered Grand Canyon National Park and saw the canyon itself. It was the first time Ryan and I had been there, and the sight completely blew me away - it's just so huge and expansive that I could hardly believe it was real! At Grand Canyon Village we took a look at all the buildings there, then had lunch at the El Tovar (and got a window table!). After that, we started driving east along the South Rim and stopped at every observation point. Each one was different and beautiful, and we had a great time taking photos at each one! Speaking of photos, Ryan got a new digital SLR and really gave it a workout (with three cameras going, we actually took over 1,000 pictures!). The famous Watchtower was the feature of the last point, and it's a really interesting (if somewhat strange) structure. We ended the day by watching the sunset (incredible!), then went back to the hotel for drinks, which made it hard to get up the next morning to catch the sunrise, but we made it! Even the drive back to Phoenix was fun, and we stopped in Flagstaff to check out the downtown area. The trip was really amazing, and it was great to share such an incredible nature experience with my pals Ryan & Jennifer!
View photos: Phoenix Zoo
View photos: Drive to the Grand Canyon
View photos: Grand Canyon
View photos: Flagstaff
View photos: Phoenix Zoo
View photos: Drive to the Grand Canyon
View photos: Grand Canyon
View photos: Flagstaff
Last of the Jedi Vol 6 / Jude Watson : 3 of 5
I'm still enjoying this series of Star Wars books, and I'm definitely not ashamed to be reading these Scholastic big-print mini-novels (except in public)! Our hero Ferus Olin is now fairly established as a double agent, so there's lots of creepy interaction with the Emperor and Darth Vader, which is the best part of the story, since Anakin and Ferus grew up together in the Jedi Temple. Ferus doesn't know who Vader really is, but of course the opposite isn't true (and Vader even says "I know you" to Ferus in a particularly tense scene!). The plot is a seamless transition from the previous book, and is kind of overflowing with planetary political intrigue that gets a little tedious at times, but there are still some good action-packed moments to break up the monotony. It's interesting to read about pockets of resistance forming and their various plots, but the main theme of this book is the danger of Ferus being so close to the evil of the Empire and his worries about the dark side, which Ferus counters with memories of his Jedi training and his old master in some poignant flashbacks. I love how Jude Watson constantly switches the point of view character in each chapter, so the reader gets to see things through the eyes of Ferus, Trever, and even Vader at times - internal dialogue and characterization has always been a strongpoint of these books that keeps me coming back for more. Overall, this volume wasn't spectacular, but of course it was good enough to make me want to keep reading the series!
Austin Symphony / Sarah Chang : 3 of 5
I don't think I ever realized the importance of a symphonic program as a whole until I experienced the Austin Symphony's latest concert, which featured three works that were individually OK, but became kind of a disjointed mess when put together. I think this was probably just a case of bad timing, since the first work was a modern symphony written as a gift for Maestro Peter Bay's 10th anniversary with the symphony, and Sarah Chang was probably scheduled to appear way in advance, so there was only room to throw in some quick Tchaikovsky to fill out the evening. Unfortunately, each work was a little disappointing, starting with the world premiere of Welcher's Symphony No. 5, which should be called the "use every crazy percussion instrument you can find" symphony. It was almost laughable to see the four percussionists constantly switching between everything from bongos to bowed cymbals, and truthfully it was a bit trying to listen to the whole thing (although I did enjoy many of the musical themes). It was really nice to see Sarah Chang perform, since she is such a renown violinist, but her stage presence was a little less refined than I had hoped (I liked the passion behind her walking around the stage, but her uncontrollable bow flourish got old quickly). Of course, she was technically magnificent, and I would definitely enjoying hearing more of her playing on CD! Finally, Tchaikovsky's Capiccio Italien is like a musical cartoon, which is wonderful on it's own, but was simply bizarre sounding after the first two works of the evening. My pals Matt & Kumiko and I still had a wonderful time at the symphony, but we all agreed that this strange program left us hoping for some better choices next time.
Star Trek : 5 of 5
I can hardly believe it myself, but yesterday I got to see a sneak preview of the new Star Trek movie (thanks to my pal Melinda and her lucky free passes again)! I promise this will be a spoiler-free review (even though it will be tough!), but I want to get my thoughts down while they are fairly fresh, since this is such an important movie to Star Trek fans like me. The best thing I can say about the film is that I want to see it again right now! I don't know how they did it, but JJ Abrams managed to create an awesome story that should make long-time fans happy, while brilliantly (and simply, I might add) making possible an entirely new future of Star Trek adventures in the years to come. Although the other Star Trek series were all enjoyable and fun to watch, nothing will ever top the original series characters for me, so even though this is an entirely new, younger cast, they immediately became the Enterprise crew that I know so well. Their youth (Chekov is only 17!) is pretty cool, but even though they can be wild and full of fire, there's no mistake that they are also brilliant scientists and serious about Starfleet! I was happy with the entire cast, except for Winona Ryder's small role as Spock's mom, just because it was jarring to see a well-known face. It was a blast to catch the many references to the series and previous movies, but also fun to see the updated Enterprise, which looks cool both inside and out. There's hardly a need to mention the special effects, since everything looks amazing these days, but I will say that I really enjoyed the glimpses at Starfleet Academy in future San Francisco as well as the Vulcan city where Spock grew up, just because I have a thing for sprawling futuristing cities. I'm sure more demanding Star Trek fans will be more negative than me, but I'm totally into this movie as both a satisfying trip with my Enterprise friends, as well as a starting point for new movies I can get excited about!
Godzilla vs Megaguirus : 3 of 5
It's been way too long since I continued with my quest to watch every Godzilla movie, so it's time to step up the pace since I only have five more to go! I actually stumbled upon this 2000 film on TV and watched it several months ago, but it was cool to see it again in Japanese on wide-screen DVD and pay more attention this time. Just when it seemed like the Millennium timeline was coming together, this movie decides to change it all again with a long recap of flashbacks, including retrofitting the modern spiky Godzilla suit into 1954 black & white footage, and continuing with some crazy history that ends up with Osaka as the current capital of Japan! After that's in place, we learn about G-Grasper (anti-Godzilla force) and their new weapon called Dimension Tide that actually fires miniature black holes, which they hope to use to swallow up Godzilla. Of course, the testing of that weapon releases some prehistoric dragonflies that start out as eggs, hatch into big bugs that kill people (with some of the most disgusting deaths in any Godzilla movie), change into their flying form, and later bring forth Megaguirus, a giant insect that looks way too much like Battra from Godzilla vs Mothra. The story is pretty interesting, and includes some unique situations like Godzilla battling a swarm of thousands of flying dragonflies, plus the complete (and fairly convincing) flooding of Shibuya (I love it when Megaguirus lands on top of the well-known 109 building)! Some of the effect shots are pretty magnificent, including some incredible compositing of the monsters into helicopter shots of actual locations, and the amazing scene where Kiriko (the female soldier main character) actually rides on Godzilla's back as he swims in the ocean (a truly impressive effect). Kirkio and Kudo (the hot-shot cocky scientist hired by G-Grasper) aren't particularly great characters, but at least they keep the plot moving well. Godzilla vs Megaguirus isn't super popular among Godzilla fans, but I really enjoyed it since I had seen my kaiju friends in quite a while!
Subscribe to: Posts (Atom)

subset: commoncrawl


text:
Haven't we had enough of MPs' expenses scandals? There are several answers to that question, most of them negative. When the story gets stale and starts to fade some refreshment pops up.
The police announce an investigation into phantom mortgage claims. The outgoing Speaker attacks the party leaders. The authorities heap ignominy on their heads by publishing blacked out claims. Now we have the Speaker candidates on the front pages with their gardening, accountancy, home office costs. The sums have been aggregated over some years to increase the impact. Legitimate claims mingle with the potentially illegitimate.
It's not always clear from the papers which is which. You hear private defences no one dares make publicly for fear of rotten eggs. For instance, I've heard an MP defending Peter Viggers: "He didn't actually claim for the duck island. He sent all his expenses to the Fees Office and asked them to pay what they could. They rejected the duck island, and he accepted that."
When I ran into Andrew Tyrie in the corridors, he showed me the Revenue advice to MPs and Ministers. It is absolutely unambiguous in its approval of "flipping". What Hazel Blears and Kitty Ussher did was not just legal, or tolerated. It was recommended.
If Her Majesty's Revenue instructs you how to reduce your tax bill in an officially approved way, even the Archbishop of Canterbury would designate his second home his main home "for tax purposes". The Revenue is saying that "for tax purposes" is a technical construction that needn't bear any real relation to the material world.
And who is such a socialist that he offers to pay double the rate of stamp duty on their house purchase? As an MP said, "MPs are now the only people in Britain who can't do this".
The difference with them and us, admittedly, is that the public purse paid for the second home in the first place. The cost was nationalised and the profit was privatised. It was a rotten system yes, but that's what the system was.
There is a lesson at the heart of it. Legislators can make language mean what they want it to mean. As an aside, this suggests that Adam Price's Bill – The Prohibition of Deception Bill which makes it illegal for MPs to make false or misleading statements – is unlikely to make a great deal of difference to the practice of making false or misleading statements. Because, in short, rules are a rotten way to regulate MPs' behaviour.
For instance: It is impossible to be clearer in the black letter statement that begins the MPs' rule book. Expenses can only be claimed for items that are wholly and necessarily incurred by the job. But that rule was modulated, moderated and modified by the officials who administered it. When the rule had evolved out of recognition, officials were saying that garden plants were an allowable expense.
So we can be certain that a statutory code won't do what they want it to do. It will either be so vague as to be meaningless ("Letters from constituents shall be answered in a timely fashion.") Or so prescriptive as to bring the MPs' life to a halt ("Letters from constituents shall be answered within 20 working days.") There'll be constituents comparing response times and the losers will have the option of taking their MPs to court for non-compliance with the code.
The answer to expenses – and there is a simple answer to it – is a wiki-site on the internet. Everything an MP claims for goes up on the site. It will be interrogated by the public, of that we can be sure. Every one of 5 million receipts will be seen by someone or other, and interesting examples will be forwarded to party leaders and newspapers.
This removes the need for legislation, for another quango, for a complex bureaucratic structure, for summonses and appeals and interminable consultations. It puts scrutiny in the hands of "the people". It devolves power in the way they are always saying they want to do. It involves the public. And the primary deterrent to extravagant or doubtful claims will be cultural, not procedural.
Because when it comes to MPs, the final fact is: for every rule, there is a way round the rule.
- More about:
- Gardening
- Ghosts
- Hazel Blears
- Mortgages


text:
Improving an organization's procurement brings benefits far beyond saving money or raising quality standards. It can dramatically improve the valuation of the organization as a whole.
At a time when many companies are facing tough times, procurement is becoming recognised as an essential component of corporate strategy for leading organizations. It is well understood by CEOs and CFOs that buying more efficiently can bring big cash savings and more revenue through improved quality of goods and services as well as more reliable supply chains, but its strategic impact is now starting to elevate CPOs up the corporate agenda.
Procurement projects are traditionally aimed at reducing the purchase price of goods and services and improving on the value delivered, through for example, increased functionality or increased quality of service. They often produce very quick wins which can amount to millions of dollars of value for larger organizations. Cashable savings can often be identified for a wide range of categories including indirect items (office supplies, telecoms, facilities for example), direct categories (raw materials, front line services etc.) and now even to very complex categories like transportation or construction, traditionally considered extremely difficult to manage. At the same time, the supplier base can be streamlined and procurement processes rationalised, producing further immediate benefits in terms of lower transaction and administration costs.
Please complete the form below to receive your free copy of the whitepaper:


text:
Fit Tip: Length - true to size. Width - Slightly wide. Arch - Slightly low. Little to no break-in.The Nike Air Vapor Advantage tennis shoe is a classic take-down of the Nike Vapor 9 Tour. This shoe is designed for the player who wants responsiveness and a fast moving product that covers the court on light and nimble feet. Now with a comfortable and durable leather upper. The Vapor Advantage features a wide fit for players who need a little more room to maneuver. The rubber toe tip offers extra durability in high-wear zones. Nike XDR rubber is a highly resilient rubber outsole that provides outstanding durability. External shank plate delivers excellent heel to toe transition. Nike Air Cushioning is strategically placed in key areas of impact.
Color: White/Dark Grey/Black
Average weight: 13.3 oz.
I love these shoes, they are really light and when you're playing on the court they slide like no other. I highly recommend these shoes!! Really like the leather upper version!
Don't Forget...


text:
Author Tags: First Nations, Kidlit & Young Adult
Publicity materials for Taan's Moons (McKellar & Martin, 2014) tell us "There's a moon in the sky. It looks like a drum, which guides the earth where Taan is from. So begins a year in the life of Taan, which means 'bear' in the Haida Language." Alison Gear's picture book follows Taan as she experiences the Haida Moon cycle and its associated seasons. Kiki van der Heiden's felted artwork, created with the children of Haida Gwaii, illustrates the story. Gear and van der Heiden worked with the community of Haida Gwaii to create this book, and "the title of each moon cycle has been translated into both Skidegate and Old Massett Haida, honouring language and wisdom."
Alison Gear was born in Vancouver and earned a Master of Arts in Language and Literacy Education at the University of British Columbia. She moved to Haida Gwaii in 1996 where she works as an Early Learning Coordinator for the Haida Gwaii School District. Illustrator Kiki van der Heiden was born in the Netherlands and moved to Haida Gwaii in 2001.
Taan's Moons: A Haida Moon Story (McKellar & Martin Publishing, 2014) $19.99 978-09916-7824-2 (illustrated by Kiki van der Heiden)


text:
This piece was made using Golden acrylics and silicone painting tools on Di-bond (which is a smooth sheet of aluminium attached to a PVC core making a very stable substrate). These paints create bright jewel-like colours and through transparent glazing and lifting out, a mysterious quality of depth and space comes about. I made the piece through building various layers of colour and working into these whilst still wet to capture a spontaneous uplifting energy. The piece is framed in a white contemporary frame and can be hung anywhere in the home.
Acrylic on Alu Di-bond
$394.85 Sold
Acrylic paintingby Richard Heys
Oil paintingby Richard Heys
Acrylic paintingby Richard Heys
Acrylic paintingby Richard Heys


text: I eat at Subway or Culvers at least once a week. It's been months since I've been to BK though I have a McD's smoothie or coffee probably once a week.How often do you eat fast food? (daily, weekly, monthly, never?)Eggs... always eggs... try to get my protein kick start for the day.And what do you typically have for breakfast?


text:
Now Viewing:
Product Highlights
The Tamron 13VG286-SQ is a DC auto iris CS-mount lens designed for 1/3-inch CCD cameras. The 2.8 mm focal length gives very wide 80° angle of view. At 6 mm it shows 44°. Two aspherical lens elements limit distortion and provide corner to corner sharpness. Its very fast f/1.2 maximum aperture allows it to be used in low light areas for color images. The auto iris control cable is complete with a 4-pin square connector and the camera is ready for operation right from the box.
|Image Format
|1/3-Inch CCD
|Focal Length
|2.8 to 6.0 mm with Manual Settings
|f/1.2 to f/64
|Iris Type
|DC Auto Iris
|Focus Type
|Horizontal View Angle
80° Horizontal Angle at 2.8 mm
44° Horizontal Angle at 6 mm
|Minimum Object Distance (M.O.D.)
|11.8 Inches (0.3 Meters)
|Dimensions (WxHxD)
|1.5 x 1.35x 1.9 Inches (43.0 x 43.0 x 56.1 mm)
|3.6 Oz (100 g)
|Packaging Info
|Box Dimensions (LxWxH)
|3.3 x 2.4 x 2.9"


text:
|Approved Scholarships and Grants, and Educational Courses
Authored by Ron Thomas
What good is lucrative Maryland College Scholarship if you are not a resident of Maryland? Guess what, we already thought of that excuse. (LOL). To be included in our top 50 Maryland College Scholarships the eligibility requirements for the Maryland College Scholarship MUST allow a non-resident of Maryland to attend the Maryland college or university just as if the scholarship applicant were a Maryland resident. We know that Maryland college scholarships are very competitive, and so we have listed the top 50 Maryland College Scholarships that moms, mothers, students, and minority students can apply to as well. The more eligible persons, the greater the competition.
Why the need for a list of the top 50 Maryland College Scholarships?
Why do we need such a list of the top 50 Maryland College Scholarships? To be honest, and frank, we don't need a list of the top 50 Maryland College Scholarships anymore than we need a list of the the top 100 Maryland College Scholarships, or the top 500 Maryland College Scholarships. What this list is designed for, and who the list is designed for requires us to develop a concise summary of college scholarships for students and working adults who want to eliminate Maryland college scholarships that pay very little and which the students, moms, mothers, and women, are not even eligible for in the first place. Do you as a student want to concentrate on a $100 scholarship when seeking an education in Maryland, or do you want to concentrate on the $50,000 Maryland college scholarships? Or, the $10,000 renewable Maryland college scholarships?
For a detailed review of our Maryland College Scholarships, please visit our Maryland College Scholarship page at:
Scholarship Club: Join our Scholarship Club
Our Scholarship Club features an extensive category of Scholarships, Grants, and financial-aid for students, moms, single mothers, and women. We encourage both U.S. students and International students to join our Scholarship Club for access to various financial-aid options,including the Platinum Scholarship, Gold Scholarship,Silver Scholarship, Bronze Scholarship, Scholarship X.
For a detailed review of our college scholarships, college grants, student-loan options, and financial-aid options for moms, students, mothers, and stay-at-home mothers that are seeking scholarships, grants, and financial-aid, please visit our College Scholarships website at:
Leave a comment
You must be logged in to post a comment.