text:
In general, the invention relates to a method for optimized execution of a computer program including detecting a preservable static field in said computer program with a compiler, comprising detecting at least one selected from the group consisting of a getstatic instruction and a putstatic instruction, annotating said preservable static field to create an annotation indicating whether said field is preservable, compiling said computer program to produce an output using said annotation, wherein said output includes information about said field, encoding said output if backward compatibility is required, loading said output, and executing said output in an environment.
1. A method for optimized execution of source code comprising:
detecting a target field in said source code with a compiler;
annotating said target field prior to compiling to create an annotation indicating weather said field is preservable, comprising annotating at least one selected from the group consisting of a getstatic instruction and a putstatic instruction;
compiling said source code to produce an output using said annotation, wherein said output includes information about said target field;
encoding said output if backward compatibility is required;
loading said output; and
executing said output in an environment.
2. The method of
tuning the detecting of said target field by designating at least one selected from the group consisting of a static final field of primitive type, a static final field of type string, and an immutable static (multidimensional) array of primitive type, as target field variables.
3. The method of
4. The method of
5. The method of
6. The method of
7. The method of
8. A computer program product comprising:
a computer usable medium having computer readable program code embodied therein configured for optimized execution of source code, said computer program product comprising:
computer readable code configured to cause a computer to detect a target field in said source code with a compiler;
computer readable code configured to cause a computer to annotate said target field prior to compiling to create an annotation indicating whether said field is preservable, comprising annotating at least one selected from the group consisting of a getstatic instruction and a putstatic instruction;
computer readable code configured to cause a computer to compile said source code to produce an output using said annotation, wherein said output includes information about said target field;
computer readable code configured to cause a computer to encode said output if backward compatibility is required;
computer readable code configured to cause a computer to load said output; and
computer readable code configured to cause a computer to execute said output in an environment.
9. The computer program product of
computer readable code configured to cause a computer to tune the detecting of said target field by designating at least one selected from the group consisting of a static final field of primitive type, a static final field of type string, and an immutable static (multidimensional) array of primitive type, as target field variables.
10. The computer program product of
11. The computer program product of
12. The computer program product of
1. Field of the Invention
The present invention relates to optimized multiprocessing in a safe language, and in particular to an optimizing, backward-compatible, compiler-linker-run time architecture for multiprocessing in a safe language, such as Java.
Portions of the disclosure of this patent document contain material that is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure as it appears in the Patent and Trademark Office file or records, but otherwise reserves all copyright rights whatsoever.
2. Background Art
With advancements in network technology, the use of networks for facilitating the, distribution of media information, such as text, graphics, and audio, has grown dramatically, particularly in the case of the Internet and the World Wide Web. One area of focus for current developmental efforts is in the field of multiprocessing of web applications. In addition to passive media content, such as HTML definitions, computer users or "clients" coupled to the network are able to access or download application content, in the form of applets, for example, from "servers" on the network.
To accommodate the variety of hardware systems used by clients, applications or applets are distributed in a platform-independent format such as the Java.RTM. class file format. Object-oriented applications are formed from multiple class files that are accessed from servers and downloaded individually as needed. Class files contain bytecode instructions. A "virtual machine" process that executes on a specific hardware platform loads the individual class files and executes the bytecodes contained within.
In U.S. patent application entitled "Small memory footprint system and method for separating applications within single virtual machine," Ser. No. 09/513,291 filed on Feb. 25, 2000, Sun Microsystem assigned to the assignee of the present application, and hereby fully incorporated into the present application by reference, a method for optimized Java multiprocessing is described. In that invention, one is able to run multiple Java applications in the same Java virtual machine and introduce optimizations at load time and run time.
A Java program is composed of a number of classes and interfaces. Unlike many programming languages, in which a program is compiled into machine-dependent, executable program code, Java classes are compiled into machine independent bytecode class files. Each class contains code and data in a platform-independent format called the class file format. The computer system acting as the execution vehicle contains a program called a virtual machine, which is responsible for executing the code in Java classes. The virtual machine provides a level of abstraction between the machine independence of the bytecode classes and the machine-dependent instruction set of the underlying computer hardware. Hence, Java provides an example of a safe language.
A "class loader" within the virtual machine is responsible for loading the bytecode class files as needed, and either an interpreter executes the bytecodes directly, or a "just-in-time" (JIT) compiler transforms the bytecodes into machine code, so that they can be executed by the processor. FIG. 1 is a block diagram illustrating a sample Java network environment comprising a client platform 102 coupled over a network 101 to a server 100 for the purpose of accessing Java class files for execution of a Java application or applet.
In FIG. 1, server 100 comprises Java development environment 104 for use in creating the Java class files for a given application. The Java development environment 104 provides a mechanism, such as an editor and an applet viewer, for generating class files and previewing applets. A set of Java core classes 103 comprise a library of Java classes that can be referenced by source files containing other/new Java classes. From Java development environment 104, one or more Java source files 105 are generated. Java source files 105 contain the programmer readable class definitions, including data structures, method implementations and references to other classes. Java source files 105 are provided to Java compiler 106, which compiles Java source files 105 into compiled "class" files 107 that contain bytecodes executable by a Java virtual machine. Bytecode class files 107 are stored (e.g., in temporary or permanent storage) on server 100, and are available for download over network 101.
Client platform 102 contains a Java virtual machine (JVM) 111 which, through the use of available native operating system (O/S) calls 112, is able to execute bytecode class files and execute native O/S calls when necessary during execution.
Java class files are often identified in applet tags within an HTML (hypertext markup language) document. A web server application 108 is executed on server 100 to respond to HTTP (hypertext transport protocol) requests containing URLs (universal resource locators) to HTML documents, also referred to as "web pages." When a browser application executing on client platform 102 requests an HTML document, such as by forwarding URL 109 to web server 108, the browser automatically initiates the download of the class files 107 identified in the applet tag of the HTML document. Class files 107 are typically downloaded from the server and loaded into virtual machine 111 individually as needed.
It is typical for the classes of a Java program to be loaded as late during the program's execution as possible; they are loaded on demand from the network (stored on a server), or from a local file system, when first referenced during the Java program's execution. The virtual machine locates and loads each class file, parses the class file format, allocates memory for the class's various components, and links the class with other already loaded classes. This process makes the code in the class readily executable by the virtual machine.
In one prior art technique, the system transparently maintains a copy of the static fields for each application. Code for each method is shared among all applications, while static fields for each class are subject to automatic and transparent multiplexing. The effect of this invention is to allow for space efficient isolation among applications, reduced load and compilation times, and making the isolation between applications stronger than what class loader based Java multiprocessing could previously provide.
The above-referenced technique, however, creates problems of its own. Because multiple applications share static fields, concurrency problems arise. For instance, if application A accesses static field 1, and application B also accesses static field 1, the potential arises that application A may modify the data in static field 1, which is undesirable from a perspective of isolation. Application B expects static field 1 to be its own static field and may expect certain values from static field 1. If application A modifies this field, application B will see a modified value and have no understanding as to why it changed.
The above-referenced technique seeks to solve this problem by introducing optimizations at load time and run time which seek to protect such shared static fields in a multiprocessing environment. Optimizations at load time and run time, however, introduce considerable overhead at a time critical point from the user's perspective, while the less time critical compilation phase remains relatively unaffected. A method and apparatus is needed to target the optimal points in the compiler-loader-run time path to allocate the optimization work.
The present invention provides a method and apparatus for optimized multiprocessing in a safe language by targeting the optimal points in the compiler-loader-run time path to allocate the optimization work. One or more embodiments provide for the optimized execution of multiple processes in a single Java virtual machine. The optimization work allows for the isolation of each of the processes, and the ability to execute each process quickly by shifting the bulk of optimization work from load time and/or run time to compile time.
The invention includes a compiler which analyzes its input source code to detect "preservable static fields". Preservable static fields are defined as those fields containing variables which are certain to not be modified by multiple applications concurrently executing in the same environment. Hence, multiple applications can share the preservable static field without any need for additional overhead to protect the preservable static field from the danger associated with concurrent modification of the field by multiple applications (i.e., the applications will remain isolated from one another).
In one embodiment, preservable static fields are read only objects. In one or more other embodiments, the optimization work of the present invention includes detecting preservable static fields of the following types: (i) static final fields of primitive types; (ii) static final fields of type string; and (iii) immutable static (multidimensional) arrays of primitive types. In another embodiment, only static final fields of primitive types are detected. In another embodiment, a tunable parameter is introduced which allows customized optimization of each application depending on the needs of the user. The optimizations of the present invention significantly reduce the performance overhead associated with executing multiple applications in a single environment, such as a Java virtual machine or other suitable environment.
These and other features, aspects and advantages of the present invention will become better understood with regard to the following description, appended claims and accompanying drawings where:
FIG. 1 is an embodiment of a Java network application environment.
FIG. 2 is a block diagram of an embodiment of a computer system capable of providing a suitable execution environment for an embodiment of the invention.
FIG. 3 is flowchart of the optimization architecture phases according to an embodiment of the present invention.
FIG. 4 is a flowchart of the compilation phase according to an embodiment of the present invention.
FIG. 5 is a flowchart of the compilation phase according to a Java based embodiment of the present invention.
FIG. 6 is a flowchart of the tunable parameter according to one embodiment of the present invention.
FIG. 7 is a flowchart of modified run time according to one embodiment of the present invention.
The invention is a method and apparatus for optimized multiprocessing in a safe language. In the following description, numerous specific details are set forth to provide a more thorough description of embodiments of the invention. It is apparent, however, to one skilled in the art, that the invention may be practiced without these specific details. In other instances, well known features have not been described in detail so as not to obscure the invention.
An embodiment of the invention can be implemented as computer software in the form of computer readable program code executed on a general purpose computer such as computer 200 illustrated in FIG. 2, or in the form of bytecode class files executable within a Java™ run time environment running on such a computer, or in the form of bytecodes running on a processor (or devices enabled to process bytecodes) existing in a distributed environment (e.g., one or more processors on a network). A keyboard 210 and mouse 211 are coupled to a system bus 218. The keyboard and mouse are for introducing user input to the computer system and communicating that user input to central processing unit (CPU) 213. Other suitable input devices may be used in addition to, or in place of, the mouse 211 and keyboard 210. I/O (input/output) unit 219 coupled to bidirectional system bus 218 represents such I/O elements as a printer, A/V (audio/video) I/O, etc.
Computer 200 includes a video memory 214, main memory 215 and mass storage 212, all coupled to system bus 218 along with keyboard 210, mouse 211 and CPU 213. The mass storage 212 may include both fixed and removable media, such as magnetic, optical or magnetic optical storage systems or any other available mass storage technology. Bus 218 may contain, for example, sixty-four address lines for addressing video memory 214 or main memory 215. The system bus 218 also includes, for example, a 64-bit data bus for transferring data between and among the components, such as CPU 213, main memory 215, video memory 214 and mass storage 212. Alternatively, multiplex data/address lines may be used instead of separate data and address lines.
In one embodiment of the invention, the CPU 213 is a SPARC™ microprocessor from Sun Microsystems™, or a microprocessor manufactured by Motorola, such as the 680X0 processor, or a microprocessor manufactured by Intel, such as the 80X86, or Pentium processor. However, any other suitable microprocessor or microcomputer may be utilized. Main memory 215 is comprised of dynamic random access memory (DRAM). Video memory 214 is a dual-ported video random access memory. One port of the video memory 214 is coupled to video amplifier 216. The video amplifier 216 is used to drive the cathode ray tube (CRT) raster monitor 217. Video amplifier 216 is well known in the art and may be implemented by any suitable apparatus. This circuitry converts pixel data stored in video memory 214 to a raster signal suitable for use by monitor 217. Monitor 217 is a type of monitor suitable for displaying graphic images.
Computer 200 may also include a communication interface 220 coupled to bus 218. Communication interface 220 provides a two-way data communication coupling via a network link 221 to a local network 222. For example, if communication interface 220 is an integrated services digital network (ISDN) card or a modem, communication interface 220 provides a data communication connection to the corresponding type of telephone line, which comprises part of network link 221. If communication interface 220 is a local area network (LAN) card, communication interface 220 provides a data communication connection via network link 221 to a compatible LAN. Wireless links are also possible. In any such implementation, communication interface 220 sends and receives electrical, electromagnetic or optical signals which carry digital data links representing various types of information.
Network link 221 typically provides data communication through one or more networks to other data devices. For example, network link 221 may provide a connection through local network 222 to host computer 223 or to data equipment operated by an Internet Service Provider (ISP) 224. ISP 224 in turn provides data communication services through the world wide packet data communication network now commonly referred to as the "Internet" 225. Local network 222 and Internet 225 both use electrical, electromagnetic or optical signals which carry digital data links. The signals through the various networks and the signals on network link 221 and through communication interface 220, which carry the digital data to and from computer 200, are exemplary forms of carrier waves transporting the information.
Computer 200 can send messages and receive data, including program code, in communication networks or a distributed environments, through network link 221, and communication interface 220, for example. In the Internet example, server 226 might transmit a requested code for an application program through Internet 225, ISP 224, local network 222 and communication interface 220.
The received code may be executed by CPU 213 (or other processing units in a distributed environment) as it is received, and/or stored in mass storage 212, or other non-volatile storage for later execution. In this manner, computer 200 may obtain application code in the form of a carrier wave.
The computer systems described above are for purposes of example only. An embodiment of the invention may be implemented in any type of computer system or programming or processing environment.
According to one or more embodiments of the present invention, source code generated by a computer programmer, a Java program for instance, is transformed (compiled) into an application which executes on a host computer system, a Java virtual machine for instance. These phases are described in connection with FIG. 3. Step 300 is the programming step, where a computer programmer generates source code. The present invention is designed so that at step 300, the computer programmer is unaware of any modification by the present invention to the compiler-loader-run time architecture with which he or she is familiar. Thus, the invention is transparent and the programmer may continue to generate the source code for applications in an identical manner to the way the programmer generated source code in the prior compiler-loader-run time architecture. At step 310 the compilation phase occurs, where source code generated at step 300 is transformed into output by the modified compiler of the present invention. Step 320, is the loading step. At step 320, the output generated by the modified compiler at step 310 is loaded into a target computer's memory. At step 330, the run time step occurs. The run time step can include, for instance, a Java virtual machine accessing the data provided by the loading step 320, and executing the Java application to a user's desktop.
The modified compiler of the present invention operates in accordance with FIG. 4. The compiler is configured to receive input 400 in the form of source code and analyze the input to detect preservable static fields 410. A static field is preservable if it has a static variable which can remain in its original class and be shared by multiple applications and still allows the multiple applications to be isolated from one another.
Take, for instance, a variable x which is to be held constant in a computer program to the value of 1. In this case, the compiler 310, loader 320, and run time steps 330 will obey this property. X will always have the value 1 and it can stay in its original class because x may be read, but never written to or modified. Therefore, multiple applications may access x without the need for protection of the variable in order to maintain isolation. Thus, it is optimal to identify variables with properties, such as x, and not waste time in the compiler-loader-run time phases protecting such a variable, specifically when the danger of losing the isolation property is nonexistent.
At step 420, the compiler annotates the preservable static fields. The compiler stores the annotated fields at step 430. Thereafter, compilation occurs which generates compiled output 440 including information about the preservable static fields.
One or more embodiments of the present invention are configured for optimized multiprocessing in Java. The modified compilation process of these embodiments are described in connection with FIG. 5. At step 500, the modified Java compiler receives Java source code as input produced at step 300. At step 510, the compiler locates getstatic and putstatic instructions in the input. Next, at step 520, the compiler annotates the getstatic and putstatic instructions with the information on whether the target field is preservable or not. At step 530, the annotated fields are stored as attributes in generated class files. Thereafter, the annotated code is compiled at step 540. If backward compatibility is required at step 550, an attribute mechanism is used at step 560 to encode the compiled information, so that the produced code complies with the class format and can be run both by a modified run time (described below) and by the traditional Java virtual machine. Otherwise, compilation is complete at step 540.
Preservable static fields are read only objects in one embodiment. In another embodiment, the compiler is configured to identify as preservable static fields only the fields of static final primitive types. Detecting only static final primitive types is a simple but effective technique which can cut overhead by fifty percent when running multiple applications in environment, such as a Java virtual machine.
In another embodiment, the following preservable static fields may be detected: (i) static final fields of primitive types; (ii) static final fields of type string; and (iii) immutable static (multidimensional) arrays of primitive types. The invention provides a tunable parameter, which allows a user to choose what fields should be defined as preservable static fields for a given optimization. In what manner the user chooses to designate preservable static fields is analogous to the tradeoff between compilation time and compilation code quality.
The tunable parameter is described in connection with FIG. 6. At step 600, the invention detects static final fields of primitive type. At step 610, the invention determines whether static final fields of primitive type should be designated as preservable static fields. If so, static final fields of primitive type are designated as preservable static fields at step 615. At step 620, the invention detects static final fields of type string. At step 630, the invention determines whether static final fields of type string should be designated as preservable static fields. If so, static final fields of type string are designated as preservable static fields at step 635. At step 640, the invention detects immutable static (multidimensional) arrays of primitive type. At step 650, the invention determines whether immutable static (multidimensional) arrays of primitive type should be designated as preservable static fields. If so, immutable static (multidimensional) arrays of primitive type are designated as preservable static fields at step 655 and the invention proceeds to step 420.
In U.S. patent application entitled "Small memory footprint system and method for separating application within single virtual machine," Ser. No. 09/513,291 filed on Feb. 25, 2000, Sun Microsystems assigned to the assignee of the present application, and hereby fully incorporated into the present application by reference, a synchronized static method transformation is described, which can be done quickly and efficiently at load time. Synchronized static method transformation should not be performed at compile time because it depends on the existence of per-application monitors, which will not be present in unmodified run times.
Modified run time operates in accordance with FIG. 7. As with a traditional Java virtual machine, classes are laid out in memory, except for static final non-preservable fields. Static final non-preservable fields are placed in a run time maintained array, indexed by an application identifier 710. Implementation of getstatic and putstatic instructions are modified from traditional run time. At step 720, the invention determines if there is a getstatic or putstatic instruction. If there is not, the invention proceeds to the next instruction at step 730. If the instruction is a getstatic or putstatic instruction, the invention determines whether it is a static final non-preservable field at step 740. For non-preservable statics, their values are accessed in the per application arrays at step 760. Static initializers are properly invoked to initialize per-application copies of static fields at step 770. Otherwise, getstatic and putstatic instructions proceed unmodified at step 750. If there are more instructions at step 780, the invention returns to step 720, otherwise run time is complete. Such modified run time can run both the output of the modified compiler, taking advantage of the optimization work performed during the compilation process, as well as Java bytecode produced by ordinary compilers. In the latter case, all fields are implicitly non-preservable.
Thus, a method and apparatus for optimized multiprocessing in a safe language is described in conjunction with one or more specific embodiments. The invention is defined by the claims and their full scope of equivalents.
Patent Citations
Non-Patent Citations
Referenced by
Legal Events
Original Image


text:
Quantitative transcriptome data for the malaria-transmitting mosquito Anopheles gambiae covers a broad range of biological and experimental conditions, including development, blood feeding and infection. Web-based summaries of differential expression for individual genes with respect to these conditions are a useful tool for the biologist, but they lack the context that a visualisation of all genes with respect to all conditions would give. For most organisms, including A. gambiae, such a systems-level view of gene expression is not yet available.
We have clustered microarray-based gene-averaged expression values, available from VectorBase, for 10194 genes over 93 experimental conditions using a self-organizing map. Map regions corresponding to known biological events, such as egg production, are revealed. Many individual gene clusters (nodes) on the map are highly enriched in biological and molecular functions, such as protein synthesis, protein degradation and DNA replication. Gene families, such as odorant binding proteins, can be classified into distinct functional groups based on their expression and evolutionary history. Immunity-related genes are non-randomly distributed in several distinct regions on the map, and are generally distant from genes with house-keeping roles. Each immunity-rich region appears to represent a distinct biological context for pathogen recognition and clearance (e.g. the humoral and gut epithelial responses). Several immunity gene families, such as peptidoglycan recognition proteins (PGRPs) and defensins, appear to be specialised for these distinct roles, while three genes with physically interacting protein products (LRIM1/APL1C/TEP1) are found in close proximity.
The map provides the first genome-scale, multi-experiment overview of gene expression in A. gambiae and should also be useful at the gene-level for investigating potential interactions. A web interface is available through the VectorBase website http://www.vectorbase.org/ webcite. It is regularly updated as new experimental data becomes available.
Genome sequencing [1] and gene expression microarray technologies have, in recent years, enabled systems-level research into the malaria-transmitting mosquito Anopheles gambiae. By measuring transcript levels with respect to biological events, such as blood feeding, development, parasite infection and mating, one can identify genes that are likely to be involved in the underlying processes. However, due to the wealth of information produced by individual experiments and the numerous leads that require further investigation, it is understandable that research groups rarely perform so-called meta-analysis of gene expression data, whereby multiple experiments are analysed simultaneously. Furthermore, meta-analysis is impeded by incompatibilities between different versions of genome annotations, microarray technologies, file formats, experimental designs, data processing pipelines and statistical analyses. Several ongoing projects are aiming to eliminate these inconsistencies and produce uniform processed and analysed data for the end user. Human curators at the two major microarray repositories, NCBI GEO [2] and Array Express [3], are working to produce enriched resources known as GEO Datasets and the Gene Expression Atlas [4], respectively. The VectorBase consortium [5] produces a similar unified gene expression resource for the invertebrate vector community.
Web-based expression summaries provide useful and concise biological overviews for individual genes of interest, however a common requirement is to know which other genes are expressed in a similar manner to a particular gene. GEO and ArrayExpress' curated expression resources provide such "nearest neighbour" gene lists, but within a single experiment only, not across multiple experiments. Some years ago, gene expression data from 553 Caenorhabditis elegans two-colour microarray experiments was clustered simultaneously to produce a 2D map known as TopoMap [6]. It was found that TopoMap clustered many genes of similar function, such as lipid metabolism, heat shock and neuronal genes. TopoMap is integrated into the WormBase genomics resource, but the underlying expression data is not available, reducing its utility. To the best of our knowledge, no large-scale meta-analysis of expression data has been made public for any other species.
Here we present a simple method for clustering expression data from a diverse set of microarray experiments. We have used data from A. gambiae, but the method is applicable to any organism. The results are visualised on a 2D map, and we show that many regions of the map are strongly linked to biological function. Two case studies are presented. One focuses on odorant binding proteins, which can be classified into several functional groups. The second looks at a large number of immunity-related genes, and likewise suggests specialised roles for members of several immunity gene families.
Results and Discussion
A map of A. gambiae gene expression
Using the VectorBase gene expression resource (1.0.7, June 2009) [5], gene-averaged expression values were extracted for 93 experimental conditions (see Table 1) derived from 11 publications [7-17]. After median-shift normalisation (see Methods for details), 10194 A. gambiae genes were clustered according to their expression data into a 25×20 grid of discrete clusters using the self-organizing map algorithm [18] with a Pearson correlation coefficient-based distance measure (see Methods for further details). The self-organizing map is randomly initialised; its iterative "training" or clustering algorithm is somewhat related to the k-means clustering method. However, unlike k-means, the 500 clusters on the self-organizing map are laid out in a meaningful order (two nearby clusters will usually have similar characteristics), although note that the "X" and "Y" axes have no predetermined meaning. Figure 1 illustrates how the high-dimensional expression data has been flattened into a two-dimensional grid, as a result of the competitive learning process. Gene expression space is highly convoluted, as indicated by the multiple discrete areas of high expression for many conditions (e.g. adult female, embryo 6 h, fat body, 3 h post blood meal).
Table 1. Experimental conditions
Figure 1. The A. gambiae expression map. Expression data from all publicly available experiments, representing 93 assay conditions, was summarised for 10194 genes and clustered using the self-organizing map algorithm. The area of the grey circles represents the number of genes mapping to each discrete node on the map (minimum 1, maximum 114). The four panels show the same map with different annotations that indicate regions of the map associated with high expression in various conditions: a Development from embryo to adult male and female [8,10]; b Embryonic development [17]; c Organs and tissues [8,10,11,17]; d Uninfected blood meal time course [8] (BF: blood fed, NBF: non-blood fed).
Given the assumed difficulty of mapping such high-dimensional data into two dimensions, how reproducible are the maps with respect to the random initialisation step? A simulation, based on an additional 100 randomly seeded maps (not shown), was performed to see how often genes that are co-clustered in the "main" map (shown in the figures) would co-cluster in a re-mapping. It was found that 9907 of 50,000 (20%) randomly selected co-clustered gene pairs co-cluster again in a randomly selected re-mapping, while 40,747 (81%) of gene pairs re-map to the same or "nearby" clusters (≤ 5 grid units separation). This indicates that the general topology of the map is reproducible, although the fine details may not always be.
Map nodes and regions are enriched with respect to gene function
The gene sets corresponding to each map node were tested for enrichment in annotated function through a Gene Ontology (GO [19]) term over-representation analysis [20]. A large number of biological processes, molecular functions and cellular components were found to be enriched. Genes annotated with a small selection of these GO terms are highlighted in Figure 2, where the coloured pie slices within the grey circles indicate the proportion of genes with these GO terms. Components of macromolecular complexes, such as the ribosome and proteasome are among the most highly enriched terms, which is expected since these proteins need to be produced in stoichiometric amounts and are therefore likely to be coregulated. Non-complex associated genes are also highly clustered by the map, such as those involved in polysaccharide metabolism and odorant binding. A full list of highly significant GO terms is provided in Table 2.
Figure 2. Regions of the map are enriched with different gene functions. Genes annotated with a selection of (highly enriched on a per-node basis) Gene Ontology terms are indicated by the coloured pie charts in each node. The corresponding regions marked with coloured lines are described according to their gene expression characteristics. The Gene Ontology terms are as follows: orange, GO:0003735, structural constituent of ribosome; light blue, GO:0051082, unfolded protein binding; green, GO:0000502, proteasome complex; yellow, GO:0006260, DNA replication; dark blue, GO:0031497, chromatin assembly; vermillion, GO:0015078, hydrogen ion transmembrane transporter activity; purple, GO:0005549, odorant binding; black, GO:0042302, structural constituent of cuticle.
Table 2. Over-represented Gene Ontology terms P <1 × 10-6
Highly enriched gene functions are frequently found in multiple distinct regions of the map, indicating major differences in their expression and hence the biological context in which the genes operate. Some examples are discussed below.
The strongest enrichment of function is seen for the ribosomal proteins on the left hand edge of the map. However, there is a second group of ribosomal protein genes in the centre of the map that is characterised by high expression in ovaries and is therefore likely to be involved in egg production.
Genes involved in DNA, RNA and protein synthesis are generally found above the diagonal from lower-left to upper-right. Temporally, spatially or functionally related metabolic functions are often co-located on the map. For example, near the centre of the map, clusters enriched in protein synthesis (ribosome), protein folding and protein degradation (proteasome) are found together. Additional file 1, Figure S1 shows a wider selection of DNA/RNA/protein metabolic functions and their relationships (e.g. the proximity of DNA replication and repair, transcription and RNA processing, and protein synthesis and protein transport).
Additional file 1. Figure S1. DNA/RNA/protein metabolic functions. Pie charts for each cluster indicate the relative number of genes annotated with selected GO terms related to DNA/RNA/protein metabolism. In general, the relative location of the gene functions reflects the underlying biology. For example, DNA replication and repair are found close to each other [35], as are translation and protein transport (translocation to the endoplasmic reticulum is co-translational [36]). In contrast to previous figures, the pie chart area is not proportional to the number of genes in each cluster. The colours correspond to the following GO terms: orange, GO:0006260, DNA replication; light blue, GO:0006281, DNA repair; green, GO:0006350, transcription; yellow, GO:0006396, RNA processing; dark blue, GO:0006412, translation; vermillion, GO:0006457, protein folding; purple, GO:0015031, protein transport; black, GO:0000502, proteasome.
Format: PDF Size: 264KB Download file
This file can be viewed with: Adobe Acrobat Reader
One additional gene function analysis was performed. The null hypothesis asserts that the genes annotated with a particular GO term are randomly distributed across the map, and this is tested empirically. Table 3 lists the 59 GO terms for which this null hypothesis is rejected at P < 0.01 (after multiple testing correction), that is, functions which are non-randomly distributed on the map.
Table 3. Non-randomly distributed Gene Ontology terms P <0.01
Multi- vs. single-experiment maps
Some of the experiments included in this analysis, for example the life-cycle series [10], blood meal time series [8] and embryonic developmental series [17], have a large enough number of experimental conditions to allow effective clustering of genes on their own. Using an identical self-organizing map approach on data from these individual experiments, we found significant enrichment of gene function in the resulting clusters, as shown in Figure 3. However the number of enriched GO terms (reflecting the breadth of biology visualised in the map) was lower than that obtained with the all-experiment (VectorBase release 1.0.7) map. The difference is particularly clear at the P < 1 × 10-6 threshold.
Figure 3. Multi-experiment maps cluster genes by function to a greater extent than single experiment maps. The number of enriched non-redundant Gene Ontology terms is shown for three significance thresholds for six different maps: three single experiment maps, two maps made with older versions of the VectorBase expression data, and the map using current data as shown in previous figures. The multi-experiment maps show substantially more clustering of genes by biological process and molecular function than the single experiment maps. Full details of the maps and datasets can be found in Table 4.
The mapping was also performed with two older releases of the expression data (release 1.0.3, January 2009 and release 1.0.5, July 2008), which contain fewer experiments (see Table 4). In general there is an increase in the number of enriched GO terms as new experiments are added, although there is a small drop in the number of biological process terms from release 1.0.3 to 1.0.5. From this limited data we tentatively predict that the incorporation of future experimental data will produce increasingly informative maps. Further discussion on the inclusion/exclusion of experiments can be found below (see section Limitations).
Table 4. Map information
Case study: odorant binding proteins
Odorant binding proteins (OBPs [21]), which transport odorant molecules through the extracellular fluid of chemosensilla to transmembrane odorant receptor (OR) proteins on olfactory receptor neurons, are found in three main regions of the expression map (Figure 2, two in purple and one in grey labelled "minimal regulation", bottom right). One region is characterised by minimal differential regulation and presumably represents constitutively expressed genes (although we cannot rule out differential expression in some yet-to-be-performed experiment). Another region rich in OBPs is characterised by high expression in non-blood fed females, suggesting a role in mating or host seeking for these genes. The third cluster is expressed after blood feeding and may be implicated in locating suitable sites for egg laying. A similar functional hypothesis for OBPs, based on blood meal data alone, has already been proposed [8], however this only identified three of the most differentially expressed genes, whereas the expression map classifies the majority of this large family into three, or perhaps more (see below), functional groups. In contrast however, the vast majority of ORs (as defined by InterPro domain IPR004117) appear to be unregulated (data not shown, but easily available via the web interface).
We observe a large degree of overlap between OBP expression map clusters and paralogous groups (OBP-PGs) defined in the VectorBase comparative genomics database (Figure 4). This is to be expected since gene duplication events are likely to involve "upstream" regulatory DNA, and so transcripts of duplicated genes are likely to be co-regulated. However, paralogous OBPs are somewhat divergent (20- 25% pairwise identity at the protein level is common) so it is notable that their transcriptional regulation has been conserved. The phylogenetic analysis splits the "high in non-blood fed females" region (Figure 2, middle right) into two sub-regions (Figure 4): on the left, two clusters containing most members of OBP-PG3 and OBP-PG4, and on the right, a cluster dominated by OBP-PG5, which consists of a tandem array of five hitherto unannotated [21] OBPs (AGAP008280-AGAP008284) with no known orthologues in Drosophila melanogaster or other mosquitoes. AGAP008280 is more highly expressed in males while AGAP008281-AGAP008284 have very much higher expression in females. This combination of sex-specific expression and species-specific phylogeny suggests a role for OBP-PG5 genes in mating, perhaps supplementary to wing-beat frequency matching [22]. Given that members of OBP-PG3 and OBP-PG4 have Drosophila orthologues, these OBPs may be involved in sugar-based meal seeking rather than blood meal host seeking. OBP-PG1 members have only mosquito orthologues, which supports the suggestion above that these genes may be involved in oviposition site selection (the larval habitats of fruit flies and mosquitoes are very different).
Figure 4. Odorant binding proteins (OBPs) are found in several distinct regions of the expression map, which generally correspond to paralogous groups. The OBP paralogous groups (OBP-PGs) are defined (top). OBPs are shown as coloured pie sections on the expression map (centre) with regions of interest are outlined and annotated in terms of two major expression characteristics. The pie charts of four map nodes dominated by OBPs are shown at greater magnification (bottom left and right).
Case study: immunity genes
In Figure 5, immunity-related genes, including Toll, IMD, JAK/STAT and siRNA pathway members, and anti-microbial effectors such as defensins and cecropins are marked on the expression map. These genes show a very clear non-random distribution (P < 0.001), and occupy several distinct regions of the map. Genes from the four main immune pathways are generally intermingled, rather than in pathway-specific separate clusters. This possibly reflects the shared or similar biological contexts (e.g. timing and tissues) in which the various immune challenges are encountered and cleared. The intermingling may also suggest crosstalk between the pathways.
Figure 5. Immunity genes are highly localised. Genes belonging to various immunity-related pathways and gene families are shown on the map. Toll pathway members are labeled in dark cyan, the IMD pathway in dark red, JAK/STAT pathway in yellow, siRNA pathway in bright green, anti-microbial peptides and effectors in magenta, and LRIM1, APL1C and TEPs are labeled in dark green. CLIP-domain serine proteases, serpins, C-type lectins and galectins are shown generically in black, light red, black italic and cyan respectively. Several regions of the map that are rich in immunity genes are outlined and described by their dominant gene expression characteristics.
The genes REL1 and REL2, encoding the core transcription factors of the Toll and IMD pathways respectively, have very different expression profiles. This is perhaps expected since REL1, an orthologue of Drosophila dorsal, and other Toll pathway members have well documented roles in dorso-ventral pattern formation in the early embryo, and indeed we see TOLL1B, TOLL5A, REL1, and CACT in the early embryo region of the map. Notably, TOLL1A, 1B, 5A and 5B are co-orthologues of Drosophila Toll, which codes for a transmembrane receptor with developmental and immune roles. One can speculate that, of these four mosquito receptors, TOLL1B is the most likely functional orthologue of Toll as it clusters closely with REL1 on the map. However, the location of TOLL5B close to many other immunity genes (Region labelled "High: fat body, NBF", middle right) as well as that of TOLL5A close to TOLL1B, REL1 and CACT may imply that at least three of the four co-orthologues of Toll play central, but likely distinct, roles in mosquito immunity.
Many of the major immunity gene family members are quite widely dispersed on the map. For example, the anti-microbial cecropin genes CEC1, CEC2 and CEC3 are tightly clustered in a region characterised by strong midgut expression and low expression 3 h post blood meal (top right), while CEC4 is located quite far away in a region with less overall differential expression and a mild positive response at 3 h post blood meal (lower right). This suggests that cecropins 1-3 have similar roles but are perhaps specialised to counter a range of pathogens, while CEC4 has evolved to perform a different role. The four defensins have a similarly informative distribution: DEF1 is with the main cluster of cecropins suggesting it has a similar function, while the others are in the lower right corner where the 3 h post blood meal response is strong. In particular, DEF3 is clustered with a large number of cuticle genes, suggesting a role in immunity during blood meal induced cuticle expansion, perhaps against fungal infection.
The peptidoglycan recognition proteins (PGRPs) are another gene family whose functional diversity is reflected in the map. All PGRPs, as their name implies, are able to bind microbial peptidoglycan specifically but some are believed to have catalytic activity due to the conservation of three active site amino acids [23-25]. In A. gambiae, the putative catalytic members of the family are PGRPLB, PGRPS2 and PGRPS3. Interestingly these three genes all map to the right-most edge of the map. PGRPLB lies in a region populated by other effector genes and peptides (GAM1 (AGAP008645), LYSC7, DEF1 and cecropins 1-3), supporting its proposed role as an antimicrobial agent. PGRPS2 and PGRPS3 map close to DEF2 and DEF4 respectively, suggesting parallel but as yet unidentified roles.
The recently described physical interactions between two leucine-rich repeat (LRR) proteins LRIM1 (AGAP006348) and APL1C and the complement C3-like protein TEP1 [26] are mirrored in the expression map; the two LRR genes map to the same grid node while TEP1 maps to the node below. These proteins are implicated with the activation of the mosquito complement system, with TEP1 being shown to localise around invading Plasmodium berghei ookinetes. This region of the map (Figure 5, green outline, middle right) has the highest density of immunity genes, including many other TEPs (1,2,9,10,12,17), CLIP-domain serine proteases, and one additional member of the recently characterised LRIM family [27], LRIM17 (LRRD7), which has been shown through RNAi mediated knockdowns to affect Plasmodium ookinete invasion [28].
Although the clustering of genes based on their expression in many different experiments appears to be successful--as assessed by the co-clustering of genes with similar function, at least--the methodology has some potential shortcomings which merit discussion.
Since data from so many experimental conditions is presented in one place there is the possibility that users could over-interpret map cluster expression summaries. For example, genes in cluster 22,9 could be (wrongly) interpreted as having "high expression in the fat bodies of non blood-fed females". However, the fat body assays used tissue from blood-fed females, so the correct summary should be "high expression in non blood-fed females and the fat bodies of blood-fed females". Users should be aware that very few of the possible combinations of experimental conditions have actually been assayed.
The use of different mosquito strains from one laboratory to another may also make interpretation of the map more difficult. First, polymorphisms may differentially alter microarray hybridisation efficiency in one strain relative to another for certain genes. However, this would appear to have a minimal confounding effect, since microarray studies have directly compared different strains and the results have been successfully validated with quantitative PCR [15,29]. Second, strains may actually exhibit biologically meaningful differences in expression (e.g. a gene may be highly expressed in the midgut of one strain but not in another). On first impressions this may seem like a problem, but it is actually an advantage because the differential (inter-experiment) expression resulting from strain differences (and other sample characteristics, such as sex, rearing conditions, etc) simply provides data with which finer-grained clustering can be obtained. The web interface, however, could be enhanced in future versions to display all available sample characteristics. Currently only the most pertinent information is available in the experiment titles (e.g. "Adult female tissues").
While we have re-analysed all data in order to standardise the statistical treatment there is still a possibility that technical differences between microarray technologies (platforms) could affect the meta-analysis. For example, platforms with a wider range of detection are capable of producing data with greater dynamic range. If high and low dynamic range datasets are mapped together, the high dynamic range data will have a greater influence on the clustering of genes. However, the dynamic range of expression data can also be influenced by the relative severity of the experimental conditions being tested (for example a 10°C heat shock will cause greater magnitude gene expression changes than a 1°C heat shock [30]). The VectorBase 1.0.7 expression data set contains both high and low dynamic range experiments (Additional file 2, Figure S2). The low dynamic range experiments tend to involve less severe conditions, such as strain comparisons. If datasets were range-normalised prior to mapping, the biological relevance of very highly regulated genes would be lost.
Additional file 2. Figure S2. Dynamic range of expression map input data. Box-whisker plots indicating the maximum, minimum, upper/lower quartiles, and median for the 93 dimensions (conditions) of the normalised data used to generate the map. Some experiments exhibit a wide range of expression values, for example the embryonic developmental series, while others show a more limited range, for example the M and S form comparisons.
Format: PNG Size: 34KB Download file
Another limitation is that we discard/ignore the statistics relating to the mean expression values used as input data to build the map. For instance, the numbers of replicates and standard deviations could be used to filter out bad data or to produce Gaussian models for each expression value (with which the map could be trained). Such enhancements, if implemented, would likely improve the quality of the mapping still further.
We have tried to keep the number of parameters in our approach to a minimum, however the size and shape of the map has a major effect on the outcome and was decided somewhat arbitrarily. In general, small maps produce large gene clusters, while large maps produce smaller clusters. For any given biological annotation, the extent of its enrichment within clusters will depend on cluster size and the number of genes annotated as such (i.e. in a large map, members of a large gene family may be spread across many neighbouring nodes but not be significantly enriched in any one node; while in a smaller map, significant enrichment in one large cluster may be seen). Thus, no map size is optimal in all cases. The dimensions of the VectorBase A. gambiae expression map (25 × 20) were chosen to give an average of 20 genes per cluster--a manageable number. Alternative map sizes could be provided by VectorBase in the future.
VectorBase strives to be unbiased and include all data for its core species in the expression database, particularly those with raw data deposited in public repositories. However, for technical reasons, total coverage of experiments cannot be guaranteed. Furthermore, in the mosquito field there is quite a heavy experimental bias (for example, the majority of data comes from female mosquitoes). As the VectorBase resource expands, questions arise as to what to do with largely redundant datasets (there are now three adult tissue experiments: [8,10,31]). Multiple assays of similar conditions or tissues (albeit with strain and rearing differences, see above) will proportionally shift the focus of the map towards those conditions or tissues; less space will be available for the allocation of genes into clusters based on other expression characteristics. One solution may be to perform some pruning of redundant datasets, another may be to produce specialist maps (e.g. developmental studies only) in addition to the "all conditions" map.
One obvious use for the A. gambiae expression map is to short-list potential interaction partners for proteins of interest. For example, one can extrapolate from the recent findings for LRIM1 [26] that other LRIM family members will form heteromeric complexes and perhaps also interact with one or more TEPs, and that these genes will, like LRIM1, APL1C and TEP1, probably also be co-located on the map. Similarly, we observe a general tendency for CLIP-domain serine proteases and serpin family serine protease inhibitors (marked "CLIP" and "SRPN" in Figure 5 respectively) to be clustered together in many areas of the map, which suggests that the experimental elucidation of enzyme-inhibitor relationships can be greatly accelerated using the map.
A further advantage of performing clustering on all available data is that the clusters obtained are likely to be fine-grained enough for promoter analysis aimed at the discovery of cis-regulatory DNA sequences responsible for co-regulation. Post-transcriptional regulatory mechanisms (e.g. endogenous miRNA) will also be responsible for some of the observed co-regulation, so transcript-based signals (e.g. miRNA targets) might also be detectable in expression map clusters.
Finally, we propose a role for expression maps in comparative transcriptomics. Current approaches compare data from two or more broadly equivalent experiments that have been performed in two or more organisms (e.g. developmental stages in A. gambiae and Drosophila melanogaster [10]). If the experiments are performed in different laboratories and at different times, the experimental designs are likely to be different enough to invalidate or at the least complicate the analysis. However, expression maps tend to smooth out these differences, so that intra-map distances between pairs of orthologous genes should be robustly comparable between species, especially if the maps have been generated using a similar set of experiments. One can also quantify the functional divergence of gene families by measuring their intra-map dispersal, and compare these between species.
The A. gambiae expression map has potential for making expression data more accessible and useful to researchers throughout the field. A web interface is available at http://funcgen.vectorbase.org/ExpressionMap/Anopheles_gambiae/paper webcite -- showing the data presented in this paper. However, as the resource is updated as part of VectorBase's release cycle, newer versions are also available. While this manuscript was being revised an expression map for the Dengue vector Aedes aegypti was also made available. In addition, the source code for map generation and web visualisation is available under the GNU General Public License at https://github.com/VectorBase/ExpressionMap webcite.
Data preparation
All data was obtained from the VectorBase gene expression resource, which is a curated collection of published, publicly available gene expression data for invertebrate vectors of human pathogens. The standard VectorBase curation pipeline begins with importing original raw data files, obtained from GEO [2], ArrayExpress [3] or the authors, into the microarray data management system BASE [32]. Low quality data is then removed according to the authors' quality flags. Intensity data is normalised with either the Lowess algorithm [33] for two colour data, or the RMA algorithm [34] for single channel data, using the relevant BASE plugin with default parameters. All ratio or intensity values for a given gene and hybridisation combination (there may be multiple reporters per gene and/or multiple spots per reporter) are summarised by their mean. The means from multiple hybridisations for the same experimental condition (these are usually biological replicates, or less often, technical "dye swap" replicates) are then averaged again to give a single value per gene and condition combination. The number of averaged data points and their variance are discarded (see Results and Discussion: "Limitations").
Some microarray technologies and experimental designs produce intensity values whose absolute values cannot always be compared directly from gene to gene. These include single channel technologies and some two colour experiments using global reference samples. With this kind of data, it is only possible to calculate correlation coefficients between gene expression profiles within a single experiment. Some form of normalisation is needed to give expression values from different "reference-less" experiments a common reference point so that multi-experiment expression profiles can be compared. We chose to apply a "median shift" normalisation step to such ratios and intensity values. In median shift normalisation, each expression profile is centred around zero by subtracting its median value (example: for a gene with expression values in one particular experiment (say, three tissues) being 11,4, and 6, the normalised values will be 5, -2, and 0). The median-shift normalised data for 10194 genes and 93 experimental conditions is available from the VectorBase download page.
Self-organising map
The expression data was clustered using the self-organizing map algorithm as follows. Unless otherwise stated, the map dimensions were 25×20, the starting learning rate was 0.1, and the starting neighbourhood radius was 10. Prior to training, the map was randomly initialised with values within the range of the expression data. During the training of a self-organizing map, input vectors are compared with reference vectors at each map node (henceforth: "node vectors"). These vectors have the same number of dimensions as the input data (93 in this case). In this work, the comparison is made with the Pearson correlation coefficient, and missing values are simply excluded from the calculation. (The Euclidean distance measure was also tried and gave similar results.) The node vector with the highest correlation and its neighbours within a specified radius are updated towards the input vector by an amount proportional to the learning rate. As training proceeds, input vectors are "presented" to the map at random (with replacement) on average 20 times each while the learning rate and neighbourhood radius are linearly reduced towards zero. When training is complete, genes are assigned for a final time to their closest node. Each node vector can be thought of as a mean expression vector (or profile) for the genes mapping to that node. The algorithm attempts to preserve the topology of the high dimensional input data in the two-dimensional mapping, however the two axes of the map have no predetermined meaning.
The algorithm was implemented in Perl and PDL (Perl Data Language), and the maps are stored in a relational database through the object oriented Class::DBI interface. All source code is available under the GNU General Public License at https://github.com/VectorBase/ExpressionMap webcite.
Map outlines
The coloured outlines in Figures 1, 2 & 5 indicate regions where one or more node vector components satisfy a simple arithmetic inequality. For example, the orange outlines marked "embryo" in Figure 1a highlight map nodes where the node vector component for embryo expression [10] is greater than 0.25. The choices of node vector component and thresholds was largely arbitrary, with an emphasis on simplicity and clear visualisation. For Figures 2 & 5, nodes of interest (e.g. with a large fraction of genes with a particular function) were chosen manually and vector component thresholds were determined in a semi-automatic fashion. Different thresholds may be explored interactively via the web interface.
Gene function over-representation analysis
The self-organizing map presented in Figures 1, 2 & 5 consists of 500 nodes, each of which can be considered as a gene cluster. We applied a Gene Ontology (GO) over-representation analysis as implemented in the program ErmineJ [20] on each cluster. The analysis uses Fisher's Exact Test and the null hypothesis states that genes with a particular GO term are randomly distributed between the cluster of interest and the rest of the map. GO terms that are associated with less than ten or more than a quarter of the genes on the map were excluded from the analysis as they are generally not informative. The GO term database of 2009/03/02 was used to defined GO term relationships, and the GO annotations for A. gambiae genes were retrieved from VectorBase BioMart on the same date.
The P values reported from the GO analysis are corrected for multiple testing (> 1000 GO terms are tested) according to the Benjamini-Hochberg false discovery rate (FDR) procedure, and correspond to the minimum FDRs (false positives as a fraction of all positives) at which the null hypotheses can be rejected. This correction does not take into account overlaps between parent and child GO terms.
Additionally, a GO term is only reported as enriched if four or more genes in the cluster are annotated with that term.
Empirical non-random distribution test
The over-representation analysis described above is not ideal in situations where genes with a particular function are localised within the map, but are not necessarily confined to one map node/cluster. We therefore implemented a sampling-based test to quantify the general non-randomness of a gene set on the map as follows. For the set N of n genes of interest located on the map we calculate the mean, d, of the city block distance to their closest neighbours within N. Then, sets N' of n genes are randomly sampled from the map 100 times. For each sample of genes, their mean distance to closest neighbour d' is calculated as above and compared with the "true" value d. For a non-randomly distributed set of genes, d' is not likely to be smaller than d. The estimated P value is therefore . Where multiple tests are performed, a Bonferroni correction is applied by multiplying the number of random samplings by the number of tests (159 in the case of Table 3).
Odorant binding protein paralogous groups
For this analysis, odorant binding proteins are defined as the 49 VectorBase genes annotated with InterPro domain IPR006625 (Insect pheromone/odorant binding protein PhBP). The within-species paralogues for each gene were retrieved via the Perl API from the VectorBase/Ensembl Compara database (7 species, schema version 54, August 2009). Paralogous groups (PGs) are defined as sets of genes with the same mutual paralogues. Six genes have no paralogues, two PGs contain two genes each, and one PG contains three genes. The remaining PGs contain five or more genes and are listed in Figure 4.
Authors' contributions
RMM participated in the design of the study, its implementation, analysis and write-up. SNR and RMM participated in data preparation and web interface design. GCK coordinated the project and refined the manuscript. All authors read and approved the final manuscript.
This work was supported by National Institutes of Health/National Institute for Allergy and Infectious Diseases (contract numbers HHSN266200400039C, HHSN272200900039C). The authors would like to thank VectorBase colleagues for assistance with data management. We are very grateful to Michael Povelones and Fotis Kafatos for useful discussions and suggestions.
Holt RA, Subramanian GM, Halpern A, Sutton GG, Charlab R, Nusskern DR, Wincker P, Clark AG, Ribeiro JM, Wides R, Salzberg SL, Loftus B, Yandell M, Majoros WH, Rusch DB, Lai Z, Kraft CL, Abril JF, Anthouard V, Arensburger P, Atkinson PW, Baden H, de Berardinis V, Baldwin D, Benes V, Biedler J, Blass C, Bolanos R, Boscus D, Barnstead M, Cai S, Center A, Chaturverdi K, Christophides GK, Chrystal MA, Clamp M, Cravchik A, Curwen V, Dana A, Delcher A, Dew I, Evans CA, Flanigan M, Grundschober-Freimoser A, Friedli L, Gu Z, Guan P, Guigo R, Hillenmeyer ME, Hladun SL, Hogan JR, Hong YS, Hoover J, Jaillon O, Ke Z, Kodira C, Kokoza E, Koutsos A, Letunic I, Levitsky A, Liang Y, Lin JJ, Lobo NF, Lopez JR, Malek JA, McIntosh TC, Meister S, Miller J, Mobarry C, Mongin E, Murphy SD, O'Brochta DA, Pfannkoch C, Qi R, Regier MA, Remington K, Shao H, Sharakhova MV, Sitter CD, Shetty J, Smith TJ, Strong R, Sun J, Thomasova D, Ton LQ, Topalis P, Tu Z, Unger MF, Walenz B, Wang A, Wang J, Wang M, Wang X, Woodford KJ, Wortman JR, Wu M, Yao A, Zdobnov EM, Zhang H, Zhao Q, Zhao S, Zhu SC, Zhimulev I, Coluzzi M, della Torre A, Roth CW, Louis C, Kalush F, Mural RJ, Myers EW, Adams MD, Smith HO, Broder S, Gardner MJ, Fraser CM, Birney E, Bork P, Brey PT, Venter JC, Weissenbach J, Kafatos FC, Collins FH, Hoffman SL: The genome sequence of the malaria mosquito Anopheles gambiae.
Science 2002, 298:129-149. PubMed Abstract | Publisher Full Text
Barrett T, Troup DB, Wilhite SE, Ledoux P, Rudnev D, Evangelista C, Kim IF, Soboleva A, Tomashevsky M, Marshall KA, Phillippy KH, Sherman PM, Muertter RN, Edgar R: NCBI GEO: archive for high-throughput functional genomic data.
Nucleic Acids Res 2009, 37:D885-890. PubMed Abstract | Publisher Full Text | PubMed Central Full Text
Parkinson H, Kapushesky M, Kolesnikov N, Rustici G, Shojatalab M, Abeygunawardena N, Berube H, Dylag M, Emam I, Farne A, Holloway E, Lukk M, Malone J, Mani R, Pilicheva E, Rayner TF, Rezwan F, Sharma A, Williams E, Bradley XZ, Adamusiak T, Brandizi M, Burdett T, Coulson R, Krestyaninova M, Kurnosov P, Maguire E, Neogi SG, Rocca-Serra P, Sansone SA, Sklyar N, Zhao M, Sarkans U, Brazma A: ArrayExpress update-from an archive of functional genomics experiments to the atlas of gene expression.
Nucleic Acids Res 2009, 37:D868-872. PubMed Abstract | Publisher Full Text | PubMed Central Full Text
Kapushesky M, Emam I, Holloway E, Kurnosov P, Zorin A, Malone J, Rustici G, Williams E, Parkinson H, Brazma A: Gene expression atlas at the European Bioinformatics Institute.
Nucleic Acids Res 2010, 38:D690-698. PubMed Abstract | Publisher Full Text | PubMed Central Full Text
Lawson D, Arensburger P, Atkinson P, Besansky NJ, Bruggner RV, Butler R, Campbell KS, Christophides GK, Christley S, Dialynas E, Hammond M, Hill CA, Konopinski N, Lobo NF, MacCallum RM, Madey G, Megy K, Meyer J, Redmond S, Severson DW, Stinson EO, Topalis P, Birney E, Gelbart WM, Kafatos FC, Louis C, Collins FH: VectorBase: A data resource for invertebrate vector genomics.
Nucleic Acids Res 2009, 37:D583-587. PubMed Abstract | Publisher Full Text | PubMed Central Full Text
Kim SK, Lund J, Kiraly M, Duke K, Jiang M, Stuart JM, Eizinger A, Wylie BN, Davidson GS: A gene expression map for Caenorhabditis elegans.
Science 2001, 293:2087-2092. PubMed Abstract | Publisher Full Text
Vlachou D, Schlegelmilch T, Christophides GK, Kafatos FC: Functional genomic analysis of midgut epithelial responses in Anopheles during Plasmodium invasion.
Curr Biol 2005, 15:1185-1195. PubMed Abstract | Publisher Full Text
Marinotti O, Nguyen QK, Calvo E, James AA, Ribeiro JM: Microarray analysis of genes showing variable expression following a blood meal in Anopheles gambiae.
Insect Mol Biol 2005, 14:365-373. PubMed Abstract | Publisher Full Text
Müller P, Donnelly MJ, Ranson H: Transcription profiling of a recently colonised pyrethroid resistant Anopheles gambiae strain from Ghana.
BMC Genomics 2007, 8:36. PubMed Abstract | BioMed Central Full Text | PubMed Central Full Text
Koutsos AC, Blass C, Meister S, Schmidt S, MacCallum RM, Soares MB, Collins FH, Benes V, Zdobnov E, Kafatos FC, Christophides GK: Life cycle transcriptome of the malaria mosquito Anopheles gambiae and comparison with the fruitfly Drosophila melanogaster.
Proc Natl Acad Sci USA 2007, 104:11304-11309. PubMed Abstract | Publisher Full Text | PubMed Central Full Text
Neira Oviedo M, Vanekeris L, Corena-McLeod MD, Linser PJ: A microarray-based analysis of transcriptional compartmentalization in the alimentary canal of Anopheles gambiae (Diptera: Culicidae) larvae.
Insect Mol Biol 2008, 17:61-72. PubMed Abstract | Publisher Full Text
Müller P, Warr E, Stevenson BJ, Pignatelli PM, Morgan JC, Steven A, Yawson AE, Mitchell SN, Ranson H, Hemingway J, Paine MJ, Donnelly MJ: Field-caught permethrin-resistant Anopheles gambiae overexpress CYP6P3, a P450 that metabolises pyrethroids.
PLoS Genet 2008, 4:e1000286. PubMed Abstract | Publisher Full Text | PubMed Central Full Text
Rogers DW, Whitten MM, Thailayil J, Soichot J, Levashina EA, Catteruccia F: Molecular and cellular components of the mating machinery in Anopheles gambiae females.
Proc Natl Acad Sci USA 2008, 105:19390-19395. PubMed Abstract | Publisher Full Text | PubMed Central Full Text
Abrantes P, Dimopoulos G, Grosso AR, do Rosrio VE, Silveira H: Chloroquine mediated modulation of Anopheles gambiae gene expression.
PLoS ONE 2008, 3:e2587. PubMed Abstract | Publisher Full Text | PubMed Central Full Text
Cassone BJ, Mouline K, Hahn MW, White BJ, Pombi M, Simard F, Costantini C, Besansky NJ: Differential gene expression in incipient species of Anopheles gambiae.
Mol Ecol 2008, 17:2491-2504. PubMed Abstract | Publisher Full Text
Neira Oviedo M, Ribeiro JM, Heyland A, VanEkeris L, Moroz T, Linser PJ: The salivary transcriptome of Anopheles gambiae (Diptera: Culicidae) larvae: A microarray-based analysis.
Insect Biochem Mol Biol 2009, 39:382-394. PubMed Abstract | Publisher Full Text | PubMed Central Full Text
Goltsev Y, Rezende GL, Vranizan K, Lanzaro G, Valle D, Levine M: Developmental and evolutionary basis for drought tolerance of the Anopheles gambiae embryo.
Dev Biol 2009, 330:462-470. PubMed Abstract | Publisher Full Text
Kohonen T, Makisara K: The Self-organizing Feature Maps.
Phys Scripta 1989, 39:168-172. Publisher Full Text
Ashburner M, Ball CA, Blake JA, Botstein D, Butler H, Cherry JM, Davis AP, Dolinski K, Dwight SS, Eppig JT, Harris MA, Hill DP, Issel-Tarver L, Kasarskis A, Lewis S, Matese JC, Richardson JE, Ringwald M, Rubin GM, Sherlock G: Gene ontology: tool for the unification of biology. The Gene Ontology Consortium.
Nat Genet 2000, 25:25-29. PubMed Abstract | Publisher Full Text | PubMed Central Full Text
Lee HK, Braynen W, Keshav K, Pavlidis P: ErmineJ: tool for functional analysis of gene expression data sets.
BMC Bioinformatics 2005, 6:269. PubMed Abstract | BioMed Central Full Text | PubMed Central Full Text
Xu PX, Zwiebel LJ, Smith DP: Identification of a distinct family of genes encoding atypical odorant-binding proteins in the malaria vector mosquito, Anopheles gambiae.
Insect Mol Biol 2003, 12:549-560. PubMed Abstract | Publisher Full Text
Pennetier C, Warren B, Dabire KR, Russell IJ, Gibson G: "Singing on the wing" as a mechanism for species recognition in the malarial mosquito Anopheles gambiae.
Curr Biol 2010, 20:131-136. PubMed Abstract | Publisher Full Text
Christophides GK, Vlachou D, Kafatos FC: Comparative and functional genomics of the innate immune system in the malaria vector Anopheles gambiae.
Immunol Rev 2004, 198:127-148. PubMed Abstract | Publisher Full Text
Reiser JB, Teyton L, Wilson IA: Crystal structure of the Drosophila peptidoglycan recognition protein (PGRP)-SA at 1.56 A resolution.
J Mol Biol 2004, 340:909-917. PubMed Abstract | Publisher Full Text
Zaidman-Rémy A, Hervé M, Poidevin M, Pili-Floury S, Kim MS, Blanot D, Oh BH, Ueda R, Mengin-Lecreulx D, Lemaitre B: The Drosophila amidase PGRP-LB modulates the immune response to bacterial infection.
Immunity 2006, 24:463-473. PubMed Abstract | Publisher Full Text
Povelones M, Waterhouse RM, Kafatos FC, Christophides GK: Leucine-rich repeat protein complex activates mosquito complement in defense against Plasmodium parasites.
Science 2009, 324:258-261. PubMed Abstract | Publisher Full Text | PubMed Central Full Text
Waterhouse RM, Povelones M, Christophides GK: Sequence-structure-function relations of the mosquito leucine-rich repeat immune proteins.
BMC Genomics 2010, 11:531. PubMed Abstract | BioMed Central Full Text | PubMed Central Full Text
Dong Y, Aguilar R, Xi Z, Warr E, Mongin E, Dimopoulos G: Anopheles gambiae immune responses to human and rodent Plasmodium parasite species.
PLoS Pathog 2006, 2:e52. PubMed Abstract | Publisher Full Text | PubMed Central Full Text
Marcombe S, Poupardin R, Darriet F, Reynaud S, Bonnet J, Strode C, Brengues C, Yebakima A, Ranson H, Corbel V, David JP: Exploring the molecular basis of insecticide resistance in the dengue vector Aedes aegypti: a case study in Martinique Island (French West Indies).
BMC Genomics 2009, 10:494. PubMed Abstract | BioMed Central Full Text | PubMed Central Full Text
Laramie JM, Chung TP, Brownstein B, Stormo GD, Cobb JP: Transcriptional profiles of human epithelial cells in response to heat: computational evidence for novel heat shock proteins.
Shock 2008, 29:623-630. PubMed Abstract | Publisher Full Text
Baker DA, Nolan T, Fischer B, Pinder A, Crisanti A, Russell S: A comprehensive gene expression atlas of sex- and tissue-specificity in the malaria vector, Anopheles gambiae.
BMC Genomics 2011, 12:296. PubMed Abstract | BioMed Central Full Text | PubMed Central Full Text
Saal LH, Troein C, Vallon-Christersson J, Gruvberger S, Borg A, Peterson C: BioArray Software Environment (BASE): a platform for comprehensive management and analysis of microarray data.
Genome Biol 2002, 3:SOFTWARE0003. PubMed Abstract | Publisher Full Text | PubMed Central Full Text
Cleveland WS: Robust Locally Weighted Regression and Smoothing Scatterplots. [http://www.jstor.org/stable/2286407] webcite
Journal of the American Statistical Association 1979, 74(368):829-836. Publisher Full Text
Irizarry RA, Bolstad BM, Collin F, Cope LM, Hobbs B, Speed TP: Summaries of Affymetrix GeneChip probe level data.
Nucleic Acids Res 2003, 31:e15. PubMed Abstract | Publisher Full Text | PubMed Central Full Text
Cleaver JE: DNA repair and its coupling to DNA replication in eukaryotic cells.
Biochim Biophys Acta 1978, 516:489-516. PubMed Abstract
Wild K, Halic M, Sinning I, Beckmann R: SRP meets the ribosome.
Nat Struct Mol Biol 2004, 11:1049-1053. PubMed Abstract | Publisher Full Text

subset: commoncrawl


text:
Maricopa County government agencies have won 47 individual achievements awards, the most in the nation, from the National Association of Counties. The NACo awards honor innovative, effective county government programs that enhance services for residents, create efficiencies and save taxpayers money.
more details...
Keep Pets Safe on Fourth of July
While humans enjoy all the fun and festivities associated with celebrating our nation's Independence, Fourth of July festivites can be very stressful ....More Details
Lake Pleasant to celebrate Fourth of July
(Morristown) – The Fourth of July is quickly approaching! Pack up the kids, neighbors and friends and make plans to witness one of the finest firework ....More Details
Presiding Superior Court Judge Norman J. Davis Retires
On June 30, after 20 years on the Superior Court Bench, Presiding Superior Court Judge Norman J. Davis retires. We thank him for his service to Marico ....More Details
$2.2B budget focuses on criminal justice, a balanced budget
County Supervisors unanimously adopted a conservative, $2.2 billion budget for the upcoming fiscal year. The budget adds significant funding for crimi ....More Details
Turn Around; Don't Drown: Avoid Flooded Washes
Just a few inches of water on the road can cause your tires to lose contact with the pavement and for you to lose control of your car. Avoid flooded w ....More Details
Steps to Protect your Family and Home this Monsoon Season
Floods happen fast. Flash floods can occur within minutes and sometimes without any sign of rain. There can be little time to react once a flooding di ....More Details
Flood Insurance - Anyone Can Get It; Everyone Needs It
Floods can happen anywhere it rains. All it takes is a few inches of water to cause thousands of dollars in damage to your home and belongings. ....More Details
Stay Safe by Knowing Your Flood Risk this Monsoon Season
Floods can happen anywhere, but certain areas are especially prone to serious flooding. Understand your flood risk and stay up-to-date on weather and ....More Details
Find My Information...
Based on MY Address, find...
My Schools, My Taxes,
My Assessor Parcel Info,
My Voting Precinct,
My Congressional District,
My Supervisoral Dist,
My Justice Precinct, GIS Maps & more... Click Here


text:
A federal agency is holding public "scoping" meetings this week for a large hydroelectric dam project proposed for the Susitna River.
The Federal Energy Regulatory Commission was to take public testimony about the Susitna dam project starting Monday evening in Anchorage. The public meetings are the first step for a required federal Environmental Impact Statement. Through the environmental review, the federal government determines whether and under what conditions to issue a license for the project.
The latest cost estimate to build the dam is $4.3 billion, but some legislators think that is on the low side. The Legislature last year approved $66 million toward the project.
The proposed site is 184 miles upstream from the mouth of the Susitna River and upstream of Devil's Canyon. Backers have said that means the only fish whose route would be interrupted by a dam would be the king salmon population that can negotiate the powerful hydraulics of that stretch of river.
According to the Resource Development Council, future public hearings are set for:
Tuesday, Anchorage, Loussac Library, 9 a.m. to 2 p.m.
Tuesday, Wasilla, Menard Sports Center, 6 to 10 p.m.
Wednesday, Talkeetna, Su-Valley Junior and Senior High School, 6 to 10 p.m.
Wednesday, Glennallen, Caribou Cafe, 6 to 10 p.m.
Thursday, Fairbanks, Westmark Hotel, 6 to 9 p.m.
Thursday, Cantwell Community Hall, 6 to 10 p.m.
More information is on its website, www.susitna-watanahydro.org.
Anchorage Daily News


text:
Updated 03/06/2014
Tally-ho with the horse-and-hound set at this Sloane-ranger mustering point on the corner of Sloane Square in South Kensington. An ultrablonde hair, Alice band-wearing, good-looking Sloaney crew jack up the decibels at this cream, green, and serene restaurant, hangout, and after-works drinks hub. Framed with intriguing Sir Hans Sloane botany prints, the figure-conscious restaurant menu takes itself seriously, so you'll find well-executed Isle of Man king scallops, Atlantic cod, salmon fishcakes, or pot-roast poussin all carried off with panache and aplomb.
7 Sloane Sq., London, SW1W 8EE, England
Website: www.thebotanistonsloanesquare.com
Restaurant Details:
Updated 03/06/2014
No Thanks


text:
Dun is one of those genes that boggles my mind. I understand cream and champagne well enough, but I was wondering the colors behind these horses. They are APHA registered if that makes a difference but don't know the names.
My other question is about frame. Pretty clear the sire has it, so could the colt have it and be hiding it? I've seen some of you post solid or nearly solids that turned out to be frame when tested.
Sire -
Dam and colt -
Colt - 10 months old
Posted via Mobile Device


text:
Special Events Volunteers
Park District Annual Events
Earth Day 2015
Earth Day is a special day for East Bay Regional Park District. We are committed to preserve our parklands for present and future generations to enjoy. We need you to help us in maintaining our commitment. Volunteer with us and help conserve, protect and restore our environment.
Download: Earth Day 2015 flyer
Martin Luther King, Jr., "Day of Service" in January.
California Coastal Cleanup
September 19, 2015
Check back for more information.
Bring your family out and enjoy a day along the shoreline picking up micro plastics and cleaning up our waterways. This is the largest volunteer event on our planet. This is a great way to spend the day showing your family why it is important to properly dispose of debris. Come join your community on this world wide event that is having a positive effect upon our environment. Volunteers should bring a bucket (for litter pick-up) hat, gloves, refillable water bottle, and sunblock. Registration is required.
The District will provide snacks, water, disposable gloves, and trash bags.
Outside Agencies Programs
Bayfront Park, City of Pinole
- Contact information: send email message to Pete Murray at firstname.lastname@example.com (send email starting July 25)
- Scope of work: We will be cleaning up the shore line along Hercules and Pinole as well as Pinole Creek up to I-80 Freeway
- Location: Bayfront Park, Pinole @ the foot of Tennent Ave and the Bay
- How to Register: Please use the email address indicted to contact us and interested parties should leave their names, address and phone number, also the number of group participants. If someone shows up the day of the cleanup, no one is turned away. We would just appreciate the notice of attendance.
City of Oakland
- Oakland Earth Day
- Oakland Creek to Bay Day
- Martin Luther King, Jr. Day of Service
- Oakland's Adopt a Spot Program
Don Edwards San Francisco Bay National Wildlife Refuge
- Contact information: (510) 792-0222, ext. 362 for the Visitor Services Intern or Paul Mueller at ext. 361
- Scope of work: Join thousands of people around the world for International Coastal Clean-Up Day. Help wildlife and the environment! You can either remove invasive weeds or pick up trash along the parking lot and trails. We'll supply plastic gloves (or bring your own) and trash and recycling bags. You supply energy, sturdy shoes, sun protection, and clothes you don't mind getting dirty. Bring a reusable water bottle. No reservations necessary. Children under age 18 must have parental approval.
- Location: The event is located in the vicinity of the Fishing Pier at the end of Marshlands Road at Don Edwards San Francisco Bay National Wildlife Refuge in Fremont, CA. The target area of the cleanup and weed pulling operation will be the: Shoreline Trail South and North, Fishing Pier, Fishing Pier Parking Lot and adjacent areas, and Marshlands Road up to where the bike lane from the Dumbarton Bridge meets Marshlands Road. Crescent trail can also be considered once the trail is re-opened. Some volunteers will be shuttled to areas along the Shoreline Trail as long as the levee road is not wet. Most will work closer to the fishing pier and walk on their own to other assigned areas. There will also be substantial work possible close to the parking area without the need to walk very far.
- How to register: No reservations necessary. Children under age 18 must have parental approval. To expedite the registration process, visit the U.S. Fish & Wildlife Service website to download the forms and bring to the registration table. Forms are also available at the registration table. Wear proper attire. Bring a hat, sturdy shoes, water, sunscreen, and gloves and a refillable water bottle if you have them. For more information, call 510-792-0222, ext. 362 for the Visitor Services Intern or Paul Mueller at ext. 361.
Save the Bay
- Contact information: (510) 463- 6850
- Scope of work: Volunteers will remove litter from the shoreline and collect micro plastics that are filling our waterways.
San Leandro Shoreline Cleanup
- Contact information: (510) 577-3488
- Scope of work: Trash bags, recycling bags, and gloves will be distributed to participants. Alameda County Industries will donate dumpsters for debris disposal. Drinking water also will be available, although participants are asked to bring their own water bottles to fill.
- Location: There are two staging areas: the Monarch Bay Drive Bridge (at the end of Marina Park) and the Heron Bay entrance to the shoreline trail at the end of Lewelling Boulevard. Participants are advised that the Heron Bay entrance does not have on-site parking and therefore is for drop-off only.
- How to register: Large group call (510) 577-3488; small group (5 or less) or individual sign up at the registration tables
Shoreline Cleanup
- Location: Damon Marsh Trail
- How to register: Save The Bay's website: SaveSFBay.org/volunteer


text:
I'm looking to retrieve the serial number from a USB memory stick on windows in c++.
I have found plenty of C# examples, and c++ for linux but none for c++ and windows.
- C++/CLI is not an option unfortunately.
- I am looking for the serial number of the device not the file system. OR "Device Instance Path" AKA "InstanceID"


text:
how can i build it using VS 2013. i follow your instruction and it always failed to load the project?
Hi Gerald, Can you describe what error you are facing when loading the project. Can you try to open the project with VS opened in elevated credentials (Right Click Visual Studio 2013->Run as Administrator) and let us know the result. Thanks Sri Harsha
In ecdisp.c, in vExecuteAndDisp
layOutput, in the switch statement, in the case for HIDP_SET_USAGE_ VALUE_ARRAY, there is a potential bug. After converting the string to a ULONG list, it sets params->ListLen gth = 0 after the string has been freed. This causes the call to ECDisp_ConvertU longListToValue List in ECDisp_Execute' s case for HIDP_SET_USAGE_ VALUE_ARRAY to assume that there are no values in the list and thus creates an empty Value list.
Built HClient on Windows 8.1 Preview using VS 2013 Pro preview. HClient will not run in Dialog mode. Using the command line options does work though.
It may fail opening one of the HID devices. Can you try to unplug some HID devices and see if you can narrow it down?
The hclient project can not be loaded in the solution: "hclient (load failed), The project requires user input. Reload the project for more information." When right clicking the project and select "Reload Project" the following error message is displayed in the Output window: C:\Program Files (x86)\MSBuild\M
icrosoft.Cpp\v4 .0\v120\Platfor ms\Win32\Import After\Microsoft .Cpp.WDK.props( 10,11): A numeric comparison was attempted on "$(WDKKitVersio n)" that evaluates to "" instead of a number, in condition "'$(WDKKitVersi on)' >= '8.1'". I have Windows 8.1 Preview, Visual Studio 2013 Preview and the WDK for Windows 8.1 Preview installed on my PC.
no help here - getting that 'numeric comparison' stuff with everything in vs2013 preview.
Can this model be used to create a client application that simulates itself as a USB Composite ? USB HID interaction is possible, what about USB composite device communication ?
no, you can't simulate usb devices in an application.
DialogBox call returned with 0 and application exits. OS - Windows 7 x64. Also, VS2012 can't open resource from this solution: http://gyazo.co
m/66b3db701512e 6e951d1671a3e6a 1db7
Seems to only exit with code 0 - no interface is opened. Looks like it would be useful for learning about things if it ran.


text:
Date: 03/08/2012 12:50 AM Title: I'm What? You're What? He's What?
Dayumm :)
Date: 03/08/2012 12:37 AM Title: A Bad Option--or a Worse One
So cute, wow ;D
Date: 03/08/2012 12:07 AM Title: How Did We get from Here to There?
Love it :3
Date: 03/07/2012 11:11 PM Title: Four Years after the Flight
So cute xoxo
Date: 03/06/2012 6:54 AM Title: A Safe Harbor
I truly enjoyed this story. Thanks so much for sharing it with us all. I will look forward to a sequel someday.
Date: 03/05/2012 8:19 AM Title: A Safe Harbor
Great ending! I really liked the borgs being brought in... They're 'villians' that i can enjoy the complexity of. In my head canon, the cyborgs started of created with good intentions... Maybe the planet was dying and they had to convert some people into a hive mind and send them out to gather more knowledge to save the planet. The borg were too late to save the planet but in their journey they acquired alot of tech... And they thought that they were the best because everyone in the hive lives on forever in the collective mind. They take the best of every race in order to create perfection. They don't see assimilation as evil, they see it as the only thing to do. The borg gain knowledge, the assimilated are enhanced and will live on forever.
It's great that Jim was assimilated, becuase with the remaining borg organs, enhanced brain, nanites, etc. He could probably live as long as Spock!
Plus, think of all Jim and Spock can acomplish by reprograming the nanites! If Jim's stuck in a jail cell, he can get his borg brain area to reprogram the nanites to get through the bars or the circetry. He could even inject his probes into a panel and get the whole ship under his control or download knowledge about the borg.
Looking forward to this sweet sequel!
Date: 03/04/2012 2:46 AM Title: A Safe Harbor
This is so great! So looking forward to the the Sequel, I never liked the borg, ewgh they are so creepy (shudders. I'm weary of Trelane too, so Thank you for an amazing read. I'm gonna run to off to read the updates for Finding Thy'la. As always amazing work!!!
Date: 03/04/2012 2:43 AM Title: The Journey
LOL! So great of T'Pau to state the obvious! you know I thought of all the children you have created in all the stories, I think they are all great^^ lol they should all meet and compare notes^^lol So glad Jim is awake!
Date: 03/04/2012 2:41 AM Title: The Only Logical Decision
Time for Mimi to rescue her Ko-mekh^^ I know you do happy endings so I'm not too worried!
Date: 03/04/2012 2:38 AM Title: The Terrible Gamble
My heart broke for Spock and Mimi, but I understood his decision, well there is hope. Mimi has such a strong connection with Jim, your talent in writing is amazing^^
Date: 03/04/2012 2:36 AM Title: The Choice
OH MY GOSH!!! talk about a twist, you are bloody fantastic! running to next chapter!!!!
Date: 03/04/2012 2:33 AM Title: Vulcans Don't Have Flower Girls
AWWWW!!! that was perfect with Mimi giving the blessing^^
Date: 03/04/2012 2:26 AM Title: Honeymoon at Gol
HOT DAMN! Lol that was great^^ So glad they are together^^
Date: 03/04/2012 2:16 AM Title: A Birthday--and a Bad Decision
WTF is with Spock, but I got a feeling I know what it is...lol, time for Jim to the rescue^^
Date: 03/04/2012 2:07 AM Title: Matchmakers and Meddlers
O.O I hope Trelane doesn't cause any trouble. Sweet scene with Jim and Spock, sigh^^
Date: 03/04/2012 1:58 AM Title: Vulcans Are not Structural Engineers
awww, that was perfect^^ lol Spock the Cat Finder!
Date: 03/04/2012 1:45 AM Title: A Cross between a Class Reunion and a Coronation
aww, such a sweet moment^^ Can't wait for these two work things out between them^^
Date: 03/04/2012 1:19 AM Title: Four Years and Two Weeks after the Flight
talk about a close call, I'm glad Spock is sticking around.
Date: 03/04/2012 1:06 AM Title: Memories and Dreams
oh my gosh, my heart broke for Jim for his conversation with Mimi, you're terrible for making us all cry. I think Spock has learned his lesson, I think it's about time he's given a chance to make up for his mistakes.
Author's Response:
He'll get a chance. I promise.
Date: 03/04/2012 12:55 AM Title: A Wedding, a Birthday, and a Gift
lol that is priceless, T'Pring oh man wait till Spock hears that, if he ever gets too.