{"product_id":"javascript-and-open-data-hardback-9781786302045","title":"JavaScript and Open Data (Hardback) 9781786302045","description":"\u003cfont face=\"Georgia\"\u003e\r\n\u003cp\u003e\u003cfont size=\"6\"\u003eJavaScript and Open Data\u003c\/font\u003e\u003cbr\u003e\r\n\r\n\r\n\r\n\r\n\r\n\u003c\/p\u003e\n\u003cp\u003e\u003cfont size=\"4\"\u003eRobert Jeansoulin (Author)\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e9781786302045, Wiley\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003eHardback, published 1 June 2018\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e272 pages\u003cbr\u003e23.9 x 15.5 x 2 cm, 0.567 kg\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\r\n\r\n\r\n\u003cp align=\"justify\"\u003e\u003cstrong\u003e\u003cfont size=\"3\"\u003e\u003cp\u003eThis book will teach you how to take advantage of the JavaScript language to process data provided on the Internet. \u003c\/p\u003e \u003cp\u003eMuch attention is given to the main JavaScript backbone: prototype based objects, and functional capabilities, while common features (loops, etc.) are summarized in a few cheat-sheets. Only operational features are detailed through the coding of several applications -the second and largest part of the book-, on free-access datasets (e.g. World Bank). It includes: cartography (SVG or API's based), data-sheets access (via Ajax or Jsonp), video data and post-synchronization, and animation examples.\u003c\/p\u003e\u003c\/font\u003e\u003c\/strong\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e\u003cp\u003eIntroduction xiii\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePart 1. Core JavaScript 1\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eIntroduction to Part 1 3\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 1. Variables: Declaration, Definition and Type 5\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e1.1. Declarations of functions and variables 6\u003c\/p\u003e \u003cp\u003e1.1.1. The different declaration keywords 6\u003c\/p\u003e \u003cp\u003e1.1.2. Lexical scope and definition of a variable according to declaration mode: var, let, const 9\u003c\/p\u003e \u003cp\u003e1.1.3. Comments (important improvements carried over by ES6) 11\u003c\/p\u003e \u003cp\u003e1.1.4. General conclusion about the variable declarations in JavaScript 11\u003c\/p\u003e \u003cp\u003e1.1.5. Naming variables and functions: best practices 14\u003c\/p\u003e \u003cp\u003e1.2. Variable definition, initialization and typing in JavaScript 15\u003c\/p\u003e \u003cp\u003e1.2.1. Variables initialization and definition 15\u003c\/p\u003e \u003cp\u003e1.2.2. Types 15\u003c\/p\u003e \u003cp\u003e1.2.3. How to use the type “undefined” and the value undefined 17\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 2. Controls: Booleans, Branch and Loops 19\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e2.1. Truth values and boolean operators 19\u003c\/p\u003e \u003cp\u003e2.1.1. Boolean operators: “!” (not), “\u0026amp;\u0026amp;” (and), “||” (or) 19\u003c\/p\u003e \u003cp\u003e2.1.2. Relational operators: \u0026gt;, \u0026lt;, \u0026gt;=, \u0026lt;= 20\u003c\/p\u003e \u003cp\u003e2.1.3. Comparison operators: = =, != (simple) or = = =, != = (strict) 20\u003c\/p\u003e \u003cp\u003e2.2. Conditional instructions: branch test, loop test 21\u003c\/p\u003e \u003cp\u003e2.2.1. Conditional instructions: if ... else, if ... else if ... else 21\u003c\/p\u003e \u003cp\u003e2.2.2. Ternary conditional operator 21\u003c\/p\u003e \u003cp\u003e2.2.3. Instruction “switch” 22\u003c\/p\u003e \u003cp\u003e2.2.4. Classical iteration loop: instruction “for” 22\u003c\/p\u003e \u003cp\u003e2.2.5. Repeat under condition: instructions “while”, and “do..while” 23\u003c\/p\u003e \u003cp\u003e2.2.6. Implicit casting of values “undefined” and “null” in boolean context 23\u003c\/p\u003e \u003cp\u003e2.2.7. Short-cut evaluation: tips for the uncertain definitions 24\u003c\/p\u003e \u003cp\u003e2.2.8. Exception handling 24\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 3. Data: Numbers and Strings 27\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e3.1. Handling numbers 28\u003c\/p\u003e \u003cp\u003e3.1.1. Literal notation of type “number” variables 28\u003c\/p\u003e \u003cp\u003e3.1.2. Arithmetic operators 29\u003c\/p\u003e \u003cp\u003e3.1.3. Math operations using the methods of the object Math 30\u003c\/p\u003e \u003cp\u003e3.1.4. Evaluation in the “numerical context” versus “boolean context” 32\u003c\/p\u003e \u003cp\u003e3.2. Handling character strings 32\u003c\/p\u003e \u003cp\u003e3.2.1. Literal notation of strings 32\u003c\/p\u003e \u003cp\u003e3.2.2. Backtick syntax, or template syntax, introduced by ES6 33\u003c\/p\u003e \u003cp\u003e3.2.3. Concatenation operator 34\u003c\/p\u003e \u003cp\u003e3.2.4. Resolving polymorphism issues with operator + in numerical or string context 34\u003c\/p\u003e \u003cp\u003e3.2.5. Behavior of the relational and equality operators 35\u003c\/p\u003e \u003cp\u003e3.2.6. Various facets of string-related issues in a sample application 35\u003c\/p\u003e \u003cp\u003e3.3. The String.prototype methods 37\u003c\/p\u003e \u003cp\u003e3.3.1. The need for preprocessing before comparison 37\u003c\/p\u003e \u003cp\u003e3.3.2. Handling partial comparisons 38\u003c\/p\u003e \u003cp\u003e3.3.3. Methods for handling strings 39\u003c\/p\u003e \u003cp\u003e3.3.4. Regular expressions 41\u003c\/p\u003e \u003cp\u003e3.3.5. Evaluation and uses 42\u003c\/p\u003e \u003cp\u003e3.3.6. Some examples of useful patterns 42\u003c\/p\u003e \u003cp\u003e3.3.7. General syntax of a regular expression 43\u003c\/p\u003e \u003cp\u003e3.3.8. Combining RegExp and String.prototype methods 44\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 4. Objects and Prototypes 45\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e4.1. Introduction 45\u003c\/p\u003e \u003cp\u003e4.2. The objects: concepts versus named entities 46\u003c\/p\u003e \u003cp\u003e4.3. Object literal notation in JavaScript 47\u003c\/p\u003e \u003cp\u003e4.3.1. Syntax for “object literal”: 47\u003c\/p\u003e \u003cp\u003e4.3.2. Important warnings about writing JavaScript object notation 48\u003c\/p\u003e \u003cp\u003e4.3.3. The object literal first use: to define an object type variable 49\u003c\/p\u003e \u003cp\u003e4.3.4. The object literal second use: data notation in JSON format 49\u003c\/p\u003e \u003cp\u003e4.3.5. Accessing the individual properties of an object 50\u003c\/p\u003e \u003cp\u003e4.3.6. Notation syntax evolution with ES6 51\u003c\/p\u003e \u003cp\u003e4.4. The builtin methods of Object and Object.prototype 51\u003c\/p\u003e \u003cp\u003e4.4.1. The methods of Object, Object.prototype, and JSON 51\u003c\/p\u003e \u003cp\u003e4.4.2. Create an object and specify its properties 53\u003c\/p\u003e \u003cp\u003e4.4.3. Syntax and usage of the “descriptor” property 53\u003c\/p\u003e \u003cp\u003e4.4.4. Listing the properties of an object, analyzing a literal 54\u003c\/p\u003e \u003cp\u003e4.5. Basics of the “prototypal approach” in JavaScript 56\u003c\/p\u003e \u003cp\u003e4.5.1. JavaScript object's fundamental relation: “has prototype” 57\u003c\/p\u003e \u003cp\u003e4.5.2. Role of the prototypes and inheritance mechanism 58\u003c\/p\u003e \u003cp\u003e4.5.3. Object construction: the “literal approach” 60\u003c\/p\u003e \u003cp\u003e4.5.4. Object construction: the “prototypal approach” 61\u003c\/p\u003e \u003cp\u003e4.5.5. The pattern “assign\/create” 62\u003c\/p\u003e \u003cp\u003e4.5.6. Object construction: the “classical approach” 63\u003c\/p\u003e \u003cp\u003e4.6. Comparing “prototypal” and “classical” approaches 64\u003c\/p\u003e \u003cp\u003e4.6.1. Simulating a class hierarchy in JavaScript 65\u003c\/p\u003e \u003cp\u003e4.6.2. Summing up what we learned so far 68\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 5. Arrays 71\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e5.1. Handling arrays: creation and access to its elements 72\u003c\/p\u003e \u003cp\u003e5.1.1. Creating an array with the array literal notation 72\u003c\/p\u003e \u003cp\u003e5.1.2. Checking if a variable is an array 72\u003c\/p\u003e \u003cp\u003e5.1.3. The length property, the index count 73\u003c\/p\u003e \u003cp\u003e5.1.4. Accessing individual values in an array: the indices 74\u003c\/p\u003e \u003cp\u003e5.2. Methods of the object Array and Array.prototype 74\u003c\/p\u003e \u003cp\u003e5.2.1. The “Mutators” family 75\u003c\/p\u003e \u003cp\u003e5.2.2. The “Accessors” family 77\u003c\/p\u003e \u003cp\u003e5.2.3. The “Iteration” family 78\u003c\/p\u003e \u003cp\u003e5.2.4. Iterating over the elements of an array 78\u003c\/p\u003e \u003cp\u003e5.2.5. Iteration without a loop, with Array\/Array.prototype methods 79\u003c\/p\u003e \u003cp\u003e5.2.6. Chaining array methods 81\u003c\/p\u003e \u003cp\u003e5.2.7. Arrays and the arrow function syntax 82\u003c\/p\u003e \u003cp\u003e5.2.8. The “Iterables” 83\u003c\/p\u003e \u003cp\u003e5.3. Array of arrays (multidimensional array) 83\u003c\/p\u003e \u003cp\u003e5.3.1. Frameworks proposing an “augmented Array.prototype” 85\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 6. Functions 87\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e6.1. General syntax of a JavaScript function 88\u003c\/p\u003e \u003cp\u003e6.1.1. Name 88\u003c\/p\u003e \u003cp\u003e6.1.2. Parameters 88\u003c\/p\u003e \u003cp\u003e6.1.3. Return 89\u003c\/p\u003e \u003cp\u003e6.1.4. Function code block and scope 89\u003c\/p\u003e \u003cp\u003e6.1.5. Creating functions 89\u003c\/p\u003e \u003cp\u003e6.2. Invoking a function with operator (.) 90\u003c\/p\u003e \u003cp\u003e6.2.1. The three facets of the “parentheses operator” in a function context 91\u003c\/p\u003e \u003cp\u003e6.3. Choosing function declaration versus function expression 92\u003c\/p\u003e \u003cp\u003e6.4. Arguments 93\u003c\/p\u003e \u003cp\u003e6.4.1. The arguments are passed by value 93\u003c\/p\u003e \u003cp\u003e6.4.2. The inner object “arguments” 94\u003c\/p\u003e \u003cp\u003e6.5. Scope: global scope, function scopes and block scopes 94\u003c\/p\u003e \u003cp\u003e6.5.1. Vocabulary: lexical scope and “namespace” 94\u003c\/p\u003e \u003cp\u003e6.5.2. Wrapping-up and warnings 98\u003c\/p\u003e \u003cp\u003e6.6. Function “closures” 101\u003c\/p\u003e \u003cp\u003e6.6.1. Saving the value of a free variable in a given context 102\u003c\/p\u003e \u003cp\u003e6.6.2. Creating a list of functions linked to an array of data 103\u003c\/p\u003e \u003cp\u003e6.6.3. Currying”: breaking down a function into 1-parameter functions 106\u003c\/p\u003e \u003cp\u003e6.6.4. Compositing functions from an array of functions 107\u003c\/p\u003e \u003cp\u003e6.7. Immediately invocable functions: IIFE 109\u003c\/p\u003e \u003cp\u003e6.7.1. Creating a “namespace”, or a named library, with an IIFE 109\u003c\/p\u003e \u003cp\u003e6.8. The methods of Function.prototype 110\u003c\/p\u003e \u003cp\u003e6.8.1. Function.prototype.call() and .apply(), and pronoun 'this' 112\u003c\/p\u003e \u003cp\u003e6.8.2. Function.prototype.bind() 112\u003c\/p\u003e \u003cp\u003e6.9. Built-in functions 113\u003c\/p\u003e \u003cp\u003e6.10. Closure and IIFE cheat-sheet 114\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 7. From Signs to Patterns 117\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e7.1. Reserved words 118\u003c\/p\u003e \u003cp\u003e7.2. The pronoun “this” 119\u003c\/p\u003e \u003cp\u003e7.2.1. The many ways to link the pronoun “this” 119\u003c\/p\u003e \u003cp\u003e7.2.2. How to explicitly bind the pronoun? 121\u003c\/p\u003e \u003cp\u003e7.3. Operator: new 121\u003c\/p\u003e \u003cp\u003e7.4. Punctuation signs 122\u003c\/p\u003e \u003cp\u003e7.5. JavaScript usual design patterns 123\u003c\/p\u003e \u003cp\u003e7.5.1. Programming idioms 124\u003c\/p\u003e \u003cp\u003e7.5.2. Creational pattern: “Assign\/Create Combo” 125\u003c\/p\u003e \u003cp\u003e7.5.3. Structural pattern: singleton or namespace pattern 127\u003c\/p\u003e \u003cp\u003e7.5.4. Another structural pattern: the Decorator pattern 128\u003c\/p\u003e \u003cp\u003e7.5.5. Behavioral pattern: the observer or publish\/subscribe pattern 130\u003c\/p\u003e \u003cp\u003e7.6. Metaprogramming with ES6 131\u003c\/p\u003e \u003cp\u003e7.6.1. “Reflection” by “Symbols” 131\u003c\/p\u003e \u003cp\u003e7.6.2. New tool for measuring code performance 131\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePart 2. Client-Side JavaScript 133\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eIntroduction to Part 2 135\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 8. JavaScript in the Web Page 137\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e8.1. Ecosystem of the web page: the HTML sequence 137\u003c\/p\u003e \u003cp\u003e8.1.1. Structure and semantics\/layout and presentation 137\u003c\/p\u003e \u003cp\u003e8.1.2. Reminder about HTML5 tags 138\u003c\/p\u003e \u003cp\u003e8.2. Building the web page DOM: the layout engine 140\u003c\/p\u003e \u003cp\u003e8.2.1. DOM tree built by the layout engine: selecting nodes via CSS 141\u003c\/p\u003e \u003cp\u003e8.2.2. CSS rules and relationship with JavaScript selection methods 142\u003c\/p\u003e \u003cp\u003e8.3. Dynamic behavior of the web page: the script engine 143\u003c\/p\u003e \u003cp\u003e8.4. Interface with the DOM 145\u003c\/p\u003e \u003cp\u003e8.4.1. DOM interface 1: selecting elements 145\u003c\/p\u003e \u003cp\u003e8.4.2. DOM interface 2: reading\/writing\/creating an element 146\u003c\/p\u003e \u003cp\u003e8.4.3. Methods for HTML DOM document and element prototypes 148\u003c\/p\u003e \u003cp\u003e8.5. The events in client side JavaScript 150\u003c\/p\u003e \u003cp\u003e8.5.1. The browser event loop 150\u003c\/p\u003e \u003cp\u003e8.5.2. Handling DOM events 151\u003c\/p\u003e \u003cp\u003e8.6. Interacting with the DOM: to link elements\/events 153\u003c\/p\u003e \u003cp\u003e8.6.1. Waiting for the DOM 153\u003c\/p\u003e \u003cp\u003e8.6.2. Example: to build an HTML list 153\u003c\/p\u003e \u003cp\u003e8.6.3. Using events: modifying attributes and class names of an element. 154\u003c\/p\u003e \u003cp\u003e8.6.4. Dispatching events, creating a CustomEvent 155\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 9. Graphic and Multimedia Tools 157\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e9.1. To draw in the web page 157\u003c\/p\u003e \u003cp\u003e9.1.1. The elements and 158\u003c\/p\u003e \u003cp\u003e9.1.2. 2D curve plot 158\u003c\/p\u003e \u003cp\u003e9.2. SVG language 161\u003c\/p\u003e \u003cp\u003e9.3. Handling time in graphics animation 163\u003c\/p\u003e \u003cp\u003e9.3.1. Methods setTimeout, setInterval, requestAnimationFrame 163\u003c\/p\u003e \u003cp\u003e9.3.2. Performance considerations, generator functions 165\u003c\/p\u003e \u003cp\u003e9.4. Data persistence between client sessions 166\u003c\/p\u003e \u003cp\u003e9.4.1. Http cookies 166\u003c\/p\u003e \u003cp\u003e9.4.2. Local storages 167\u003c\/p\u003e \u003cp\u003e9.5. Note about “JavaScript frameworks” (jQuery, d3, etc.) 168\u003c\/p\u003e \u003cp\u003e9.5.1. A few words about jQuery 168\u003c\/p\u003e \u003cp\u003e9.5.2. Recommendation 169\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 10. AJAX Technology (Asynchrony) 171\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e10.1. Architecture for client–server data exchange 171\u003c\/p\u003e \u003cp\u003e10.1.1. The object XMLHttpRequest 172\u003c\/p\u003e \u003cp\u003e10.1.2. Using XMLHttpRequest: several steps 172\u003c\/p\u003e \u003cp\u003e10.2. Remarks about HTTP 173\u003c\/p\u003e \u003cp\u003e10.3. “Promises” and asynchronous programming 173\u003c\/p\u003e \u003cp\u003e10.3.1. Example: promisifying XMLHttpRequest 174\u003c\/p\u003e \u003cp\u003e10.3.2. Chaining promises 175\u003c\/p\u003e \u003cp\u003e10.3.3. Parallel processing of several promises 175\u003c\/p\u003e \u003cp\u003e10.3.4. Fetch: the promise to fetch AJAX 176\u003c\/p\u003e \u003cp\u003e10.3.5. About the “Same Origin Policy” 177\u003c\/p\u003e \u003cp\u003e10.4. The exchange format: JSON 177\u003c\/p\u003e \u003cp\u003e10.4.1. A very useful application of JSON: converting data from a spreadsheet 178\u003c\/p\u003e \u003cp\u003e10.4.2. Exporting spreadsheet data into JSON format 179\u003c\/p\u003e \u003cp\u003e10.4.3. Differences between JSON and the Javascript object Notation 182\u003c\/p\u003e \u003cp\u003e10.5. JavaScript Object Notation with Padding 184\u003c\/p\u003e \u003cp\u003e10.6. A parallel JavaScript: the “worker” 185\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePart 3. Applications 187\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eIntroduction to Part 3 189\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 11. Chronological Data 191\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e11.1. Accessing a JSON file via Ajax 191\u003c\/p\u003e \u003cp\u003e11.1.1. Quick presentation of the Quandl API 191\u003c\/p\u003e \u003cp\u003e11.1.2. Processing an example with promises 192\u003c\/p\u003e \u003cp\u003e11.2. Using open source graphic libraries 195\u003c\/p\u003e \u003cp\u003e11.2.1. Plot multiple data series against the same time axis 195\u003c\/p\u003e \u003cp\u003e11.2.2. Dynamic plot: simulating time evolution 197\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 12. Relational Data 199\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e12.1. Aggregating tabulated JSON data 199\u003c\/p\u003e \u003cp\u003e12.1.1. lectoral data: administrative breakdown, political breakdown 200\u003c\/p\u003e \u003cp\u003e12.1.2. Aggregating data along the spatial dimension: votes by circonscription 203\u003c\/p\u003e \u003cp\u003e12.1.3. Aggregating data along the affiliations dimension: labels by candidate 205\u003c\/p\u003e \u003cp\u003e12.2. Joining data: multiple JSON files 207\u003c\/p\u003e \u003cp\u003e12.2.1. Advantage of the flexibility brought by the prototypal approach 207\u003c\/p\u003e \u003cp\u003e12.2.2. Coding the join on the electoral application 208\u003c\/p\u003e \u003cp\u003e12.3. Postprocessing: analysis 210\u003c\/p\u003e \u003cp\u003e12.3.1. Analyzing the affiliations 210\u003c\/p\u003e \u003cp\u003e12.4. The role of promises 211\u003c\/p\u003e \u003cp\u003e12.4.1. Performance considerations with the electoral application 213\u003c\/p\u003e \u003cp\u003e12.5. Using Google Gantt chart for a graphic visualization 214\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 13. Cartographic Data 217\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e13.1. Cartographic application: using cartographic libraries 217\u003c\/p\u003e \u003cp\u003e13.1.1. Preparation of the map 219\u003c\/p\u003e \u003cp\u003e13.1.2. Creating a layer of markers 220\u003c\/p\u003e \u003cp\u003e13.1.3. Interacting and selecting features 222\u003c\/p\u003e \u003cp\u003e13.2. SVG-based cartography 222\u003c\/p\u003e \u003cp\u003e13.2.1. Description of the application 223\u003c\/p\u003e \u003cp\u003e13.2.2. Embedding the whole SVG document by direct copy 224\u003c\/p\u003e \u003cp\u003e13.2.3. Embedding the SVG code, element by element 225\u003c\/p\u003e \u003cp\u003e13.2.4. Joining relational data and SVG data 225\u003c\/p\u003e \u003cp\u003e13.2.5. Processing the combined information 226\u003c\/p\u003e \u003cp\u003e13.3. Getting coordinates from Wikipedia pages 227\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 14. Data Served by JSONP 229\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e14.1. Serving RSS feeds through \u003ci\u003eYahoo Query Language\u003c\/i\u003e 229\u003c\/p\u003e \u003cp\u003e14.2. Serving shared spreadsheets through Google spreadsheets 231\u003c\/p\u003e \u003cp\u003e14.2.1. Client-side code: HTML and script of the callback function 231\u003c\/p\u003e \u003cp\u003e14.2.2. Server-side code under the GoogleScript global object 232\u003c\/p\u003e \u003cp\u003e14.3. Serving images and their metadata through the Flickr API 233\u003c\/p\u003e \u003cp\u003eBibliography 235\u003c\/p\u003e \u003cp\u003eIndex 239\u003c\/p\u003e\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003eSubject Areas: Electronics \u0026amp; communications engineering [\u003ca title=\"See our other books on Electronics \u0026amp; communications engineering\" href=\"https:\/\/freshlyprintedbooks.co.uk\/search?q=%22Electronics%20\u0026amp;%20communications%20engineering%20%5BTJ%5D%22\"\u003eTJ\u003c\/a\u003e]\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\u003c\/font\u003e","brand":"Wiley-ISTE","offers":[{"title":"Brand New","offer_id":52446436065560,"sku":"9781786302045","price":102.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0730\/2037\/5320\/files\/9781786302045.jpg?v=1785111630","url":"https:\/\/freshlyprintedbooks.co.uk\/products\/javascript-and-open-data-hardback-9781786302045","provider":"Freshly Printed Books","version":"1.0","type":"link"}