Pieces of the API Puzzle: Leveraging Typed Data in Drupal 8

Size: px
Start display at page:

Download "Pieces of the API Puzzle: Leveraging Typed Data in Drupal 8"

Transcription

1 Pieces of the API Puzzle: Leveraging Typed Data in Drupal 8 Matthew Radcliffe pieces-api-puzzle-leveraging-typed-data-drupal-8

2 Composite Data Types Any data type made up of primitive and other composite data types i.e. structs, classes. Associative arrays Loosely-typed arrays to describe all of the things. Entity API Metadata Controllers Rules

3 Composite Data Types in Drupal 8 Typed Data is a meta for composite data types that we need in Drupal that are not otherwise defined. Strongly typed interfaces that can be passed to various subsystems in Drupal such as Serialization. Any class itself is composite data type. The Plugin API for instance is a way of describing composite data types. For now though Typed Data.

4 Use Cases for Typed Data Data Types Describe data defined elsewhere i.e. schemas from external systems. Education, Media, etc Define special snowflake data types that do not require entity storage.

5 Use Case: Xero Integration Xero accounting platform with a Restful API. Post invoices from Open Atrium cases. Invoice done. Click send. Back to coding. Post bank transactions from Commerce/Ubercart payment transactions. Auto-matching Bank Statements to Bank Transactions is huge cost savings for a small company. Do not need to store data twice. It s already stored offsite.

6 Escaping Procedural Reality Make OAuth signed requests via drupal_http_request or straight up Curl (xero_query). Validation via Drupal form validation that does not fit Web Services much at all (xero form helper). Model data as associative arrays or strongly-coupled entities (xero_make). And sometimes we have to maintain external PHP libraries we do not want to maintain

7 116 $filterid = ( count($arguments) > 0 )? strip_tags(strval($arguments[0])) : false; 117 if(isset($arguments[1])) $modified_after = ( count($arguments) > 1 )? str_replace( 'X','T', date( 'Y-m-dXH:i:s', strtotime($arguments[1])) ) : false; 118 if(isset($arguments[2])) $where = ( count($arguments) > 2 )? $arguments[2] : false; 119 if ( is_array($where) && (count($where) > 0) ) { 120 $temp_where = ''; 121 foreach ( $where as $wf => $wv ) { 122 if ( is_bool($wv) ) { 123 $wv = ( $wv )? "%3d%3dtrue" : "%3d%3dfalse"; 124 } else if ( is_array($wv) ) { 125 if ( is_bool($wv[1]) ) { 126 $wv = ($wv[1])? rawurlencode($wv[0]). "true" : rawurlencode($wv[0]). "false" ; 127 } else { 128 $wv = rawurlencode($wv[0]). "%22{$wv[1]}%22" ; 129 } 130 } else { 131 $wv = "%3d%3d%22$wv%22"; 132 } 133 $temp_where.= "%26%26$wf$wv"; 134 } 135 $where = strip_tags(substr($temp_where, 6)); 136 } else { 137 $where = strip_tags(strval($where)); 138 } 139 $order = ( count($arguments) > 3 )? strip_tags(strval($arguments[3])) : false; 140 $acceptheader = (!empty( $arguments[4] ) )? $arguments[4] : ''; 141 $method = $methods_map[$name]; 142 $xero_url = self::endpoint. $method; 143 if ( $filterid ) { 144 $xero_url.= "/$filterid"; 145 } 146 if ( isset($where) ) { 147 $xero_url.= "?where=$where"; 148 } 149 if ( $order ) { 150 $xero_url.= "&order=$order"; 151 } 152 $req = OAuthRequest::from_consumer_and_token( $this->consumer, $this->token, 'GET',$xero_url); 153 $req->sign_request($this->signature_method, $this->consumer, $this->token); 154 $ch = curl_init();

8 Drupal 8 and Packagist Provide Guzzle 3* OAuth 1.0 plugin XeroClient via XeroBundle The Composer problem. * At the time I stared through the Looking Glass, Guzzle 3 was the version in core. Guzzle 6 is included in Drupal 8 core at the time of writing this session. ** Core broke everything recently so I have to re-evaluate and figure out if I am permanently forking this library. Welp.

9 Getting off the Island The Dependency Nightmare Composer, Autoloaders, Composer Manager, Packaging. Libraries and duplicate code Some other better solution..? GitHub culture

10 Knowing the Drupal 8 API Dependency Injection Plugin API Field API, Entity API Serialization module Serializer component

11 So how do I get there? Goal: Make HTTP Requests to integrate with external system Need: Describe Xero types into something Drupal understands. Primitive and Composite data types.

12 Is Typed Data a Good Fit? Why Typed Data? Typed Data API gets all of the things, and is injectable into Forms, Route Controllers, Normalizers, etc So that can work well with Core and Contrib modules such as Serialization and Rules. Are these composite data types entities?

13 Xero Types Accounts Invoices Payments Credit Notes Bank Transactions Amount Line Items and more Contacts Users

14 Xero Types Accounts Invoices Payments Credit Notes Bank Transactions Amount Line Items and more Contacts Users

15 Xero Types Accounts Invoices Payments Credit Notes Bank Transactions Amount Line Items and more Contacts Users

16 Xero Types Accounts Invoices Payments Credit Notes Bank Transactions Amount Line Items and more Contacts Users

17 How to Read a Map Typed Data API provides most of these, yay! There s one complex data type that is not an entity. Map: the new associative array. Next challenge: how to create this elusive data type class.

18 Typed Data API Docs When I started, there was no documentation: Doc Page: API Topic: core.api.php/group/typed_data/8

19 Data Type Plugin Data Type is a plugin class. Extends TypedData. Plugin? What s that? All the things. Data Type Constructor usually inherited. Sets property values according to definition. Add useful methods to your class.

20 1 <?php 2 /** 3 4 * Provides \Drupal\xero\Plugin\DataType\Payment. 5 */ 6 7 namespace Drupal\xero\Plugin\DataType; 8 9 /** annotation type 10 * Xero Payment type. 11 * plugin id * id = "xero_payment", data definition 14 * label Payment"), 15 * definition_class = "\Drupal\xero\TypedData\Definition\PaymentDefinition" 16 * ) 17 */ 18 class Payment extends XeroTypeBase { static public $guid_name = 'PaymentID'; 21 static public $xero_name = 'Payment'; 22 static public $plural_name = 'Payments'; 23 static public $label = 'PaymentID'; }

21 Data Definitions Complex data type needs definition classes to describe its properties (or child data types). Symfony 2 Constraints Label Property data type When I began, definitions were associative arrays. This kind of still exists. The static create method takes an array as a parameter, not the class.

22 Data Definition 15 class PaymentDefinition extends ComplexDataDefinitionBase { public function getpropertydefinitions() { 23 if (!isset($this->propertydefinitions)) { 24 $info = &$this->propertydefinitions; $info['invoice'] = DataDefinition::create( xero_invoice') ->setrequired(true)->setlabel('invoice'); 27 $info['account'] = DataDefinition::create( xero_account') ->setrequired(true)->setlabel('account'); 29 $info['date'] = DataDefinition::create( string') ->setrequired(true)->setlabel('date'); 30 $info['amount'] = DataDefinition::create( float') ->setrequired(true)->setlabel('amount'); 31 $info['currencyrate'] = DataDefinition::create( string') ->setlabel('currency rate'); 32 $info['reference'] = DataDefinition::create( string') ->setlabel('reference'); 33 $info['isreconciled'] = DataDefinition::create( boolean') ->setlabel('is reconciled?'); 34 } 35 return $this->propertydefinitions; 36 } 37 }

23 List Data Definition Data definitions can be lists of data types i.e. multiple values or an indexed array equivalent. This is important for Xero because the API returns a list of items in addition to other odd types like Tracking Categories, Line Items, and Addresses.

24 Exercise: Spotify Album Track[] Artist[] Type Name

25 Album AlbumDefinition propertydefinitions name DataDefinition string type DataDefinition string artists ListDataDefinition Artist ArtistDefinition name DataDefinition string

26 Making Use of All of This Composite data types defined as Typed Data Data Types and Data Definitions. Normalization service that helps to transform Xero API into our data types and vice versa. So now we can use Serializer and Guzzle in a consistent and maintainable way. XeroQuery used by a Form to display a list of Accounts.

27 (De)normalization Normalizer classes transform data into Typed Data and vice versa. Normalization is obscured from use because it runs as part of serialization. Entity normalization is handled already. $context was a difficult parameter to understand. Typed Data Manager use is recursive and confusing.

28 Defining a Normalizer Normalization classes must be defined as services in the service container. These are also tagged so that they go through a container compiler pass. xero.services.yml services: xero.normalizer: class: Drupal\xero\Normalizer\XeroNormalizer arguments: ['@typed_data_manager'] tags: - { name: normalizer }

29 18 class XeroNormalizer extends ComplexDataNormalizer implements DenormalizerInterface { protected $supportedinterfaceorclass = 'Drupal\xero\TypedData\XeroTypeInterface'; public function construct(typeddatamanager $typed_data_manager) { 23 $this->typeddatamanager = $typed_data_manager; 24 } public function denormalize($data, $class, $format = NULL, array $context = array()) { 63 if (!isset($context['plugin_id']) empty($context['plugin_id'])) { 64 throw new UnexpectedValueException('Plugin id parameter must be included in context.'); 65 } $name = $class::$xero_name; 68 $plural_name = $class::$plural_name; if (count(array_filter(array_keys($data[$plural_name][$name]), 'is_string'))) { 72 $data[$plural_name][$name] = array($data[$plural_name][$name]); 73 } $list_definition = $this->typeddatamanager ->createlistdatadefinition($context['plugin_id']); 76 $items = $this->typeddatamanager->create($list_definition, $data[$plural_name] [$name]); return $items; 79 } 80

30 DefaultSettingsForm

31 24 class DefaultSettingsForm extends ConfigFormBase implements ContainerInjectionInterface { public function buildform(array $form, FormStateInterface $form_state) { // Get the configuration from ConfigFormBase::config(). 67 $config = self::config('xero.settings'); $account_options = array(); try { 72 $context = array('plugin_id' => 'xero_account'); 73 $accounts = $this->query 74 ->settype($context['plugin_id']) 75 ->setmethod('get') 76 ->setformat('xml') 77 ->execute(); foreach ($accounts as $account) { 80 // Bank accounts do not have a code, exclude them. 81 if ($account->get('code')->getvalue()) { 82 $account_options[$account->get('code')->getvalue()] = $account->get( Name') ->getvalue(); 83 } 84 } 85 } 86 catch (RequestException $e) { 87 $this->logger->error('%message: %response', array('%message' => $e->getmessage(), '%response' => $e->getresponse()->getbody(true)));

32 XeroQuery

33 102 public function construct( $client, Serializer $serializer, TypedDataManager $typed_data, LoggerChannelFactoryInterface $logger_factory) { 103 $this->client = $client; 104 $this->serializer = $serializer; 105 $this->typed_data = $typed_data; 106 $this->logger = $logger_factory->get('xero'); 107 }

34 459 public function execute() { 460 try { 461 $this->validate(); $this->explodeconditions(); $data_class = $this->type_definition['class']; 470 $endpoint = $data_class::$plural_name; 471 $context = array('plugin_id' => $this->type); if ($this->data!== NULL) { 474 $this->options['body'] = $this->serializer->serialize($this->data, $this->format, $context); 475 } $request = $this->client->{$this->method}($endpoint, $this->options['headers']); $response = $request->send(); 488 $data = $this->serializer->deserialize($response->getbody(true), $data_class, $this->format, $context); return $data; 491 }

35 * // Get an autocomplete for account. * $definition = \Drupal::service('typed_data_manager')- >createdefinition('xero_account'); * $form['account'] = $formbuilder->getelementfordefinition($definition, 'AccountID'); */ XeroFormBuilder

36 /** * The Xero form builder service provides methods to create form elements * from Xero data types defined in Drupal. * * Example usage: * // Get form elements required for a line item. * $formbuilder = XeroFormBuilder \Drupal::service('xero.form_builder'); * $form['lineitems'][] = $formbuilder->getelementfor('xero_line_item'); * * // Get an autocomplete for account. * $definition = \Drupal::service( typed_data_manager') * ->createdefinition('xero_account'); * $form['account'] = $formbuilder * ->getelementfordefinition($definition, 'AccountID'); */

37 public function getelementfor($plugin_id, $property_name = '') { $element = []; try { $definition = $this->typeddatamanager->createdatadefinition($plugin_id); '', if (is_subclass_of($definition, '\Drupal\Core\TypedData\ComplexDataDefinitionBase')) { if (empty($property_name)) { // Get all elements for the definition. $element = $this->getelementsfordefinition($definition); } else { // Get the element for the property of the definition. $element = $this->getelementfordefinition($definition, $property_name); } } elseif ($definition instanceof ListDataDefinitionInterface) { $element = $this->getelementsforlistdefinition($definition); } else { // Get the element for the definition. $element_type = $this->getelementtypefromdefinition($definition); $element = [ '#type' => $element_type, '#title' => $definition->getlabel(), '#description' => $definition->getdescription()? $definition->getdescription() : } ]; $element += $this->getadditionalproperties($element_type, $definition);

38 protected function getelementtypefromdefinition(datadefinitioninterface $definition) { $type = 'textfield'; if ($definition->getdatatype() === 'boolean') { $type = 'checkbox'; } elseif ($definition->getconstraint('choice')) { $type = 'select'; } } return $type;

39 protected function getadditionalproperties($type, DataDefinitionInterface $definition, $parent_type = '') { $properties = []; { if ($type === 'select') { // Add the Constraint options to the select element. $properties['#options'] = $definition->getconstraint('choice')['choices']; } elseif (array_key_exists('xeroguidconstraint', $definition->getconstraints())) } // Add an auto-complete path for data types with guids. $properties['#autocomplete_route_name'] = 'xero.autocomplete'; $properties['#autocomplete_route_parameters'] = ['type' => $parent_type]; if ($definition->isrequired()) { $element['#required'] = TRUE; } if ($definition->isreadonly()) { $element['#disabled'] = TRUE; } } } return $properties;

40 Typed Data Summary Data Type and Data Definition Normalizer service Inject Typed Data Manager into forms, controllers, and services.

41 Typed Data and PHPUnit Unit tests are awesome and fast, but Typed Data Manager is big and scary. :( Typed Data calls itself so mocking is not straight-forward. :( Need to mock the service container. :( What is actually necessary for decent code coverage and analysis? Composer, GitHub and Drupal are utterly broken as of rc1 on Travis CI for automated testing.

42 PHPUnit I like seeing pretty coverage and complexity graphs.

43 PHPUnit I like seeing pretty coverage and complexity graphs.

44

45 PHPUnit Usefulness DataDefinitionInterface::getPropertyDefinitions Easy to get coverage for this method as it s only returning an array of more data definitions. Coverage and testing here does not provide much value other than coving in my report in a pretty green color.

46 15 class PaymentDefinition extends ComplexDataDefinitionBase { public function getpropertydefinitions() { 23 if (!isset($this->propertydefinitions)) { 24 $info = &$this->propertydefinitions; $info['invoice'] = DataDefinition::create( xero_invoice') ->setrequired(true)->setlabel('invoice'); 27 $info['account'] = DataDefinition::create( xero_account') ->setrequired(true)->setlabel('account'); 29 $info['date'] = DataDefinition::create( string') ->setrequired(true)->setlabel('date'); 30 $info['amount'] = DataDefinition::create( float') ->setrequired(true)->setlabel('amount'); 31 $info['currencyrate'] = DataDefinition::create( string') ->setlabel('currency rate'); 32 $info['reference'] = DataDefinition::create( string') ->setlabel('reference'); 33 $info['isreconciled'] = DataDefinition::create( boolean') ->setlabel('is reconciled?'); 34 } 35 return $this->propertydefinitions; 36 } 37 }

47 Mocking Typed Data Manager The static create method on TypedData classes will call TypedDataManager: Mock objects cannot simply return a single known value for complex data types. Mock objects must carefully re-construct the order of how create will be called on for every definition in a complex data definition.

48 98 public function createinstance($data_type, array $configuration = array()) { 99 $data_definition = $configuration['data_definition']; 100 $type_definition = $this->getdefinition($data_type); if (!isset($type_definition)) { 103 throw new \InvalidArgumentException("Invalid data type '$data_type' has been given"); 104 } // Allow per-data definition overrides of the used classes, i.e. take over 107 // classes specified in the type definition. 108 $class = $data_definition->getclass(); if (!isset($class)) { 111 throw new PluginException(sprintf('The plugin (%s) did not specify an instance class.', $data_type)); 112 } 113 return $class::createinstance($data_definition, $configuration['name'], $configuration['parent']); 114 }

49 30 public function setup() { 31 // Typed Data Manager setup. 32 $this->typeddatamanager = $this->getmockbuilder('\drupal\core\typeddata \TypedDataManager') 33 ->disableoriginalconstructor() 34 ->getmock(); $this->typeddatamanager->expects($this->any()) 37 ->method('getdefinition') 38 ->with(static::xero_type, TRUE) 39 ->will($this->returnvalue(['id' => static::xero_type, 'definition class' => static::xero_definition_class])); 40 $this->typeddatamanager->expects($this->any()) 41 ->method('getdefaultconstraints') 42 ->willreturn([]); // Validation constraint manager setup. 45 $validation_constraint_manager = $this->getmockbuilder( \Drupal\Core \Validation\ConstraintManager') 46 ->disableoriginalconstructor() 47 ->getmock(); 48 $validation_constraint_manager->expects($this->any()) 49 ->method('create') 50 ->willreturn([]); 51 $this->typeddatamanager->expects($this->any()) 52 ->method('getvalidationconstraintmanager') 53 ->willreturn($validation_constraint_manager); 54

50 51 $this->typeddatamanager->expects($this->any()) 52 ->method('getvalidationconstraintmanager') 53 ->willreturn($validation_constraint_manager); // Mock the container. 56 $container = new ContainerBuilder(); 57 $container->set('typed_data_manager', $this->typeddatamanager); 58 \Drupal::setContainer($container); // Create data definition 61 $definition_class = static::xero_definition_class; 62 $this->datadefinition = $definition_class::create(static::xero_type); 63 } }

51 51 /** 52 * Test getphone method. 53 */ 54 public function testgetphonenumber() { 55 $string_def = DataDefinition::create('string'); 56 $country = new StringData($string_def); 57 $area = new StringData($string_def); 58 $number = new StringData($string_def); $this->typeddatamanager->expects($this->any()) 61 ->method('getpropertyinstance') 62 ->with($this->phone, $this->callback(function($subject) { 63 return in_array($subject, array( PhoneCountryCode, 'PhoneAreaCode', 'PhoneNumber')); 64 })) 65 ->will($this->onconsecutivecalls($country, $area, $number)); $this->phone->set('phonecountrycode', '01'); 68 $this->phone->set('phoneareacode', '805'); 69 $this->phone->set('phonenumber', ' '); $this->assertequals(' ', $this->phone->getphone()); 72 } 73 }

52 A poem about mocking the container What I learn not to do I resign myself to that fate. Besides, core does it too. So please do not hate this container so small is not actually in my app at all. I do not wish to load, or directly invoke the container, to get variables into my code. But to be a better maintainer, forgive that what I leverage. All I want is pretty coverage.

53 Re: Unit Tests, Mocking and Typed Data You re crazy! -webçick (June 2015)

54 Why Go Through All of That? Previous code was not testable Ever written an automated test for an external API? In a public, open source repository? Loosely-coupled and stricter typing is better. Better fit in Drupal 8: Serialization, Rules, Services Education (Score, Grade, etc )

55 What else..? The floor is open to ask, discuss or share: Typed Data use cases Questions Other Drupal 8 APIs that relate Matthew Radcliffe

Mocking Drupal: Unit Testing in Drupal 8. Matthew Radcliffe

Mocking Drupal: Unit Testing in Drupal 8. Matthew Radcliffe Mocking Drupal: Unit Testing in Drupal 8 Matthew Radcliffe mradcliffe @mattkineme Spoilers Quality Assurance PHPUnit Mocking Drupal things Quality Assurance Prevent defects from making it to the customer:

More information

DRUPAL CON NASHVILLE 2018 DRUPALCON NASHVILLE

DRUPAL CON NASHVILLE 2018 DRUPALCON NASHVILLE DRUPAL CON NASHVILLE 2018 DRUPALCON NASHVILLE DRUPAL CON NASHVILLE 2018 Drupal 8: Let s dive into PHPUnit testing. Drupal 8: Let s dive into PHPUnit testing. Sugandh Khanna Srijan, INDIA Drupal CON NASHVILLE

More information

Because programming is hard

Because programming is hard Text Because programming is hard Some of this will not make sense to you Some applications will resist all attempts to test Testing is good Testable applications are better Write a script that will

More information

Project Name Documentation

Project Name Documentation Project Name Documentation Release 0.1 Copyright holder December 01, 2016 Contents 1 Introduction 3 2 Design 5 3 Installation 7 4 The SDK 9 4.1 Phraseanet SDK client..........................................

More information

Vijaya Chandran

Vijaya Chandran Testing Vijaya Chandran Mani @vijaycs85 Overview Introduction Types Sample tests Lessons learned 1. Introduction What? Code to test code by coder for coder Lives and runs as part of project code base Quality

More information

Advanced Web Services with JSON API

Advanced Web Services with JSON API Advanced Web Services with JSON API HOWDY! I am Mateu I am here because I am a decoupling nerd You can find me at @e0ipso You will learn about JSON API Drupal module Why use it? What are the limitations?

More information

Test all the things! Get productive with automated testing in Drupal 8. Sam Becker

Test all the things! Get productive with automated testing in Drupal 8. Sam Becker Test all the things! Get productive with automated testing in Drupal 8 Sam Becker WHO AM I? Sam152 on drupal.org Back-end Drupal dev for PreviousNext Core contributor Author of 50+ contributed projects

More information

Composer and Drupal. CIDUG Meeting December 13, 2018 John Rearick

Composer and Drupal. CIDUG Meeting December 13, 2018 John Rearick Composer and Drupal CIDUG Meeting December 13, 2018 John Rearick * Similar to other dependency managers such as: yum, apt, brew, macports, npm, pip, etc. * Helps manage dependency hell. * Lots of dependencies

More information

www.drupaleurope.org image No photos please Responsible disclosure, cross-project collaboration, and Drupal 8 security xjm Drupal & Technology http://bit.ly/drupal-europe-d8-security 17/3/2018 Drupal +

More information

USER MANUAL Setting Up Fooman Connect: Xero

USER MANUAL Setting Up Fooman Connect: Xero USER MANUAL Setting Up Fooman Connect: Xero This user manual will take you through the set up process for Fooman Connect: Xero. The set up video provides screencasts and takes you through a simplified

More information

Contents. Figures. Tables. Examples. Foreword. Preface. 1 Basics of Java Programming 1. xix. xxi. xxiii. xxvii. xxix

Contents. Figures. Tables. Examples. Foreword. Preface. 1 Basics of Java Programming 1. xix. xxi. xxiii. xxvii. xxix PGJC4_JSE8_OCA.book Page ix Monday, June 20, 2016 2:31 PM Contents Figures Tables Examples Foreword Preface xix xxi xxiii xxvii xxix 1 Basics of Java Programming 1 1.1 Introduction 2 1.2 Classes 2 Declaring

More information

Bldr.io Documentation

Bldr.io Documentation Bldr.io Documentation Release 0.0.2 Aaron Scherer February 10, 2017 Contents 1 Content 5 1.1 Installation................................................ 5 1.2 Usage...................................................

More information

Contents in Detail. Foreword by Xavier Noria

Contents in Detail. Foreword by Xavier Noria Contents in Detail Foreword by Xavier Noria Acknowledgments xv xvii Introduction xix Who This Book Is For................................................ xx Overview...xx Installation.... xxi Ruby, Rails,

More information

SYMFONY2 WEB FRAMEWORK

SYMFONY2 WEB FRAMEWORK 1 5828 Foundations of Software Engineering Spring 2012 SYMFONY2 WEB FRAMEWORK By Mazin Hakeem Khaled Alanezi 2 Agenda Introduction What is a Framework? Why Use a Framework? What is Symfony2? Symfony2 from

More information

D8 Module Porting 101. Porting Simple FB Connect Module to D8. Tanay Sai. Drupal is a registered trademark of Dries Buytaert.

D8 Module Porting 101. Porting Simple FB Connect Module to D8. Tanay Sai. Drupal is a registered trademark of Dries Buytaert. D8 Module Porting 101 Porting Simple FB Connect Module to D8 Tanay Sai Drupal is a registered trademark of Dries Buytaert. Preface This is no definitive resource. And is no where close to being completely

More information

How to get started with writing tests for contrib Brent Gees

How to get started with writing tests for contrib Brent Gees How to get started with writing tests for contrib Brent Gees Slides + example module http://bit.ly/lissabon-testing http://bit.ly/lissabon-testing-module Who am I? Brent Developer / Architect @brentgees

More information

Tolerance Documentation

Tolerance Documentation Tolerance Documentation Release 0.1.0 sroze Oct 31, 2017 Contents 1 Introduction 3 1.1 Why?................................................... 3 1.2 Getting started..............................................

More information

PHP XPDF Documentation

PHP XPDF Documentation PHP XPDF Documentation Release 0.1 Romain Neutron - Alchemy February 02, 2017 Contents 1 Introduction 1 2 Installation 3 3 PDF2Text 5 3.1 Basic Usage............................................... 5 3.2

More information

JAVA MOCK TEST JAVA MOCK TEST II

JAVA MOCK TEST JAVA MOCK TEST II http://www.tutorialspoint.com JAVA MOCK TEST Copyright tutorialspoint.com This section presents you various set of Mock Tests related to Java Framework. You can download these sample mock tests at your

More information

Custom. Compound Fields In Drupal 8 OCTOBER 21, BADCamp 2017 PRESENTATION TITLE

Custom. Compound Fields In Drupal 8 OCTOBER 21, BADCamp 2017 PRESENTATION TITLE Custom BADCamp 2017 Compound Fields In Drupal 8 OCTOBER 21, 2017 PRESENTATION TITLE Introduction Architect for projects such as NBA Weight Watchers Memorial Sloan Kettering Cancer Center Tobby Hagler DIRECTOR

More information

Chapter 12: How to Create and Use Classes

Chapter 12: How to Create and Use Classes CIS 260 C# Chapter 12: How to Create and Use Classes 1. An Introduction to Classes 1.1. How classes can be used to structure an application A class is a template to define objects with their properties

More information

CGS 2405 Advanced Programming with C++ Course Justification

CGS 2405 Advanced Programming with C++ Course Justification Course Justification This course is the second C++ computer programming course in the Computer Science Associate in Arts degree program. This course is required for an Associate in Arts Computer Science

More information

The journey of a module from Drupal 7 to Drupal 8

The journey of a module from Drupal 7 to Drupal 8 The journey of a module from Drupal 7 to Drupal 8 Heymo Vehse https://twitter.com/heymo https://www.drupal.org/u/heymo About Me Heymo Vehse https://twitter.com/heymo https://www.drupal.org/u/heymo heymo@thebrickfactory.com

More information

Magister 6 API Documentation

Magister 6 API Documentation Magister 6 API Documentation Release 2.0 magister-api September 22, 2018 Contents 1 User Guide 3 1.1 Installation................................................ 3 1.1.1 Server Requirements......................................

More information

Easy Social Feeds with the Migrate API. DrupalCampNJ, Feb. 3, 2018

Easy Social Feeds with the Migrate API. DrupalCampNJ, Feb. 3, 2018 Easy Social Feeds with the Migrate API DrupalCampNJ, Feb. 3, 2018 Intros Tom Mount Eastern Standard Technology Lead, Eastern Standard Closet geek Hobbies include bass guitar and rec Collaborative dev team

More information

Course Text. Course Description. Course Objectives. StraighterLine Introduction to Programming in C++

Course Text. Course Description. Course Objectives. StraighterLine Introduction to Programming in C++ Introduction to Programming in C++ Course Text Programming in C++, Zyante, Fall 2013 edition. Course book provided along with the course. Course Description This course introduces programming in C++ and

More information

Magento Technical Guidelines

Magento Technical Guidelines Magento Technical Guidelines Eugene Shakhsuvarov, Software Engineer @ Magento 2018 Magento, Inc. Page 1 Magento 2 Technical Guidelines Document which describes the desired technical state of Magento 2

More information

Documenting APIs with Swagger. TC Camp. Peter Gruenbaum

Documenting APIs with Swagger. TC Camp. Peter Gruenbaum Documenting APIs with Swagger TC Camp Peter Gruenbaum Introduction } Covers } What is an API Definition? } YAML } Open API Specification } Writing Documentation } Generating Documentation } Alternatives

More information

Object Oriented Programming: In this course we began an introduction to programming from an object-oriented approach.

Object Oriented Programming: In this course we began an introduction to programming from an object-oriented approach. CMSC 131: Chapter 28 Final Review: What you learned this semester The Big Picture Object Oriented Programming: In this course we began an introduction to programming from an object-oriented approach. Java

More information

Introduction to PHP. Handling Html Form With Php. Decisions and loop. Function. String. Array

Introduction to PHP. Handling Html Form With Php. Decisions and loop. Function. String. Array Introduction to PHP Evaluation of Php Basic Syntax Defining variable and constant Php Data type Operator and Expression Handling Html Form With Php Capturing Form Data Dealing with Multi-value filed Generating

More information

TRAINING GUIDE. Lucity Web Services APIs

TRAINING GUIDE. Lucity Web Services APIs TRAINING GUIDE Lucity Web Services APIs Lucity Web Services APIs Lucity offers several web service APIs. This guide covers the Lucity Citizen Portal API as well as the. Contents How it Works... 2 Basics...

More information

CMSC131. Inheritance. Object. When we talked about Object, I mentioned that all Java classes are "built" on top of that.

CMSC131. Inheritance. Object. When we talked about Object, I mentioned that all Java classes are built on top of that. CMSC131 Inheritance Object When we talked about Object, I mentioned that all Java classes are "built" on top of that. This came up when talking about the Java standard equals operator: boolean equals(object

More information

Using DRY (Don't Repeat Yourself) Principle in Drupal 8 Site Life Cycle

Using DRY (Don't Repeat Yourself) Principle in Drupal 8 Site Life Cycle Using DRY (Don't Repeat Yourself) Principle in Drupal 8 Site Life Cycle www.vardot.com Mohammed J. Razem CEO & Founder at Vardot m.razem@vardot.com @moerazem drupal.org/vardot Open Source Products Built

More information

MIRO DIETIKER Founder

MIRO DIETIKER Founder DRUPAL SECURITY MIRO DIETIKER Founder I am I am consulting End User Agencies Site builder Hosters Developer Maintainer Open Source Initiative Leader Spring 2017 Security - Responsible disclosure...a vulnerability

More information

Remember, this question was mis-worded: you could also add quoted words and sentences in the blanks below. This allowed for a solution to [4] below.

Remember, this question was mis-worded: you could also add quoted words and sentences in the blanks below. This allowed for a solution to [4] below. CS3 Fall 04 Midterm 1 Solutions and Grading standards Problem 1 (6 points, 10 minutes): Make the expressions correct Add parentheses and procedures in the underlined areas to make these expressions return

More information

Leveraging Zend_Form Decorators

Leveraging Zend_Form Decorators Leveraging Zend_Form Decorators Matthew Weier O'Phinney Project Lead Zend Framework What is a decorator? In Zend_Form Combination Decorator and Strategy pattern Decorator Pattern In object-oriented programming,

More information

Phake - PHP Mocking Framework Documentation

Phake - PHP Mocking Framework Documentation Phake - PHP Mocking Framework Documentation Release 1.0.3 Mike Lively Sep 06, 2017 Contents 1 Introduction to Phake 1 2 Getting Started 5 2.1 Composer Install.............................................

More information

JAVA MOCK TEST JAVA MOCK TEST III

JAVA MOCK TEST JAVA MOCK TEST III http://www.tutorialspoint.com JAVA MOCK TEST Copyright tutorialspoint.com This section presents you various set of Mock Tests related to Java Framework. You can download these sample mock tests at your

More information

Dependency Injection Container Documentation

Dependency Injection Container Documentation Dependency Injection Container Documentation Release v1.0.0 Filipe Silva Dec 08, 2017 Contents 1 Getting started 3 1.1 Introduction...............................................

More information

Remote Entities: Past, Present & Future

Remote Entities: Past, Present & Future BADCamp, October 24th 2015 Remote Entities: Past, Present & Future Dave Bailey - steel-track Colan Schwartz - colan Licensed under Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) About Dave Drupal

More information

INFO 1103 Homework Project 2

INFO 1103 Homework Project 2 INFO 1103 Homework Project 2 February 15, 2019 Due March 13, 2019, at the end of the lecture period. 1 Introduction In this project, you will design and create the appropriate tables for a version of the

More information

mvn package -Dmaven.test.skip=false //builds DSpace and runs tests

mvn package -Dmaven.test.skip=false //builds DSpace and runs tests DSpace Testing 1 Introduction 2 Quick Start 2.1 Maven 2.2 JUnit 2.3 JMockit 2.4 ContiPerf 2.5 H2 3 Unit Tests Implementation 3.1 Structure 3.2 Limitations 3.3 How to build new tests 3.4 How to run the

More information

Behat Kickstart. For Drupal 8 Developers. Stanford Drupal Camp 2016 Stanford, CA -- April 1-2, Peter Sawczynec Customer Success Engineer

Behat Kickstart. For Drupal 8 Developers. Stanford Drupal Camp 2016 Stanford, CA -- April 1-2, Peter Sawczynec Customer Success Engineer Behat Kickstart For Drupal 8 Developers Stanford Drupal Camp 2016 Stanford, CA -- April 1-2, 2016 \ Peter Sawczynec Customer Success Engineer D8 Testing Ecosystem Behat SimpleTest PHPUnit JMeter Drupal

More information

Read and fill in this page now. Your lab section day and time: Name of the person sitting to your left: Name of the person sitting to your right:

Read and fill in this page now. Your lab section day and time: Name of the person sitting to your left: Name of the person sitting to your right: CS3 Fall 04 Midterm 1 Read and fill in this page now Your name: Your login name: Your lab section day and time: Your lab T.A.: Name of the person sitting to your left: Name of the person sitting to your

More information

Testing LAMP Applications. Sebastian Bergmann thephp.cc

Testing LAMP Applications. Sebastian Bergmann thephp.cc Testing LAMP Applications Sebastian Bergmann thephp.cc Take a ride with me back in time. Separation of Concerns

More information

The Case (Or Not) For PostgreSQL

The Case (Or Not) For PostgreSQL The Case (Or Not) For PostgreSQL mradcliffe Matthew Radcliffe Copyright Jeff MacDonald. 2008. Image. http://en.wikipedia.org/wiki/file:postgresql_elephant.svg Background First introduced to PostgreSQL

More information

ASSIGNMENT 5 Objects, Files, and a Music Player

ASSIGNMENT 5 Objects, Files, and a Music Player ASSIGNMENT 5 Objects, Files, and a Music Player COMP-202A, Fall 2009, All Sections Due: Thursday, December 3, 2009 (23:55) You MUST do this assignment individually and, unless otherwise specified, you

More information

An Introduction to JavaScript & Bootstrap Basic concept used in responsive website development Form Validation Creating templates

An Introduction to JavaScript & Bootstrap Basic concept used in responsive website development Form Validation Creating templates PHP Course Contents An Introduction to HTML & CSS Basic Html concept used in website development Creating templates An Introduction to JavaScript & Bootstrap Basic concept used in responsive website development

More information

advanced webforms This work is licensed under a Creative Commons Attribution 4.0 International License.

advanced webforms   This work is licensed under a Creative Commons Attribution 4.0 International License. advanced webforms http://bit.ly/advanced-webforms This work is licensed under a Creative Commons Attribution 4.0 International License. Hello! Hi, my name is Jacob Rockowitz. I am known as jrockowitz on

More information

Magento 2 Certified Professional Developer. Exam Study Guide

Magento 2 Certified Professional Developer. Exam Study Guide Magento 2 Certified Professional Developer Exam Study Guide U Contents Contents Introduction... 1 Topics and Objectives... 3 1 Magento Architecture and Customization Techniques... 3 1.1 Describe Magento

More information

Java+- Language Reference Manual

Java+- Language Reference Manual Fall 2016 COMS4115 Programming Languages & Translators Java+- Language Reference Manual Authors Ashley Daguanno (ad3079) - Manager Anna Wen (aw2802) - Tester Tin Nilar Hlaing (th2520) - Systems Architect

More information

Magister 6 API Documentation

Magister 6 API Documentation Magister 6 API Documentation Release 2.0 magister-api November 15, 2017 Contents 1 User Guide 3 1.1 Installation................................................ 3 1.1.1 Server Requirements......................................

More information

HIBERNATE MOCK TEST HIBERNATE MOCK TEST IV

HIBERNATE MOCK TEST HIBERNATE MOCK TEST IV http://www.tutorialspoint.com HIBERNATE MOCK TEST Copyright tutorialspoint.com This section presents you various set of Mock Tests related to Hibernate Framework. You can download these sample mock tests

More information

MonoLog - Logging and Monitoring Specifications

MonoLog - Logging and Monitoring Specifications The ObjectWeb Consortium Interface Specification MonoLog - Logging and Monitoring Specifications AUTHORS: S. Chassande-Barrioz (INRIA) CONTRIBUTORS: JB. Stefani (INRIA) B. Dumant (Kelua) Released: March

More information

Application Development in JAVA. Data Types, Variable, Comments & Operators. Part I: Core Java (J2SE) Getting Started

Application Development in JAVA. Data Types, Variable, Comments & Operators. Part I: Core Java (J2SE) Getting Started Application Development in JAVA Duration Lecture: Specialization x Hours Core Java (J2SE) & Advance Java (J2EE) Detailed Module Part I: Core Java (J2SE) Getting Started What is Java all about? Features

More information

Creating an Immutable Class. Based on slides by Prof. Burton Ma

Creating an Immutable Class. Based on slides by Prof. Burton Ma Creating an Immutable Class Based on slides by Prof. Burton Ma 1 Value Type Classes A value type is a class that represents a value Examples of values: name, date, colour, mathematical vector Java examples:

More information

Vaurien Documentation

Vaurien Documentation Vaurien Documentation Release 2.0 Mozilla Aug 02, 2017 Contents 1 Installing Vaurien 3 2 Design 5 3 Using Vaurien from the command-line 7 4 Controlling Vaurien live 9 5 Controlling Vaurien from your code

More information

Laravel-Metable Documentation

Laravel-Metable Documentation Laravel-Metable Documentation Release 1.0 Sean Fraser May 15, 2018 Contents 1 Introduction 3 1.1 Features.................................................. 3 1.2 Installation................................................

More information

Unified Modeling Language (UML) Fundamentals & Intro to Profiles

Unified Modeling Language (UML) Fundamentals & Intro to Profiles Unified Modeling Language (UML) Fundamentals & Intro to Profiles Margaret Goodrich Land Tel: +1-903-489-1494 Cell: +1-903-477-7176 E-Mail: margaret@j-mgoodrich.com Topics Information Modeling Methodology

More information

Payment Suite. Release

Payment Suite. Release Payment Suite Release Apr 25, 2017 Contents 1 User Documentation 3 1.1 Installation................................................ 3 1.2 Configuration............................................... 4

More information

CS211 Computers and Programming Matthew Harris and Alexa Sharp July 9, Boggle

CS211 Computers and Programming Matthew Harris and Alexa Sharp July 9, Boggle Boggle If you are not familiar with the game Boggle, the game is played with 16 dice that have letters on all faces. The dice are randomly deposited into a four-by-four grid so that the players see the

More information

JavaScript. Training Offer for JavaScript Introduction JavaScript. JavaScript Objects

JavaScript. Training Offer for JavaScript Introduction JavaScript. JavaScript Objects JavaScript CAC Noida is an ISO 9001:2015 certified training center with professional experience that dates back to 2005. The vision is to provide professional education merging corporate culture globally

More information

SPRING MOCK TEST SPRING MOCK TEST I

SPRING MOCK TEST SPRING MOCK TEST I http://www.tutorialspoint.com SPRING MOCK TEST Copyright tutorialspoint.com This section presents you various set of Mock Tests related to Spring Framework. You can download these sample mock tests at

More information

Get in Touch Module 1 - Core PHP XHTML

Get in Touch Module 1 - Core PHP XHTML PHP/MYSQL (Basic + Advanced) Web Technologies Module 1 - Core PHP XHTML What is HTML? Use of HTML. Difference between HTML, XHTML and DHTML. Basic HTML tags. Creating Forms with HTML. Understanding Web

More information

Unit Testing Activity

Unit Testing Activity Unit Testing Activity SWEN-261 Introduction to Software Engineering Department of Software Engineering Rochester Institute of Technology Your activity for the Unit Testing lesson is to build tests for

More information

EmberJS A Fitting Face for a D8 Backend. Taylor Solomon

EmberJS A Fitting Face for a D8 Backend. Taylor Solomon EmberJS A Fitting Face for a D8 Backend Taylor Solomon taylor.solomon @jtsolomon http://interactivestrategies.com 2 Years Ago 2 Years Ago URL Ember Data assumes a few things. - Your API format is JSON

More information

Mobile MOUSe JAVA2 FOR PROGRAMMERS ONLINE COURSE OUTLINE

Mobile MOUSe JAVA2 FOR PROGRAMMERS ONLINE COURSE OUTLINE Mobile MOUSe JAVA2 FOR PROGRAMMERS ONLINE COURSE OUTLINE COURSE TITLE JAVA2 FOR PROGRAMMERS COURSE DURATION 14 Hour(s) of Interactive Training COURSE OVERVIEW With the Java2 for Programmers course, anyone

More information

Scaffold Documentation

Scaffold Documentation Scaffold Documentation Release 1.1 Alin Eugen Deac Oct 29, 2017 Contents 1 Contents 3 1.1 How to Install.............................................. 3 1.2 Install Scaffolds.............................................

More information

Unit Tes2ng Ac2vity. SWEN-261 Introduc2on to So3ware Engineering. Department of So3ware Engineering Rochester Ins2tute of Technology

Unit Tes2ng Ac2vity. SWEN-261 Introduc2on to So3ware Engineering. Department of So3ware Engineering Rochester Ins2tute of Technology Unit Tes2ng Ac2vity SWEN-261 Introduc2on to So3ware Engineering Department of So3ware Engineering Rochester Ins2tute of Technology Your activity for the Unit Testing lesson is to build tests for existing

More information

Zhifu Pei CSCI5448 Spring 2011 Prof. Kenneth M. Anderson

Zhifu Pei CSCI5448 Spring 2011 Prof. Kenneth M. Anderson Zhifu Pei CSCI5448 Spring 2011 Prof. Kenneth M. Anderson Introduction History, Characteristics of Java language Java Language Basics Data types, Variables, Operators and Expressions Anatomy of a Java Program

More information

Simple Data Source Crawler Plugin to Set the Document Title

Simple Data Source Crawler Plugin to Set the Document Title Simple Data Source Crawler Plugin to Set the Document Title IBM Content Analytics 1 Contents Introduction... 4 Basic FS Crawler behavior.... 8 Using the Customizer Filter to Modify the title Field... 13

More information

Firebase Admin SDK for PHP. Release

Firebase Admin SDK for PHP. Release Firebase Admin SDK for PHP Release Nov 25, 2017 Contents 1 User Guide 3 1.1 Overview................................................. 3 1.1.1 Requirements.......................................... 3 1.1.2

More information

Computer Programming II C++ (830)

Computer Programming II C++ (830) DESCRIPTION This is an advanced course in computer programming/software engineering and applications. It reviews and builds on the concepts introduced in CP I. It introduces students to dynamic data structures,

More information

I BCS-031 BACHELOR OF COMPUTER APPLICATIONS (BCA) (Revised) Term-End Examination. June, 2015 BCS-031 : PROGRAMMING IN C ++

I BCS-031 BACHELOR OF COMPUTER APPLICATIONS (BCA) (Revised) Term-End Examination. June, 2015 BCS-031 : PROGRAMMING IN C ++ No. of Printed Pages : 3 I BCS-031 BACHELOR OF COMPUTER APPLICATIONS (BCA) (Revised) Term-End Examination 05723. June, 2015 BCS-031 : PROGRAMMING IN C ++ Time : 3 hours Maximum Marks : 100 (Weightage 75%)

More information

SphinxQL Query Builder. Release 1.0.0

SphinxQL Query Builder. Release 1.0.0 SphinxQL Query Builder Release 1.0.0 Oct 12, 2018 Contents 1 Introduction 1 1.1 Compatiblity............................................... 1 2 CHANGELOG 3 2.1 What s New in 1.0.0...........................................

More information

Chapter 15: Object Oriented Programming

Chapter 15: Object Oriented Programming Chapter 15: Object Oriented Programming Think Java: How to Think Like a Computer Scientist 5.1.2 by Allen B. Downey How do Software Developers use OOP? Defining classes to create objects UML diagrams to

More information

Real Application Security Administration

Real Application Security Administration Oracle Database Real Application Security Administration Console (RASADM) User s Guide 12c Release 2 (12.2) E85615-01 June 2017 Real Application Security Administration Oracle Database Real Application

More information

Standard. Number of Correlations

Standard. Number of Correlations Computer Science 2016 This assessment contains 80 items, but only 80 are used at one time. Programming and Software Development Number of Correlations Standard Type Standard 2 Duty 1) CONTENT STANDARD

More information

Chair of Software Engineering. Java and C# in depth. Carlo A. Furia, Marco Piccioni, Bertrand Meyer. Java: reflection

Chair of Software Engineering. Java and C# in depth. Carlo A. Furia, Marco Piccioni, Bertrand Meyer. Java: reflection Chair of Software Engineering Carlo A. Furia, Marco Piccioni, Bertrand Meyer Java: reflection Outline Introductory detour: quines Basic reflection Built-in features Introspection Reflective method invocation

More information

You can use these quick links, and the links on the left sidebar to navigate quickly around this User Manual.

You can use these quick links, and the links on the left sidebar to navigate quickly around this User Manual. USER MANUAL Fooman Connect: Xero (Magento 1) Quick Links This document is structured in the following sections: 1. 2. 3. Installation Set up in Xero and Magento Troubleshooting You can use these quick

More information

(800) Toll Free (804) Fax Introduction to Java and Enterprise Java using Eclipse IDE Duration: 5 days

(800) Toll Free (804) Fax   Introduction to Java and Enterprise Java using Eclipse IDE Duration: 5 days Course Description This course introduces the Java programming language and how to develop Java applications using Eclipse 3.0. Students learn the syntax of the Java programming language, object-oriented

More information

CMPSCI 187 / Spring 2015 Implementing Sets Using Linked Lists

CMPSCI 187 / Spring 2015 Implementing Sets Using Linked Lists CMPSCI 187 / Spring 2015 Implementing Sets Using Linked Lists Due on Tuesday February 24, 2015, 8:30 a.m. Marc Liberatore and John Ridgway Morrill I N375 Section 01 @ 10:00 Section 02 @ 08:30 1 CMPSCI

More information

CORE JAVA TRAINING COURSE CONTENT

CORE JAVA TRAINING COURSE CONTENT CORE JAVA TRAINING COURSE CONTENT SECTION 1 : INTRODUCTION Introduction about Programming Language Paradigms Why Java? Flavors of Java. Java Designing Goal. Role of Java Programmer in Industry Features

More information

You can use these quick links, and the links on the left sidebar to navigate quickly around this User Manual.

You can use these quick links, and the links on the left sidebar to navigate quickly around this User Manual. USER MANUAL Fooman Connect: Xero - Magento 2 Quick Links This document is structured in the following sections: 1. 2. 3. Set up in Xero and Magento Using Fooman Connect: Xero Troubleshooting You can use

More information

Connexion Documentation

Connexion Documentation Connexion Documentation Release 0.5 Zalando SE Nov 16, 2017 Contents 1 Quickstart 3 1.1 Prerequisites............................................... 3 1.2 Installing It................................................

More information

Reviewing for the Midterm Covers chapters 1 to 5, 7 to 9. Instructor: Scott Kristjanson CMPT 125/125 SFU Burnaby, Fall 2013

Reviewing for the Midterm Covers chapters 1 to 5, 7 to 9. Instructor: Scott Kristjanson CMPT 125/125 SFU Burnaby, Fall 2013 Reviewing for the Midterm Covers chapters 1 to 5, 7 to 9 Instructor: Scott Kristjanson CMPT 125/125 SFU Burnaby, Fall 2013 2 Things to Review Review the Class Slides: Key Things to Take Away Do you understand

More information

Chapter 1 - Consuming REST Web Services in Angular

Chapter 1 - Consuming REST Web Services in Angular Chapter 1 - Consuming REST Web Services in Angular Objectives Key objectives of this chapter REST Overview Common Angular tasks for REST communication Using Angular to send various HTTP requests 1.1 REST

More information

Object-Oriented Programming in C# (VS 2015)

Object-Oriented Programming in C# (VS 2015) Object-Oriented Programming in C# (VS 2015) This thorough and comprehensive 5-day course is a practical introduction to programming in C#, utilizing the services provided by.net. This course emphasizes

More information

Silex and Twig. Jon Ginn

Silex and Twig. Jon Ginn Silex and Twig Jon Ginn Silex and Twig Jon Ginn Silex and Twig Alex Ross and Dave Hulbert Alex Dave @rossey Senior engineer at Base* @dave1010 Tech lead at Base* *we re hiring wearebase.com Alex Dave

More information

c360 Audit User Guide Microsoft Dynamics CRM 2011 compatible c360 Solutions, Inc.

c360 Audit User Guide Microsoft Dynamics CRM 2011 compatible c360 Solutions, Inc. c360 Audit User Guide Microsoft Dynamics CRM 2011 compatible c360 Solutions, Inc. www.c360.com www.c360.com Page 1 4/15/2011 Table of Contents Table of Contents... 2 Overview... 3 Audit Analyzer... 4 Accessing

More information

Drupal 8 Plugins. Is it love? It could be.

Drupal 8 Plugins. Is it love? It could be. Drupal 8 Plugins Is it love? It could be. My name is Josh I am from Boston, MA Grew up in Maine (yay Lobsters, Blueberries and Trees!) I have been writing PHP since 1999 Playing with Drupal since 2010

More information

Computer Programming II Python

Computer Programming II Python EXAM INFORMATION Items 32 Points 33 Prerequisites SECONDARY MATH I COMPUTER PROGRAMMING I Grade Level 10-12 Course Length ONE YEAR DESCRIPTION This is an advanced course in computer programming/software

More information

Programming. We will be introducing various new elements of Python and using them to solve increasingly interesting and complex problems.

Programming. We will be introducing various new elements of Python and using them to solve increasingly interesting and complex problems. Plan for the rest of the semester: Programming We will be introducing various new elements of Python and using them to solve increasingly interesting and complex problems. We saw earlier that computers

More information

DCLI User's Guide. Data Center Command-Line Interface

DCLI User's Guide. Data Center Command-Line Interface Data Center Command-Line Interface 2.10.2 You can find the most up-to-date technical documentation on the VMware website at: https://docs.vmware.com/ If you have comments about this documentation, submit

More information

SortMyBooks API (Application programming

SortMyBooks API (Application programming SortMyBooks API (Application programming interface) Welcome to Sort My Books. This documentation will help you to get started with SortMyBooks API. General Considerations SortMyBooks works with objects

More information

Princeton University COS 333: Advanced Programming Techniques A Subset of PHP

Princeton University COS 333: Advanced Programming Techniques A Subset of PHP Princeton University COS 333: Advanced Programming Techniques A Subset of PHP Program Structure -----------------------------------------------------------------------------------

More information

interface MyAnno interface str( ) val( )

interface MyAnno interface str( ) val( ) Unit 4 Annotations: basics of annotation-the Annotated element Interface. Using Default Values, Marker Annotations. Single-Member Annotations. The Built-In Annotations-Some Restrictions. 1 annotation Since

More information

I pledge by honor that I will not discuss this exam with anyone until my instructor reviews the exam in the class.

I pledge by honor that I will not discuss this exam with anyone until my instructor reviews the exam in the class. Name: Covers Chapters 1-3 50 mins CSCI 1301 Introduction to Programming Armstrong Atlantic State University Instructor: Dr. Y. Daniel Liang I pledge by honor that I will not discuss this exam with anyone

More information

INHERITANCE. Spring 2019

INHERITANCE. Spring 2019 INHERITANCE Spring 2019 INHERITANCE BASICS Inheritance is a technique that allows one class to be derived from another A derived class inherits all of the data and methods from the original class Suppose

More information