PERL COMPONENT DEVELOPMENT GUIDE PIPELINE PILOT INTEGRATION COLLECTION 2016

Size: px
Start display at page:

Download "PERL COMPONENT DEVELOPMENT GUIDE PIPELINE PILOT INTEGRATION COLLECTION 2016"

Transcription

1 PERL COMPONENT DEVELOPMENT GUIDE PIPELINE PILOT INTEGRATION COLLECTION 2016

2 Copyright Notice 2015 Dassault Systèmes. All rights reserved. 3DEXPERIENCE, the Compass icon and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA, SIMULIA, GEOVIA, EXALEAD, 3D VIA, BIOVIA and NETVIBES are commercial trademarks or registered trademarks of Dassault Systèmes or its subsidiaries in the U.S. and/or other countries. All other trademarks are owned by their respective owners. Use of any Dassault Systèmes or its subsidiaries trademarks is subject to their express written approval. Acknowledgments and References To print photographs or files of computational results (figures and/or data) obtained using BIOVIA software, acknowledge the source in an appropriate format. For example: "Computational results obtained using software programs from Dassault Systèmes BIOVIA. The ab initio calculations were performed with the DMol 3 program, and graphical displays generated with Pipeline Pilot." BIOVIA may grant permission to republish or reprint its copyrighted materials. Requests should be submitted to BIOVIA Support, either through electronic mail to biovia.support@3ds.com, or in writing to: BIOVIA Support 5005 Wateridge Vista Drive, San Diego, CA USA

3 Contents Chapter 1: Perl Component Development Overview 1 Who Should Read this Guide 1 Requirements 1 Getting Started with Perl Component Development 1 Additional Information 1 Chapter 2: Perl API 2 A Minimal Perl Component 2 Where Does the Perl Code Go? 3 Script Parameter 3 Packages 3 Accessing Component Parameters 3 Accessing Global Variables 4 Accessing Data Record Properties 4 Directing Records to the Pass or Fail Port 4 Component State Return Values 5 Manipulating Hierarchical Data Records 5 Adding Properties and Child Nodes to a Data Record 6 Manipulating Nested Properties 8 Adding Child Nodes to Nested Nodes 10 Deleting Child Nodes from the Root Node 11 Deleting Nested Child Nodes 13 Chapter 3: PMetaData Properties in Perl 15 Finding Whether Metadata Properties Exist 15 Getting Metadata Properties 16 MetaData API for Nodes and Properties 17 Chapter 4: Hash Table Values in Perl 20 Creating HashTableValues in Perl 20 Adding Key/Item Pairs to a Hash Table Value 21 Assigning to a Hash Table Value 21 Testing if a Given Key is in Hash Table Value 22 Removing Key/Item Pairs from a Hash Table Value 22 Iterating over Hash Tables 23 Getting the Size of a Hash Table Value 23 Emptying a Hash Table Value 24 Hash Table Values as Perl Arrays 24 Perl HashTableValue API 25 Chapter 5: Debugging Perl Components 26 pilot::debug Module 27 pilot::debug::captureoutput() 27 pilot::debug::showvar() 27 pilot::debug::gothere() 28 pilot::debug::whocalled() 28 pilot::debug::wherecalled() 28

4 Chapter 1: Perl Component Development Overview The Pipeline Pilot Integration collection includes tools for developing components in the Perl language for use with protocols. Perl is a popular and dynamic scripting language for writing Web applications. There are several reasons why developers choose to design components in Perl, including: Many scientific users lack formal training in computer science, but have some experience writing Perl scripts. By following the information provided in this guide, you should be able to create custom components in Perl. You can develop and interactively debug Perl components, without compilation, linkage, or installation steps. No additional development environment is required. You can write Perl components using only Pipeline Pilot Client. Perl components can make use of the many third-party libraries available for the Perl language (such as BioPerl). Note: Despite these advantages, some users who require faster speed (and are willing to accept a more complex development process), may want to consider using the Java components instead. For details, see Java Component Development. Who Should Read this Guide This guide provides information about how to use the Perl component and application programming interface (API) to design your own components. It includes the necessary architectural background and the technical instruction for creating, testing, and deploying Perl components. Requirements To develop components in Perl, you need some experience with Perl scripting. You should also have a basic understanding of how to use Pipeline Pilot to design and run protocols. Note: This document assumes you are familiar with the Protocol Development Quick Start guide, which explains Component Lifetime Management. Getting Started with Perl Component Development The tools available for developing components in Perl include: Perl (on Server) component Perl API and accompanying API documentation Additional Information For more information about the Pipeline Pilot Integration collection and other BIOVIA software products, visit Perl Component Development Overview Page 1

5 Chapter 2: Perl API The Perl component development tools include an API that provides a convenient way to access and modify the data structures, including the data records that flow through the components, the various parameter settings, and the global properties of the enclosing protocol. The most commonly used global and data record values are presented to you as Perl hashes, which are tied to the underlying Pipeline Pilot data structures. This allows you to code in a familiar Perl-like fashion, without requiring detailed knowledge of the Pipeline Pilot data objects, or object-oriented programming in Perl. The full specification for the Perl API is described in a separate Perl Component API document. This chapter explains how to use a subset of the most commonly used functions that should be sufficient for solving the majority of problems when developing in Perl. Tip: The sample code used throughout this chapter is based on a Perl example protocol Manipulating Hierarchical Data Records, which is included with the Integration collection. You may want to use this protocol as a starting point for learning and experimentation. A Minimal Perl Component To begin writing a custom Perl component, start with the Perl (on Server) component. The Perl source code is contained in the Script parameter. To examine or modify the code, select the Script value in the Parameters window. A script editor is displayed for editing the syntax. When you first examine the source of a new Perl (on Server) component, it should contain the following: use strict; sub oninitialize sub onfinalize These three subroutines comprise the minimal Perl code required for a component: oninitialize(): Called once, when the protocol starts, and before any data records are received by the component. onprocess(): Called for each data record received by the component. The $data parameter contains a reference to the data record. onfinalize(): Called once, after the last record is processed. The $context and $data parameters contain references to the data structures for context and data. The use of these values is described later in this document. Perl API Page 2

6 Where Does the Perl Code Go? Script Parameter If you choose to keep the Perl code in the component's Script parameter, it is stored within the XML definition of that component in the protocol database. This is the simplest way to create a Perl component and is useful when you want to create a single instance of a component as a part of a protocol. The main disadvantage of this method is that each instance of the component (even within a single protocol) has its own copy of the code, potentially leading to maintenance problems when bugs are fixed or changes are made. Also, any potentially re-useable subroutines in your code are not accessible to other Perl components. Packages Alternatively, you can store the Perl code as a text source file on the server's file system, for run-time loading with a use statement. For example, the Script parameter for the FASTA Sequence Fetcher component contains: use SciTegic::Bio::SeqAnal::FastaSequenceFetcher; In this case, create a package, keeping the Perl source code in files, separate from the component XML. This method allows multiple components or component instances to use a common source file, eliminating code duplication and simplifying maintenance. Using packages also makes it easier to maintain and deploy a set of related components. For details on creating your own packages, see Application Packaging. Accessing Component Parameters Each component has a set of parameters that users can modify at protocol run time. Your component needs to read these parameter values, as illustrated below. First, a reference to the parameters hash is obtained using the following idiom: my $parametershashref = $context->getcomponentparameters()->gethashref(); $context is the first parameter to the oninitialize, onprocess and onfinalize subroutines. If the above syntax looks confusing, or you are not familiar with object-oriented programming in Perl, don't worry. All you need to do is copy this statement verbatim into your code. Once $parametershashref is obtained, it contains key/value pairs for each of the component s parameters and is read just like any other Perl hash. For example: my $fileformat = $parametershashref->"file Format"; Note: Component parameters are read-only, and cannot be modified by your Perl code. The Perl API provides several different ways to achieve the same result. An alternative way to read component parameters that you may sometimes see in our examples is: my $parameters = $context->getcomponentparameters(); my $fileformat = $parameters->getbyname("file Format")->getValue(); Page 3 Pipeline Pilot Perl Component Development Guide

7 Accessing Global Variables Your Perl code can both read and write global variables. They are accessed through a Perl hash reference that is accessed through the $context reference, as shown in the following code example: # obtain a reference to the globals hash: my $globalshashref = $context->getglobalproperties()->gethashref(); # reading global values: my $chargeoutputfilename = $globalshashref->"chargeoutputfile"; # creating or modifying global values: $globalshashref->"numhits" = 12; When scalar values are assigned to a global variable, they are automatically converted to a compatible data type. References to arrays can also be assigned to a global variable, in which case the global is of type SciTegic.value.FlexArrayValue. $globalshashref->"numberlist" = ["one", "two", "three"]; Writing to a non-existent global variable automatically creates the variable, the way a Perl hash works. Unlike the parameters hash, changes to the globals hash are immediately seen by the global Pipeline Pilot environment. Accessing Data Record Properties To be useful in a data stream, your component needs to access the properties of the incoming data records. Pipeline Pilot data records are hierarchical data structures, but in many cases, you may be concerned with properties at the top level. This section demonstrates that reading, modifying, or creating top-level properties is very simple. Accessing nested properties is described later, in the section Manipulating Hierarchical Data Records. # Tie the properties to a Perl hash reference my $sequencenode = $data->getroot(); my $propertieshashref = $sequencenode->getproperties()->gethashref(); # getting property values: my $displayid = $propertieshashref->'dispayid' # setting property values: $propertieshashref->'elapsedtime' = 10.8;... Assigning a value to a non-existent property automatically adds that property to the data record. Directing Records to the Pass or Fail Port When a component receives data records, it can do any of the following with the records: Route to the pass port Route to the fail port Do not route to any port (i.e., deleted from the data stream) The Perl code used to select these options is: $data->routeto(pilot::passport); $data->routeto(pilot::failport); $data->routeto(pilot::noport); Perl API Page 4

8 In these examples, $data is the second parameter to the onprocess subroutine. Component State Return Values You can define different categories of component behavior (a reader, calculator, manipulator, etc.) based on the component state returned by the oninitialize and onprocess subroutines. In a Perl component, the oninitialize and onprocess subroutines must end with a statement such as this: The list below names each of the available component state return values and explains their meaning: pilot::doneprocessingdata: The component's task is complete. It requests that the framework does not invoke its onprocess subroutine again. pilot::readyforinputdata: The component requests that the framework invoke its onprocess subroutine with any data record that arrives at the input port. pilot::readyfornewdata: The component requests that the framework repeatedly invoke its onprocess subroutine with a new, empty data record, as long as this component state is in force. pilot::readyforinputthennewdata: The component requests that the framework invoke its onprocess subroutine with any data record that arrives at its input port. When there are no more input records to process, the framework repeatedly passes to the component a new, empty data record, as long as this component state is in force. Below are some broad categories of components and how they make use of component state. Component Category Calculator Filter Reader or Generator Writer Integrator Management of Component State Component state is always set to ReadyForInputData. Component state is always set to ReadyForInputData. Component state is set to ReadyForNewData. When the operation is complete, the state is set to DoneProcessingData. Component state is set to ReadyForInputData. If a maximum output limit is reached, the state is changed to DoneProcessingData. Component state is set to ReadyForInputThenNewData. For each input data record, the component caches the necessary data. When there is no further data on the input port and a new data record is processed, the component starts to output records of aggregated data. Manipulating Hierarchical Data Records Previously, we discussed how to manipulate (read/write/create) top-level properties on the data record. This section explains how to work with hierarchical data records. An Pipeline Pilot data record is a hierarchical tree structure consisting of nodes (containers for nodes and properties) and properties Page 5 Pipeline Pilot Perl Component Development Guide

9 (named values). In a simple record, there is a single node, called the "root node" and its properties are called "top-level properties". This simple record structure is sufficient for many purposes, but because nodes can contain other nodes, it is possible to created hierarchical (or "nested") data records. A simple analogy with a computer file system can make this structure clear. Just as in a file system, where folders can contain files and/or folders, which can in turn contain files and/or folders, in a data record, nodes can contain nodes and/or properties. Think of a node as a folder, and a property as a file containing a value. Both nodes and properties have names, just like files and folders, which can be used to manipulate them. Adding Properties and Child Nodes to a Data Record The code example below shows how to add properties and child nodes to an empty data record. At the beginning of the onprocess() subroutine, $data contains a reference to the incoming data record. The first step is to use the getroot() method to get a reference to the root node. Adding child nodes is done in the addanimal() and addequipment() subroutines. Comments in the code explain the steps in detail. sub onprocess # Given an empty record, get a reference to the root node. my $root = $data->getroot(); # Label the root node "Farm" $root->setname("farm"); my $properties = $root->getproperties()->gethashref(); # Set some top-level properties $properties->"farm owner" = "Farmer Brown"; $properties->"farm type" = "Potato"; # Add some child nodes representing animals addanimal($root, "cow"); addanimal($root, "pig"); addanimal($root, "chicken"); addanimal($root, "chicken"); addanimal($root, "chicken"); addanimal($root, "horse"); # Add some child nodes representing equipment addequipment($root, "tractor"); addequipment($root, "pitchfork"); addequipment($root, "milking stool"); Perl API Page 6

10 sub addanimal my ($node, $animaltype) # $node contains a reference to the node of the data record # to which we will attach the new child node. # # In other words, it is the node that will contain the # new Animal node. # Create a new node named "Animal", with one property: "type" my $animal = pilot::createnode(); $animal->setname("animal"); $animal->getproperties()->gethashref()->"type" = $animaltype; # Attach the newly created node to the existing node $node->appendchild($animal); sub addequipment... # this code is similar to addanimal() Note: For clarity and simplicity in this example, addanimal() and addequipment() are implemented as separate subroutines, but in actual use it would be better to write a single more general subroutine to add a new node. This is the data record that results, as shown by the Data Record Tree Viewer: Page 7 Pipeline Pilot Perl Component Development Guide

11 Data record tree view results Manipulating Nested Properties The next code example shows how to read, write, and create properties belonging to a child node (also called "deep" or "nested" properties). Iterating over all child nodes of a specific type is done by using the findchildrenbyname() method of the node object, which returns a list of references to all of the node's children that have the specified name. sub onprocess # Get a reference to the root node of the data record. my $root = $data->getroot(); # Iterate over every "Animal" node directly attached to # the root node: foreach my $animal ($root->findchildrenbyname("animal")) my $propertieshashref = $animal->getproperties()->gethashref(); # Reading a property value: my $typevalue = $propertieshashref->"type"; # Writing a new value to a property: Perl API Page 8

12 $propertieshashref->"type" = "genetically modified ". $typevalue; # Notice that $propertieshashref works just like any # other Perl hash, so you could create a new property # here by assigning a value to a new key: # # $propertieshashref->"newkey" = "newvalue"; # Upgrade the equipment (by turbo-charging) foreach my $equipment ($root->findchildrenbyname("equipment")) my $propertieshashref = $equipment->getproperties()->gethashref(); $propertieshashref->"type" = "turbo-". $propertieshashref->"type"; The resulting data record shows that all of the animals have been genetically modified, and all of the equipment has been turbocharged: Data record tree view results Page 9 Pipeline Pilot Perl Component Development Guide

13 Adding Child Nodes to Nested Nodes If you have a reference to an existing node, a new child node can be attached to it using the appendchild() method. In the following example, we iterate over all of the "Animal" nodes belonging to the root node, and if the node's type contains the word "chicken", three new "Egg" nodes are attached to it. This is done in the addegg() subroutine, which works just like the addanimal() subroutine discussed in a previous example. sub onprocess # The chickens are laying, so give each chicken some "Egg" # child nodes. my $root = $data->getroot(); foreach my $animal ($root->findchildrenbyname("animal")) my $propertieshashref = $animal->getproperties()->gethashref(); if ($propertieshashref->"type" =~ /chicken/i) # Give each chicken three eggs addegg($animal, "white"); addegg($animal, "brown"); addegg($animal, "broken"); sub addegg my ($node, $eggtype) my $egg = pilot::createnode(); $egg->setname("egg"); $egg->getproperties()->gethashref()->"type" = $eggtype; $node->appendchild($egg); The resulting data record is now three levels deep, as all of the chickens now have eggs: Perl API Page 10

14 Data record tree view Deleting Child Nodes from the Root Node The next code sample shows how to delete a child node from the root node. Notice that deleting a node also removes its properties and child nodes, so deleting a node is the same as deleting an entire subtree. Also note that since you still have a reference to the deleted node (or subtree), it can be reattached to another node of the original record, or kept in a Perl package level variable and later attached to a different record. This gives you the ability take apart and rearrange data record trees in any way you want. # Farmer Brown wants bacon, so delete all "Pig" child- # nodes that are directly attached to the root node. Page 11 Pipeline Pilot Perl Component Development Guide

15 my $root = $data->getroot(); # Iterate over all "Animal" nodes belonging to the root node: foreach my $animal ($root->findchildrenbyname("animal")) my $propertieshashref = $animal->getproperties()->gethashref(); # Any "Animal" node whose type contains "pig" is a pig. if ($propertieshashref->"type" =~ /pig/i) # $root is the parent node, # $animal is the child node to delete $root->removechild($animal); The "pig" node was deleted from the data record. If there were more than one "pig", the above code would delete all of them. Perl API Page 12

16 Data record tree view Deleting Nested Child Nodes The following code example shows how to use nested loops and findchildrenbyname() to operate on all of the deeply nested "Egg" nodes in the data record. my $root = $data->getroot(); # Remove all "Egg" nodes whose type property value is "broken", # regardless of what type of "Animal" they belong to. foreach my $animal ($root->findchildrenbyname("animal")) foreach my $egg ($animal->findchildrenbyname("egg")) Page 13 Pipeline Pilot Perl Component Development Guide

17 if ($egg->getproperties()->gethashref()->"type" =~ /broken/i) # $animal is the parent node, $egg is the # child node to delete $animal->removechild($egg); In the resulting data record, all of the "Egg" nodes with type = "broken" were deleted: Data record tree view Perl API Page 14

18 Chapter 3: PMetaData Properties in Perl Metadata properties are properties in a property collection associated with every node and property in a data hierarchy. While not all nodes and properties may have such a property collection, all can have such a collection. This allows saving of memory (when metadata is not needed on a particular node or property) while allowing the user to effect the creation of such a collection when it is needed. Metadata properties are available in Perl as objects that implement a property collection. There are typically two methods to access the metadata property collection a "find" method that returns 'undef' if the metadata properties have never been accessed, and a "get" method that forces the creation of an empty property collection if it does not already exist. Once you get the metadata property collection, you can perform all the actions you would perform with any other property collection in Perl: call methods, get a hashref, assign, etc. Finding Whether Metadata Properties Exist You can find out whether a node or property contains metadata with the findmetadata method. If the metadata exists, the property collection will be returned. If not, undef will be returned. This is useful to check the existence of metadata attributes without forcing the creation (and memory use!) of an unneeded property collection. For example, you could find the metadata property collection on the root node, and if it exists, check for the existence of some property. If that property exists, and it is true, assign it to false (0 in Perl). my $root = $data->getroot(); my $metadata = $root->findmetadata(); if (defined $metadata) my $generated = $metadata->findbyname( Generated ); if (defined $generated and $generated) $metadata->define( Generated, 0); You can test this Perl snippet by inserting a Custom Manipulator (PilotScript) upstream, and setting the Expression to: nodemetadataproperty(dataroot(), "Generated") := true; Downstream, insert a Custom Manipulator (PilotScript), and set the Expression to: GeneratedNewValue := nodemetadataproperty(dataroot(), "Generated"); Using a Data Record Tree Viewer, you should be able to see the generated new value to be "0" after the application of the Perl script. Similarly, you can find metadata from a property "Measurement", and if "Units" exists on the metadata, set them to "Unknown": PMetaData Properties in Perl Page 15

19 my $props = $data->getproperties(); my $measurement = $props->getbyname( Measurement ); my $metadata = $measurement->findmetadata(); if (defined $metadata) my $units = $metadata->findbyname( Units ); if (defined $units) $metadata->define( Units, Unknown ); You can test this Perl snippet by inserting a Custom Manipulator (PilotScript) upstream, and setting the Expression to: Measurement := 10; metadataproperty(measurement, 'units') := 'ms'; Downstream, insert a Custom Manipulator (PilotScript), and set the Expression to: NewUnits := metadataproperty( Measurement, Units ); Using a Data Record Tree Viewer, you should be able to see the new value for the metadata property Units to be "Unknown" after the application of the Perl script. Getting Metadata Properties These methods are similar to the previously-described "find" methods, but you never have to check whether the result is undefined if the requested metadata property collection does not already exist, it is created. For example, you could get the metadata property collection on the root node and assign the property "Generated" to false (0 in Perl). my $root = $data->getroot(); my $metadata = $root->getmetadata(); $metadata->define( Generated, 0); You can test whether this Perl snippet worked by inserting a Custom Manipulator (PilotScript) downstream, and setting the Expression to: GeneratedValue := nodemetadataproperty(dataroot(), "Generated"); Using a Data Record Tree Viewer, you should be able to see the value of Generated to be "0" after the application of the Perl script. Page 16 Pipeline Pilot Perl Component Development Guide

20 Similarly, you can get metadata for a property "Measurement", and set metadata property "Units" to "Unknown": my $props = $data->getproperties(); my $measurement = $props->getbyname( Measurement ); my $metadata = $measurement->findmetadata(); $metadata->define( Units, Unknown ); You can test this Perl snippet by inserting a Custom Manipulator (PilotScript) upstream, and setting the Expression to: Measurement := 10; Downstream, insert a Custom Manipulator (PilotScript), and set the Expression to: If (metadataproperty( Measurement, Units ) is defined) then Units := metadataproperty( Measurement, Units ); End If; Using a Data Record Tree Viewer, you should be able to see the value for the metadata property Units to be defined to value "Unknown" after the application of the Perl script. MetaData API for Nodes and Properties The following methods may be called for either nodes or properties. findmetadata Returns a property collection containing the metadata if it exists, else undef. Return value: Property Collection A property collection containing the metadata if it exists, else undef. Example: Return the metadata from the root node, and see if it contains the flag "Generated" with the value true. If so, set it to false. PMetaData Properties in Perl Page 17

21 findmetadata my $root = $data->getroot(); my $metadata = $root->findmetadata(); if (defined $metadata) my $generated = $metadata->findbyname( Generated ); if (defined $generated and $generated) $metadata->define( Generated, 0); Example 2: Return the metadata from a property "Measurement", and see if it contains the metadata property "Units". If so, set it to "Unknown". my $props = $data->getproperties(); my $measurement = $props->getbyname( Measurement ); my $metadata = $measurement->findmetadata(); if (defined $metadata) my $units = $metadata->findbyname( Units ); if (defined $units) $metadata->define( Units, Unknown ); getmetadata Returns a property collection containing the metadata. If it does not already exist, create it. Return value: Property Collection A property collection containing the metadata property collection. Example: Return the metadata from the root node, and set the flag "Generated" to false. Page 18 Pipeline Pilot Perl Component Development Guide

22 getmetadata my $root = $data->getroot(); my $metadata = $root->getmetadata(); $metadata->define( Generated, 0); Example 2: Return the metadata from a property "Measurement", and set the metadata property "Units" to "Unknown". my $props = $data->getproperties(); my $measurement = $props->getbyname( Measurement ); my $metadata = $measurement->findmetadata(); $metadata->define( Units, Unknown ); PMetaData Properties in Perl Page 19

23 Chapter 4: Hash Table Values in Perl Properties can contain any of a large number of possible values. One value type is known as a HashTableValue; this is an implementation of a general hash table that can be added to any property collection, cloned, and cached. This section will discuss the creation, access, and manipulation of these value types via the Perl interface. HashTableValues are new value types starting with Pipeline Pilot 9.0. Previously, hash tables were available only in PilotScript; they were denoted using a numeric value, and kept in a static table. These tables could not be accessed by any other scripting language. The new hash table value is a native value type. It is accessible by the scripting languages, as well as by PilotScript. They can be serialized, copied, and are cloned when a node is cloned. They can be stored on global properties and shared across components. This gives them a robustness that was not possible with the previous static implementation. All the current PilotScript methods work with the new hash table values, with the only difference being that they are created using HashValueCreate() rather than HashCreate(). In Perl, for a property containing a value of type HashTableValue, the hashref can be obtained and used to access or manipulate the table. Locally-created Perl hashes can be stored onto a property collection, with the new property having a value of type HashTableValue. Thus you can easily manipulate hash tables in Perl, then save the result onto a property collection. Downstream Perl components can access and manipulate these hash table values via hash references to give a look-and-feel exactly the same as native Perl hash tables. Creating HashTableValues in Perl We'll demonstrate the creation of hash table values by adding to the onprocess method of the Perl (on Server) component. You can test the component by using Generate Empty Data, followed by Perl (on Server), followed by the Data Record Tree Viewer. Create the protocol as described above, and replace the onprocess method with the following. This creates a local hash in Perl, then uses "define" to add it as a property to the property collection. my $props = $data->getproperties(); my $hashref = A, apple, B, banana ; my $hashprop = $props->define( H, $hashref); The output should look like: Hash Table Values in Perl Page 20

24 The Data Record Tree Viewer displays hash table values as an array of entries, with the key and item of each entry separated by an equal sign. Adding Key/Item Pairs to a Hash Table Value Once created, you can manipulate a property containing a hash table value by getting a Perl hash reference and performing native Perl hash operations. To access a hash table value as a native Perl hash reference, call the gethashref method on the property containing the hash table value. Here is an example, in which we add a key "A" with a value "apple". my $props = $data->getproperties(); my $hashprop = $props->define( H, ); my $hashref = $hashprop->gethashref(); $hashref-> A = apple ; The output looks like: Assigning to a Hash Table Value Assignment from a Perl hashref can be used to assign the state of a hash table, erasing any current content. my $props = $data->getproperties(); my $hashprop = $props->define( H, 'A', 'apple', 'B', 'banana'); my $hashref = $hashprop->gethashref(); %$hashref = ( C, carrot, D, dill ); The output looks like: Page 21 Pipeline Pilot Perl Component Development Guide

25 Testing if a Given Key is in Hash Table Value You can test whether a given key is in a hash table using either the hashref, or calling a native method. First, using the hashref: my $props = $data->getproperties(); my $hashprop = $props->define( H, 'A', 'apple', 'B', 'banana'); my $hashref = $hashprop->gethashref(); if (!exists $hashref-> A ) die Strange did not find key A! ; This snippet should run and not execute the "die" statement. Removing Key/Item Pairs from a Hash Table Value You can remove a single key/item pair from a hash table using the hashref. my $props = $data->getproperties(); my $hashprop = $props->define( H, 'A', 'apple', 'B', 'banana'); my $hashref = $hashprop->gethashref(); delete $hashref-> A ; This will leave you with a hash table containing only one entry with key "B": Hash Table Values in Perl Page 22

26 Iterating over Hash Tables Just like a native Perl hash reference, we can iterate over hash table value references. In this example, we take all the entries in the hash table value and make them properties on the data root. my $props = $data->getproperties(); my $hashprop = $props->define( H, 'A', 'apple', 'B', 'banana'); my $hashref = $hashprop->gethashref(); while ((my $key, my $value) = each %$hashref) $props->define($key, $value); Another equivalent scheme would be to use the foreach loop: my $props = $data->getproperties(); my $hashprop = $props->define( H, 'A', 'apple', 'B', 'banana'); my $hashref = $hashprop->gethashref(); foreach my $key (keys %$hashref) $props->define($key, $hashref->$key); Note that the order in which the iteration proceeds is arbitrary; you should not plan on any particular order, as it is implementation-dependent. In either case, you should see something like the following output: Getting the Size of a Hash Table Value You can get the size (that is, the number of entries) of a hash table using the hashref: Page 23 Pipeline Pilot Perl Component Development Guide

27 my $props = $data->getproperties(); my $hashprop = $props->define( H, 'A', 'apple', 'B', 'banana'); my $hashref = $hashprop->gethashref(); $props->define( HSize, scalar keys %$hashref); The output looks like: Emptying a Hash Table Value You can clear a hash table using the hashref: my $props = $data->getproperties(); my $hashprop = $props->define( H, 'A', 'apple', 'B', 'banana'); my $hashref = $hashprop->gethashref(); %$hashref = ; At the end, you should have no contents in your table when you view it. Hash Table Values as Perl Arrays While not a standard Perl capability, you can also access a hash table value as a native Perl array of strings. In this case, the i th entry is composed of the key, followed by name equal sign, followed by the value. This is most useful for display purposes. my $props = $data->getproperties(); my $hashprop = $props->define( H, 'A', 'apple', 'B', 'banana'); = $hashprop->getvalue(); Hash Table Values in Perl Page 24

28 $props->define( SecondEntry, $arr[1]); The result is: The order of the array is not necessarily the order you'll get if you perform a standard iteration on a hash table. Hash tables are not by nature ordered, so the results will depend on the implementation. Perl HashTableValue API All of these methods are called on the property containing the hash table value. (You can also access and manipulate these values by getting a hashref, and using native Perl syntax for working with hash tables; we will assume the user has some familiarity with Perl, and do not described these methods further.) gethashref Returns a hashref allowing access and manipulation of the property hash table value. Return value: Hashref A hashref allowing access and manipulation of the property hash table value. Example: Return a hashref and iterate over the hash table, moving all key/item pairs to the root. my $props = $data->getproperties(); my $hashprop = $props->define( H, 'A', 'apple', 'B', 'banana'); my $hashref = $hashprop->gethashref(); while ((my $key, my $value) = each %$hashref) $props->define($key, $value); Page 25 Pipeline Pilot Perl Component Development Guide

29 Chapter 5: Debugging Perl Components The Pipeline Pilot Client provides a window that displays messages about your Perl component. The Debug Messages window is exposed when you run the protocol in debug mode, and it appears in the lower-left window. (You can also view it by selecting View > Debug Windows > Debug Messages.) The following example shows the Debug Messages window for the Perl Debugging example protocol: Debug messages for the Perl Debugging example Tip: To run protocols in debug mode, press SHIFT+F5 when you run the job. The Debug Messages window opens if you configured your protocol to use debugging features. The Debug Messages window displays output messages from all selected components. If you are only interested in seeing the output from a single component, select it by clicking it in the protocol window. To see the output from all of the components, click on the background of the protocol window. You can send messages to the Debug Messages window from your Perl code with: Debugging Perl Components Page 26

30 pilot::debugmessage("your message"); or with: pilot::debugmessageerror("your error message"); Both of these commands display your string to the window. The only difference is that debugmessage displays in black, and debugmessageerror displays in red. The normal Perl string interpolation allows you to display the values of variables in your code: pilot::debugmessage("my value = $myvariable"); pilot::debug Module Several useful debugging subroutines are provided in the pilot::debug module. You can include this module in your program by putting the following statement near the beginning of your program: use pilot::debug; pilot::debug::captureoutput() This function allows you to redirect output from Perl print and warn statements. If the single Boolean argument is true, output capturing is enabled. Otherwise output capturing is disabled. Enabling output capturing applies to all code executed by this component and remains in effect until it is disabled or the protocol terminates. The following code excerpt shows how it is used. # Start capturing the Perl STDOUT and STDERR streams. pilot::debug::captureoutput(1); print "This message will be printed to STDOUT.\n"; print STDERR "This message will be printed to STDERR.\n"; warn "This warning message will be printed to STDERR.\n"; # Stop capturing the STDOUT and STDERR streams. pilot::debug::captureoutput(0); print "This message will not be displayed\n"; pilot::debug::showvar() This subroutine prints human readable representation of Perl data structures to the Debug Messages window. pilot::debug::showvar() has two parameters: a reference to the variable to display, and an optional descriptive message. It is a wrapper for Data::Dumper::dump() from the standard Perl library. Example: # simple example my $i = 123; pilot::debug::showvar( \$i, "This is just a reference to a scalar."); # showvar() can display complex nested data structures. pilot::debug::showvar( [ 'one', ['two - A', 'two - B', 'two - C'], Page 27 Pipeline Pilot Perl Component Development Guide

31 ); ] 'three', firstname => 'John', lastname => 'Smith' pilot::debug::gothere() This subroutine prints the following: subroutine name that contains the gothere() call line number in the file containing the gothere() call subroutine name that called subroutine containing the gothere() call to the console. pilot::debug::whocalled() Returns a string containing the name of the subroutine that called the current subroutine. pilot::debug::wherecalled() Returns a string containing the filename and line number identifying where the current subroutine was called. Debugging Perl Components Page 28

DEVELOPER GUIDE PIPELINE PILOT INTEGRATION COLLECTION 2016

DEVELOPER GUIDE PIPELINE PILOT INTEGRATION COLLECTION 2016 DEVELOPER GUIDE PIPELINE PILOT INTEGRATION COLLECTION 2016 Copyright Notice 2015 Dassault Systèmes. All rights reserved. 3DEXPERIENCE, the Compass icon and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA,

More information

JAVA COMPONENT DEVELOPMENT GUIDE PIPELINE PILOT INTEGRATION COLLECTION 2016

JAVA COMPONENT DEVELOPMENT GUIDE PIPELINE PILOT INTEGRATION COLLECTION 2016 JAVA COMPONENT DEVELOPMENT GUIDE PIPELINE PILOT INTEGRATION COLLECTION 2016 Copyright Notice 2015 Dassault Systèmes. All rights reserved. 3DEXPERIENCE, the Compass icon and the 3DS logo, CATIA, SOLIDWORKS,

More information

CLIENT SYSTEM REQUIREMENTS NOTEBOOK 2018

CLIENT SYSTEM REQUIREMENTS NOTEBOOK 2018 CLIENT SYSTEM REQUIREMENTS NOTEBOOK 2018 Copyright Notice 2017 Dassault Systèmes. All rights reserved. 3DEXPERIENCE, the Compass icon and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA, SIMULIA, GEOVIA,

More information

INSTALL GUIDE BIOVIA INSIGHT 2.6

INSTALL GUIDE BIOVIA INSIGHT 2.6 INSTALL GUIDE BIOVIA INSIGHT 2.6 Copyright Notice 2015 Dassault Systèmes. All rights reserved. 3DEXPERIENCE, the Compass icon and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA, SIMULIA, GEOVIA, EXALEAD,

More information

QUICK START GUIDE PROTOCOL DEVELOPMENT INTEGRATION COLLECTION 2016

QUICK START GUIDE PROTOCOL DEVELOPMENT INTEGRATION COLLECTION 2016 QUICK START GUIDE PROTOCOL DEVELOPMENT INTEGRATION COLLECTION 2016 Copyright Notice 2015 Dassault Systèmes. All rights reserved. 3DEXPERIENCE, the Compass icon and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA,

More information

INSTALL GUIDE BIOVIA INSIGHT 2016

INSTALL GUIDE BIOVIA INSIGHT 2016 INSTALL GUIDE BIOVIA INSIGHT 2016 Copyright Notice 2015 Dassault Systèmes. All rights reserved. 3DEXPERIENCE, the Compass icon and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA, SIMULIA, GEOVIA, EXALEAD,

More information

GETTING STARTED WITH INSIGHT PLUGINS GUIDE BIOVIA INSIGHT 2018

GETTING STARTED WITH INSIGHT PLUGINS GUIDE BIOVIA INSIGHT 2018 GETTING STARTED WITH INSIGHT PLUGINS GUIDE BIOVIA INSIGHT 2018 Copyright Notice 2017 Dassault Systèmes. All rights reserved. 3DEXPERIENCE, the Compass icon and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA,

More information

Flat File Decoding DELMIA Apriso 2017 Technical Guide

Flat File Decoding DELMIA Apriso 2017 Technical Guide Flat File Decoding DELMIA Apriso 2017 Technical Guide 2016 Dassault Systèmes. Apriso, 3DEXPERIENCE, the Compass logo and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA, SIMULIA, GEOVIA, EXALEAD, 3D VIA,

More information

PROTOCOL DEVELOPMENT Quick Start Guide

PROTOCOL DEVELOPMENT Quick Start Guide PROTOCOL DEVELOPMENT Quick Start Guide Copyright Notice Copyright 2011 Accelrys Software Inc. All rights reserved. This product (software and/or documentation) is furnished under a License Agreement and

More information

FlexParts DELMIA Apriso 2018 Implementation Guide

FlexParts DELMIA Apriso 2018 Implementation Guide FlexParts DELMIA Apriso 2018 Implementation Guide 2017 Dassault Systèmes. Apriso, 3DEXPERIENCE, the Compass logo and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA, SIMULIA, GEOVIA, EXALEAD, 3D VIA, BIOVIA,

More information

DATABASE INTEGRATION GUIDE PIPELINE PILOT INTEGRATION COLLECTION 2016

DATABASE INTEGRATION GUIDE PIPELINE PILOT INTEGRATION COLLECTION 2016 DATABASE INTEGRATION GUIDE PIPELINE PILOT INTEGRATION COLLECTION 2016 Copyright Notice 2015 Dassault Systèmes. All rights reserved. 3DEXPERIENCE, the Compass icon and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA,

More information

ADMINISTRATION GUIDE BIOVIA QUERY SERVICE 2018

ADMINISTRATION GUIDE BIOVIA QUERY SERVICE 2018 ADMINISTRATION GUIDE BIOVIA QUERY SERVICE 2018 Copyright Notice 2017 Dassault Systèmes. All rights reserved. 3DEXPERIENCE, the Compass icon and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA, SIMULIA,

More information

Sequence Provider DELMIA Apriso 2018 Implementation Guide

Sequence Provider DELMIA Apriso 2018 Implementation Guide Sequence Provider DELMIA Apriso 2018 Implementation Guide 2017 Dassault Systèmes. Apriso, 3DEXPERIENCE, the Compass logo and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA, SIMULIA, GEOVIA, EXALEAD, 3D

More information

Classnote for COMS6100

Classnote for COMS6100 Classnote for COMS6100 Yiting Wang 3 November, 2016 Today we learn about subroutines, references, anonymous and file I/O in Perl. 1 Subroutines in Perl First of all, we review the subroutines that we had

More information

DEVELOPER GUIDE PIPELINE PILOT INTEGRATION COLLECTION 2016

DEVELOPER GUIDE PIPELINE PILOT INTEGRATION COLLECTION 2016 DEVELOPER GUIDE PIPELINE PILOT INTEGRATION COLLECTION 2016 Copyright Notice 2015 Dassault Systèmes. All rights reserved. 3DEXPERIENCE, the Compass icon and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA,

More information

Database Management (Functional) DELMIA Apriso 2018 Implementation Guide

Database Management (Functional) DELMIA Apriso 2018 Implementation Guide Database Management (Functional) DELMIA Apriso 2018 Implementation Guide 2017 Dassault Systèmes. Apriso, 3DEXPERIENCE, the Compass logo and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA, SIMULIA, GEOVIA,

More information

Manufacturing Process Intelligence DELMIA Apriso 2017 Installation Guide

Manufacturing Process Intelligence DELMIA Apriso 2017 Installation Guide Manufacturing Process Intelligence DELMIA Apriso 2017 Installation Guide 2016 Dassault Systèmes. Apriso, 3DEXPERIENCE, the Compass logo and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA, SIMULIA, GEOVIA,

More information

ENOVIA Studio Developer Edition

ENOVIA Studio Developer Edition ENOVIA Studio Developer Edition Product overview ENOVIA Studio Developer Edition provides software code implementation and quality engineering capabilities to more rapidly develop custom applications for

More information

INSTALLATION AND CONFIGURATION GUIDE R SOFTWARE for PIPELINE PILOT 2016

INSTALLATION AND CONFIGURATION GUIDE R SOFTWARE for PIPELINE PILOT 2016 INSTALLATION AND CONFIGURATION GUIDE R SOFTWARE for PIPELINE PILOT 2016 R Software: Installation and Configuration Guide Page 1 Copyright Notice 2015 Dassault Systèmes. All rights reserved. 3DEXPERIENCE,

More information

21 CFR Part 11 Compliance DELMIA Apriso 2018 Implementation Guide

21 CFR Part 11 Compliance DELMIA Apriso 2018 Implementation Guide 21 CFR Part 11 Compliance DELMIA Apriso 2018 Implementation Guide 2017 Dassault Systèmes. Apriso, 3DEXPERIENCE, the Compass logo and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA, SIMULIA, GEOVIA, EXALEAD,

More information

Isight Component Development

Isight Component Development Lecture 1 Introduction Workshop 0 Workshop Preliminaries Lecture 2 Basic Component Anatomy Workshop 1 Building a GUI Workshop 2 Executing External Source Code Lecture 3 Building and Testing Components

More information

CONFIGURED IP MANAGEMENT OBJECTIVE

CONFIGURED IP MANAGEMENT OBJECTIVE CONFIGURED IP MANAGEMENT OBJECTIVE Configured IP Management provides engineers with full control and thorough traceability of modifications made with 3DEXPERIENCE applications for designing and simulating

More information

CS 231 Data Structures and Algorithms, Fall 2016

CS 231 Data Structures and Algorithms, Fall 2016 CS 231 Data Structures and Algorithms, Fall 2016 Dr. Bruce A. Maxwell Department of Computer Science Colby College Course Description Focuses on the common structures used to store data and the standard

More information

IBM Rational Rhapsody Gateway Add On. User Guide

IBM Rational Rhapsody Gateway Add On. User Guide User Guide Rhapsody IBM Rational Rhapsody Gateway Add On User Guide License Agreement No part of this publication may be reproduced, transmitted, stored in a retrieval system, nor translated into any

More information

Isight Component Development 5.9

Isight Component Development 5.9 Isight Component Development 5.9 About this Course Course objectives Upon completion of this course you will be able to: Understand component requirements Develop component packages for Isight Targeted

More information

Teiid Designer User Guide 7.5.0

Teiid Designer User Guide 7.5.0 Teiid Designer User Guide 1 7.5.0 1. Introduction... 1 1.1. What is Teiid Designer?... 1 1.2. Why Use Teiid Designer?... 2 1.3. Metadata Overview... 2 1.3.1. What is Metadata... 2 1.3.2. Editing Metadata

More information

Audit Trail DELMIA Apriso 2018 Technical Guide

Audit Trail DELMIA Apriso 2018 Technical Guide Audit Trail DELMIA Apriso 2018 Technical Guide 2017 Dassault Systèmes. Apriso, 3DEXPERIENCE, the Compass logo and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA, SIMULIA, GEOVIA, EXALEAD, 3D VIA, BIOVIA,

More information

DELTAGEN STELLAR. DISTRIBUTED RENDERING - CLUSTER SETUP Administration Guide

DELTAGEN STELLAR. DISTRIBUTED RENDERING - CLUSTER SETUP Administration Guide DELTAGEN STELLAR DISTRIBUTED RENDERING - CLUSTER SETUP Administration Guide CONTENTS Prerequisites 2 Overview 2 Setup 2 Set up Artifacts 3 Cluster Setup 3 Cluster Startup 3 Start and Shutdown Order 3 Remote

More information

Analytics: Server Architect (Siebel 7.7)

Analytics: Server Architect (Siebel 7.7) Analytics: Server Architect (Siebel 7.7) Student Guide June 2005 Part # 10PO2-ASAS-07710 D44608GC10 Edition 1.0 D44917 Copyright 2005, 2006, Oracle. All rights reserved. Disclaimer This document contains

More information

FEATURE LIST DELTAGEN MARKETING SUITE

FEATURE LIST DELTAGEN MARKETING SUITE FEATURE LIST DELTAGEN MARKETING SUITE 3DEXCITE DELTAGEN MARKETING SUITE - STAGE MAKE IT SHINE While DELTAGEN ROBOT and HUB convert, prepare and preserve model data, DELTAGEN STAGE provides the final steps

More information

Avid Interplay Production Web Services Version 2.0

Avid Interplay Production Web Services Version 2.0 Avid Interplay Production Web Services Version 2.0 www.avid.com Table of Contents Overview... 1 Interplay Production Web Services Functionality... 2 Asset Management... 2 Workflow Enhancement... 3 Infrastructure...

More information

Business Integrator - Configuration Guidelines DELMIA Apriso 2018 Technical Guide

Business Integrator - Configuration Guidelines DELMIA Apriso 2018 Technical Guide Business Integrator - Configuration Guidelines DELMIA Apriso 2018 Technical Guide 2018 Dassault Systèmes. Apriso, 3DEXPERIENCE, the Compass logo and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA, SIMULIA,

More information

2.2 Syntax Definition

2.2 Syntax Definition 42 CHAPTER 2. A SIMPLE SYNTAX-DIRECTED TRANSLATOR sequence of "three-address" instructions; a more complete example appears in Fig. 2.2. This form of intermediate code takes its name from instructions

More information

(Refer Slide Time: 01:12)

(Refer Slide Time: 01:12) Internet Technology Prof. Indranil Sengupta Department of Computer Science and Engineering Indian Institute of Technology, Kharagpur Lecture No #22 PERL Part II We continue with our discussion on the Perl

More information

Teamcenter 11.1 Systems Engineering and Requirements Management

Teamcenter 11.1 Systems Engineering and Requirements Management SIEMENS Teamcenter 11.1 Systems Engineering and Requirements Management Systems Architect/ Requirements Management Project Administrator's Manual REQ00002 U REQ00002 U Project Administrator's Manual 3

More information

Getting Started with Web Services

Getting Started with Web Services Getting Started with Web Services Getting Started with Web Services A web service is a set of functions packaged into a single entity that is available to other systems on a network. The network can be

More information

Intel Authoring Tools for UPnP* Technologies

Intel Authoring Tools for UPnP* Technologies Intel Authoring Tools for UPnP* Technologies (Version 1.00, 05-07-2003) INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE,

More information

IBM Rational Rhapsody Gateway Add On. User Manual

IBM Rational Rhapsody Gateway Add On. User Manual User Manual Rhapsody IBM Rational Rhapsody Gateway Add On User Manual License Agreement No part of this publication may be reproduced, transmitted, stored in a retrieval system, nor translated into any

More information

INSTALLATION GUIDE BIOVIA VAULT SERVER 2016

INSTALLATION GUIDE BIOVIA VAULT SERVER 2016 INSTALLATION GUIDE BIOVIA VAULT SERVER 2016 Copyright Notice 2015 Dassault Systèmes. All rights reserved. 3DEXPERIENCE, the Compass icon and the 3DS logo, CATIA, SOLIDWORKS, ENOVIA, DELMIA, SIMULIA, GEOVIA,

More information

Print Management Cloud

Print Management Cloud Print Management Cloud Version 1.0 Configuration Guide January 2018 www.lexmark.com Contents 2 Contents Change history... 4 Overview... 5 Deployment readiness checklist...6 Getting started...7 Accessing

More information

NAME SYNOPSIS. Perl version documentation - Pod::Parser. Pod::Parser - base class for creating POD filters and translators.

NAME SYNOPSIS. Perl version documentation - Pod::Parser. Pod::Parser - base class for creating POD filters and translators. NAME SYNOPSIS Pod::Parser - base class for creating POD filters and translators use Pod::Parser; package MyParser; @ISA = qw(pod::parser); sub command { my ($parser, $command, $paragraph, $line_num) =

More information

One of the main selling points of a database engine is the ability to make declarative queries---like SQL---that specify what should be done while

One of the main selling points of a database engine is the ability to make declarative queries---like SQL---that specify what should be done while 1 One of the main selling points of a database engine is the ability to make declarative queries---like SQL---that specify what should be done while leaving the engine to choose the best way of fulfilling

More information

CA IdentityMinder. Glossary

CA IdentityMinder. Glossary CA IdentityMinder Glossary 12.6.3 This Documentation, which includes embedded help systems and electronically distributed materials, (hereinafter referred to as the Documentation ) is for your informational

More information

Content Module. ActiveModeler Avantage. Managing Enterprise Documentation. Version 1.2, 6 May KAISHA-Tec What does the Content Module do?

Content Module. ActiveModeler Avantage. Managing Enterprise Documentation. Version 1.2, 6 May KAISHA-Tec What does the Content Module do? ActiveModeler Avantage Managing Enterprise Documentation Content Module User Guide Version 1.2, 6 May 2009 ActiveModeler, ActiveFlow and ActiveModeler Avantage are registered trademarks of KAISHA-Tec Co.

More information

Indian Institute of Technology Kharagpur. PERL Part II. Prof. Indranil Sen Gupta Dept. of Computer Science & Engg. I.I.T.

Indian Institute of Technology Kharagpur. PERL Part II. Prof. Indranil Sen Gupta Dept. of Computer Science & Engg. I.I.T. Indian Institute of Technology Kharagpur PERL Part II Prof. Indranil Sen Gupta Dept. of Computer Science & Engg. I.I.T. Kharagpur, INDIA Lecture 22: PERL Part II On completion, the student will be able

More information

CSCI 4152/6509 Natural Language Processing. Perl Tutorial CSCI 4152/6509. CSCI 4152/6509, Perl Tutorial 1

CSCI 4152/6509 Natural Language Processing. Perl Tutorial CSCI 4152/6509. CSCI 4152/6509, Perl Tutorial 1 CSCI 4152/6509 Natural Language Processing Perl Tutorial CSCI 4152/6509 Vlado Kešelj CSCI 4152/6509, Perl Tutorial 1 created in 1987 by Larry Wall About Perl interpreted language, with just-in-time semi-compilation

More information

with TestComplete 12 Desktop, Web, and Mobile Testing Tutorials

with TestComplete 12 Desktop, Web, and Mobile Testing Tutorials with TestComplete 12 Desktop, Web, and Mobile Testing Tutorials 2 About the Tutorial With TestComplete, you can test applications of three major types: desktop, web and mobile: Desktop applications - these

More information

Getting Started with Web Services

Getting Started with Web Services Getting Started with Web Services Getting Started with Web Services A web service is a set of functions packaged into a single entity that is available to other systems on a network. The network can be

More information

Game keystrokes or Calculates how fast and moves a cartoon Joystick movements how far to move a cartoon figure on screen figure on screen

Game keystrokes or Calculates how fast and moves a cartoon Joystick movements how far to move a cartoon figure on screen figure on screen Computer Programming Computers can t do anything without being told what to do. To make the computer do something useful, you must give it instructions. You can give a computer instructions in two ways:

More information

HOW GEOVIA GEMS DEFINES BLOCK DISCRETIZATION AND BLOCK VARIANCE:

HOW GEOVIA GEMS DEFINES BLOCK DISCRETIZATION AND BLOCK VARIANCE: HOW GEOVIA GEMS DEFINES BLOCK DISCRETIZATION AND BLOCK VARIANCE: EXECUTIVE SUMMARY For confidence and clarity when discussing interpolation results from GEOVIA GEMS, it is important to understand how GEMS

More information

DESIGNER TO ANALYST PROCESS SOLUTIONS Innovate. Evaluate. Validate.

DESIGNER TO ANALYST PROCESS SOLUTIONS Innovate. Evaluate. Validate. DESIGNER TO ANALYST PROCESS SOLUTIONS Innovate. Evaluate. Validate. INNOVATION BY - DRIVEN DESIGN Innovation starts with someone asking, What if? or Why not? Answering these questions with any great certainty

More information

User Scripting April 14, 2018

User Scripting April 14, 2018 April 14, 2018 Copyright 2013, 2018, Oracle and/or its affiliates. All rights reserved. This software and related documentation are provided under a license agreement containing restrictions on use and

More information

TOP 5 TIPS IN GEOVIA SURPAC VOL 1 USEFUL TIPS TO HELP YOU GET THE MOST OUT OF YOUR SOFTWARE

TOP 5 TIPS IN GEOVIA SURPAC VOL 1 USEFUL TIPS TO HELP YOU GET THE MOST OUT OF YOUR SOFTWARE TOP 5 TIPS IN GEOVIA SURPAC VOL 1 USEFUL TIPS TO HELP YOU GET THE MOST OUT OF YOUR SOFTWARE INTRODUCTION GEOVIA Surpac is the world s most popular geology and mine planning software, supporting open pit

More information

Oracle Warehouse Builder 10g Release 2 Integrating Packaged Applications Data

Oracle Warehouse Builder 10g Release 2 Integrating Packaged Applications Data Oracle Warehouse Builder 10g Release 2 Integrating Packaged Applications Data June 2006 Note: This document is for informational purposes. It is not a commitment to deliver any material, code, or functionality,

More information

Mine sequence optimization for Block Caving using concept of best and worst case

Mine sequence optimization for Block Caving using concept of best and worst case Mine sequence optimization for Block Caving using concept of best and worst case Daniel Villa, Principal Consultant, Caving Business Unit, DASSAULT SYSTÈMES GEOVIA White Paper Abstract The generation of

More information

SOLIDWORKS SOLUTIONS ENGINEERING AND DESIGN TOOLS TO DRIVE YOUR BUSINESS

SOLIDWORKS SOLUTIONS ENGINEERING AND DESIGN TOOLS TO DRIVE YOUR BUSINESS SOLIDWORKS SOLUTIONS ENGINEERING AND DESIGN TOOLS TO DRIVE YOUR BUSINESS Powerful, yet simple solutions to help you grow your business SOLIDWORKS design solutions help designers, engineers, and manufacturers

More information

IBM Case Manager Version User's Guide IBM SC

IBM Case Manager Version User's Guide IBM SC IBM Case Manager Version 5.3.3 User's Guide IBM SC19-3274-10 IBM Case Manager Version 5.3.3 User's Guide IBM SC19-3274-10 This edition applies to Version 5 Release 3 Modification 3 of IBM Case Manager

More information

Parser Design. Neil Mitchell. June 25, 2004

Parser Design. Neil Mitchell. June 25, 2004 Parser Design Neil Mitchell June 25, 2004 1 Introduction A parser is a tool used to split a text stream, typically in some human readable form, into a representation suitable for understanding by a computer.

More information

SOLIDWORKS TECHNICAL COMMUNICATIONS

SOLIDWORKS TECHNICAL COMMUNICATIONS SOLIDWORKS TECHNICAL COMMUNICATIONS ADDING A NEW DIMENSION TO YOUR TECHNICAL COMMUNICATION DELIVERABLES POWERFUL, YET SIMPLE SOLUTIONS TO HELP YOU GROW YOUR BUSINESS You put significant time and money

More information

SOLIDWORKS TECHNICAL COMMUNICATIONS

SOLIDWORKS TECHNICAL COMMUNICATIONS SOLIDWORKS TECHNICAL COMMUNICATIONS ADDING A NEW DIMENSION TO YOUR TECHNICAL COMMUNICATION DELIVERABLES POWERFUL, YET SIMPLE SOLUTIONS TO HELP YOU GROW YOUR BUSINESS You put significant time and money

More information

UNIT-IV BASIC BEHAVIORAL MODELING-I

UNIT-IV BASIC BEHAVIORAL MODELING-I UNIT-IV BASIC BEHAVIORAL MODELING-I CONTENTS 1. Interactions Terms and Concepts Modeling Techniques 2. Interaction Diagrams Terms and Concepts Modeling Techniques Interactions: Terms and Concepts: An interaction

More information

H2 Spring B. We can abstract out the interactions and policy points from DoDAF operational views

H2 Spring B. We can abstract out the interactions and policy points from DoDAF operational views 1. (4 points) Of the following statements, identify all that hold about architecture. A. DoDAF specifies a number of views to capture different aspects of a system being modeled Solution: A is true: B.

More information

SOLIDWORKS ELECTRICAL SUITE

SOLIDWORKS ELECTRICAL SUITE SOLIDWORKS ELECTRICAL SUITE SEAMLESS INTEGRATION OF ELECTRICAL AND MECHANICAL DESIGN INTEGRATED ELECTRICAL SYSTEM DESIGN SOLIDWORKS Electrical Solutions simplify electrical product design with specific

More information

CSE 214 Computer Science II Introduction to Tree

CSE 214 Computer Science II Introduction to Tree CSE 214 Computer Science II Introduction to Tree Fall 2017 Stony Brook University Instructor: Shebuti Rayana shebuti.rayana@stonybrook.edu http://www3.cs.stonybrook.edu/~cse214/sec02/ Tree Tree is a non-linear

More information

Trees. Chapter 6. strings. 3 Both position and Enumerator are similar in concept to C++ iterators, although the details are quite different.

Trees. Chapter 6. strings. 3 Both position and Enumerator are similar in concept to C++ iterators, although the details are quite different. Chapter 6 Trees In a hash table, the items are not stored in any particular order in the table. This is fine for implementing Sets and Maps, since for those abstract data types, the only thing that matters

More information

Network Programmability with Cisco Application Centric Infrastructure

Network Programmability with Cisco Application Centric Infrastructure White Paper Network Programmability with Cisco Application Centric Infrastructure What You Will Learn This document examines the programmability support on Cisco Application Centric Infrastructure (ACI).

More information

CGI Subroutines User's Guide

CGI Subroutines User's Guide FUJITSU Software NetCOBOL V11.0 CGI Subroutines User's Guide Windows B1WD-3361-01ENZ0(00) August 2015 Preface Purpose of this manual This manual describes how to create, execute, and debug COBOL programs

More information

IBM Best Practices Working With Multiple CCM Applications Draft

IBM Best Practices Working With Multiple CCM Applications Draft Best Practices Working With Multiple CCM Applications. This document collects best practices to work with Multiple CCM applications in large size enterprise deployment topologies. Please see Best Practices

More information

CHAPTER TWO STEP-UP TO SIMULATION:

CHAPTER TWO STEP-UP TO SIMULATION: CHAPTER TWO STEP-UP TO SIMULATION: TACKLING COMPLEX ENGINEERING CHALLENGES CHAPTER TWO STEP UP TO A SMARTER WAY TO DESIGN Contrary to popular belief, simulation is one of the simplest and easiest ways

More information

Xerox ConnectKey for DocuShare Installation and Setup Guide

Xerox ConnectKey for DocuShare Installation and Setup Guide Xerox ConnectKey for DocuShare Installation and Setup Guide 2013 Xerox Corporation. All rights reserved. Xerox, Xerox and Design, ConnectKey, DocuShare, and Xerox Extensible Interface Platform are trademarks

More information

AADL Graphical Editor Design

AADL Graphical Editor Design AADL Graphical Editor Design Peter Feiler Software Engineering Institute phf@sei.cmu.edu Introduction An AADL specification is a set of component type and implementation declarations. They are organized

More information

Business Intelligence and Reporting Tools

Business Intelligence and Reporting Tools Business Intelligence and Reporting Tools Release 1.0 Requirements Document Version 1.0 November 8, 2004 Contents Eclipse Business Intelligence and Reporting Tools Project Requirements...2 Project Overview...2

More information

SOLIDWORKS ELECTRICAL SUITE

SOLIDWORKS ELECTRICAL SUITE SOLIDWORKS ELECTRICAL SUITE SEAMLESS INTEGRATION OF ELECTRICAL AND MECHANICAL DESIGN INTEGRATED ELECTRICAL SYSTEM DESIGN SOLIDWORKS Electrical Solutions simplify electrical product design with specific

More information

CS/IT 114 Introduction to Java, Part 1 FALL 2016 CLASS 2: SEP. 8TH INSTRUCTOR: JIAYIN WANG

CS/IT 114 Introduction to Java, Part 1 FALL 2016 CLASS 2: SEP. 8TH INSTRUCTOR: JIAYIN WANG CS/IT 114 Introduction to Java, Part 1 FALL 2016 CLASS 2: SEP. 8TH INSTRUCTOR: JIAYIN WANG 1 Notice Class Website http://www.cs.umb.edu/~jane/cs114/ Reading Assignment Chapter 1: Introduction to Java Programming

More information

XMLInput Application Guide

XMLInput Application Guide XMLInput Application Guide Version 1.6 August 23, 2002 (573) 308-3525 Mid-Continent Mapping Center 1400 Independence Drive Rolla, MO 65401 Richard E. Brown (reb@usgs.gov) Table of Contents OVERVIEW...

More information

NAME SYNOPSIS. Perl version documentation - Pod::Parser. Pod::Parser - base class for creating POD filters and translators.

NAME SYNOPSIS. Perl version documentation - Pod::Parser. Pod::Parser - base class for creating POD filters and translators. NAME SYNOPSIS Pod::Parser - base class for creating POD filters and translators use Pod::Parser; package MyParser; @ISA = qw(pod::parser); sub command { my ($parser, $command, $paragraph, $line_num) =

More information

The Peter Pan Complex: Determining when a SharePoint site should grow into a hub site. Nashville SUG January 2019 Sarah Haase

The Peter Pan Complex: Determining when a SharePoint site should grow into a hub site. Nashville SUG January 2019 Sarah Haase The Peter Pan Complex: Determining when a SharePoint site should grow into a hub site Nashville SUG January 2019 Sarah Haase Agenda Information architecture in a flat world What are hub sites? Hub site

More information

ControlPoint. Managing ControlPoint Users, Permissions, and Menus. February 05,

ControlPoint. Managing ControlPoint Users, Permissions, and Menus. February 05, Managing Users, Permissions, and Menus February 05, 2018 www.metalogix.com info@metalogix.com 202.609.9100 Copyright International GmbH., 2008-2018 All rights reserved. No part or section of the contents

More information

Using the e- Science Central REST API

Using the e- Science Central REST API Using the e- Science Central REST API API Client version 3.0 Page 1 of 43 Using the API The esc API is broken into a number of sections, each of which allow you to access a specific piece of system functionality.

More information

Software Development 1 Advanced > Task X: NetBeans IDE

Software Development 1 Advanced > Task X: NetBeans IDE 0415765 Introduction NetBeans IDE 3.6, a free open source development environment for Java developers, is a highly productive tool for developing applications based on Java technology, from standalone

More information

Working with the Rules Engine

Working with the Rules Engine Understanding the Rules Engine This section discusses: Rules Engine components. A high level description of the Rules Engine. Rules Engine Manager and Entity Registry. The Rules Engine provides: a non-programmer

More information

COMS 3101 Programming Languages: Perl. Lecture 6

COMS 3101 Programming Languages: Perl. Lecture 6 COMS 3101 Programming Languages: Perl Lecture 6 Fall 2013 Instructor: Ilia Vovsha http://www.cs.columbia.edu/~vovsha/coms3101/perl Lecture Outline Concepts: Subroutine references Symbolic references Saving

More information

Content Sharing and Reuse in PTC Integrity Lifecycle Manager

Content Sharing and Reuse in PTC Integrity Lifecycle Manager Content Sharing and Reuse in PTC Integrity Lifecycle Manager Author: Scott Milton 1 P age Table of Contents 1. Abstract... 3 2. Introduction... 4 3. Document Model... 5 3.1. Reference Modes... 6 4. Reusing

More information

By default, optional warnings are disabled, so any legacy code that doesn't attempt to control the warnings will work unchanged.

By default, optional warnings are disabled, so any legacy code that doesn't attempt to control the warnings will work unchanged. SYNOPSIS use warnings; no warnings; use warnings "all"; no warnings "all"; use warnings::register; if (warnings::enabled()) warnings::warn("some warning"); if (warnings::enabled("void")) warnings::warn("void",

More information

Teiid Designer User Guide 7.7.0

Teiid Designer User Guide 7.7.0 Teiid Designer User Guide 1 7.7.0 1. Introduction... 1 1.1. What is Teiid Designer?... 1 1.2. Why Use Teiid Designer?... 2 1.3. Metadata Overview... 2 1.3.1. What is Metadata... 2 1.3.2. Editing Metadata

More information

Configuring the Android Manifest File

Configuring the Android Manifest File Configuring the Android Manifest File Author : userone What You ll Learn in This Hour:. Exploring the Android manifest file. Configuring basic application settings. Defining activities. Managing application

More information

Business Processes and Rules: Siebel Enterprise Application Integration. Siebel Innovation Pack 2013 Version 8.1/8.

Business Processes and Rules: Siebel Enterprise Application Integration. Siebel Innovation Pack 2013 Version 8.1/8. Business Processes and Rules: Siebel Enterprise Application Integration Siebel Innovation Pack 2013 September 2013 Copyright 2005, 2013 Oracle and/or its affiliates. All rights reserved. This software

More information

Overview of the Ruby Language. By Ron Haley

Overview of the Ruby Language. By Ron Haley Overview of the Ruby Language By Ron Haley Outline Ruby About Ruby Installation Basics Ruby Conventions Arrays and Hashes Symbols Control Structures Regular Expressions Class vs. Module Blocks, Procs,

More information

CS143 Handout 05 Summer 2011 June 22, 2011 Programming Project 1: Lexical Analysis

CS143 Handout 05 Summer 2011 June 22, 2011 Programming Project 1: Lexical Analysis CS143 Handout 05 Summer 2011 June 22, 2011 Programming Project 1: Lexical Analysis Handout written by Julie Zelenski with edits by Keith Schwarz. The Goal In the first programming project, you will get

More information

Programming in Visual Basic with Microsoft Visual Studio 2010

Programming in Visual Basic with Microsoft Visual Studio 2010 Programming in Visual Basic with Microsoft Visual Studio 2010 Course 10550; 5 Days, Instructor-led Course Description This course teaches you Visual Basic language syntax, program structure, and implementation

More information

introduction to records in touchdevelop

introduction to records in touchdevelop introduction to records in touchdevelop To help you keep your data organized, we are introducing records in release 2.8. A record stores a collection of named values called fields, e.g., a Person record

More information

Client Side JavaScript and AJAX

Client Side JavaScript and AJAX Client Side JavaScript and AJAX Client side javascript is JavaScript that runs in the browsers of people using your site. So far all the JavaScript code we've written runs on our node.js server. This is

More information

IT441. Subroutines. (a.k.a., Functions, Methods, etc.) DRAFT. Network Services Administration

IT441. Subroutines. (a.k.a., Functions, Methods, etc.) DRAFT. Network Services Administration IT441 Network Services Administration Subroutines DRAFT (a.k.a., Functions, Methods, etc.) Organizing Code We have recently discussed the topic of organizing data (i.e., arrays and hashes) in order to

More information

DATABASE AUTOMATION USING VBA (ADVANCED MICROSOFT ACCESS, X405.6)

DATABASE AUTOMATION USING VBA (ADVANCED MICROSOFT ACCESS, X405.6) Technology & Information Management Instructor: Michael Kremer, Ph.D. Database Program: Microsoft Access Series DATABASE AUTOMATION USING VBA (ADVANCED MICROSOFT ACCESS, X405.6) AGENDA 3. Executing VBA

More information

fe-safe 2017 EXTERNAL MATERIAL DATABASE

fe-safe 2017 EXTERNAL MATERIAL DATABASE fe-safe 2017 EXTERNAL MATERIAL DATABASE Contents FE-SAFE EXTERNAL MATERIAL DATABASE... 1 CONTENTS... 3 1 INTRODUCTION TO THE FE-SAFE EXTERNAL MATERIAL DATABASE... 5 1.1 ABOUT THE DATABASE... 5 1.2 ABOUT

More information

Unit 1: Working With Tables

Unit 1: Working With Tables Unit 1: Working With Tables Unit Overview This unit covers the basics of working with Tables and the Table wizard. It does not include working with fields, which is covered in Units 3 and 4. It is divided

More information

SOLIDWORKS ELECTRICAL SUITE

SOLIDWORKS ELECTRICAL SUITE SUPPOR T I NG EX C ELLENC E SOLIDWORKS ELECTRICAL SUITE SEAMLESS INTEGRATION OF ELECTRICAL AND MECHANICAL DESIGN INTEGRATED ELECTRICAL SYSTEM DESIGN SOLIDWORKS Electrical Solutions simplify electrical

More information

PROGRAMMING IN VISUAL BASIC WITH MICROSOFT VISUAL STUDIO Course: 10550A; Duration: 5 Days; Instructor-led

PROGRAMMING IN VISUAL BASIC WITH MICROSOFT VISUAL STUDIO Course: 10550A; Duration: 5 Days; Instructor-led CENTER OF KNOWLEDGE, PATH TO SUCCESS Website: PROGRAMMING IN VISUAL BASIC WITH MICROSOFT VISUAL STUDIO 2010 Course: 10550A; Duration: 5 Days; Instructor-led WHAT YOU WILL LEARN This course teaches you

More information

Siebel Application Deployment Manager Guide. Version 8.0, Rev. A April 2007

Siebel Application Deployment Manager Guide. Version 8.0, Rev. A April 2007 Siebel Application Deployment Manager Guide Version 8.0, Rev. A April 2007 Copyright 2005, 2006, 2007 Oracle. All rights reserved. The Programs (which include both the software and documentation) contain

More information

Shell Scripting. Todd Kelley CST8207 Todd Kelley 1

Shell Scripting. Todd Kelley CST8207 Todd Kelley 1 Shell Scripting Todd Kelley kelleyt@algonquincollege.com CST8207 Todd Kelley 1 If we have a set of commands that we want to run on a regular basis, we could write a script A script acts as a Linux command,

More information