A Scalable Data-Driven Journalism Platform for Hyper-Local News

Total Page:16

File Type:pdf, Size:1020Kb

A Scalable Data-Driven Journalism Platform for Hyper-Local News Crosstown Foundry: A Scalable Data-driven Journalism Platform for Hyper-local News Luciano Nocera George Constantinou Luan V. Tran University of Southern California University of Southern California University of Southern California Los Angeles, CA, USA Los Angeles, CA, USA Los Angeles, CA, USA [email protected] [email protected] [email protected] Seon Ho Kim Gabriel Kahn Cyrus Shahabi University of Southern California University of Southern California University of Southern California Los Angeles, CA, USA Los Angeles, CA, USA Los Angeles, CA, USA [email protected] [email protected] [email protected] ABSTRACT Scaling of this emerging journalistic model is challenging with the Generating hyper-local news at scale is challenging because shift from printed material to the online news format and tighter publicly available data is not provided at the desired spatial integration of news into social media platforms. It is even more and temporal granularity. Besides, there is a lack of automated challenging for local news outlets who wish to create hyper-local analytical and publishing tools. Crosstown Foundry, which is being news [7] to stay competitive by offering readers news that engages actively developed and used by engineers and journalists, is a novel their local communities, because they operate on limited budgets data-driven system that leverages a massive multi-modal dataset to and resources. Local outlets face a particular obstacle with scale. generate personalized newsletters for Los Angeles County readers. To cover new communities, they must hire more reporters and editors. For local outlets that reach a small audience, that is CCS CONCEPTS cost-prohibitive. Consequently, for local news sources, the smarter business decision has been to shrink rather than to expand. That • Information systems ! Data management systems; creates widening news deserts [6] – areas that receive little or no Document representation; • Social and professional topics news coverage. It leads to reduced government accountability and ! Professional topics; • Human-centered computing ! citizen engagement. Visualization. Several challenges prevent a journalist from harnessing data to KEYWORDS create timely news stories of interest to local communities. Cities, states, and countries have created sizable public data repositories data mining; visualization; data-driven journalism; hyper-local that are relevant. However, these data resources do not usually offer news insights that journalists can readily utilize. Besides, they are often ACM Reference Format: not standardized at a sufficient spatial resolution to use in a regional Luciano Nocera, George Constantinou, Luan V. Tran, Seon Ho Kim, Gabriel analysis (e.g., to compare trends across neighborhoods). Tools such Kahn, and Cyrus Shahabi. 2021. Crosstown Foundry: A Scalable Data-driven as Many Eyes and, most recently, Data Commons help "democratize" Journalism Platform for Hyper-local News. In Proceedings of the 2021 regional data sources with statistics and data visualizations and International Conference on Management of Data (SIGMOD ’21), June 20–25, provide broad user-level accessibility while fostering collaborative 2021, Virtual Event, China. ACM, New York, NY, USA, 5 pages. https: usage. However, they are not explicitly targeted for journalistic //doi.org/10.1145/3448016.3452751 applications, do not support online publishing at scale, and their databases are from public sources which are not adapted to 1 INTRODUCTION hyper-local data. Today’s data-driven journalism [8, 11] relies on Like any other modern industry, journalism is impacted by the data science and business intelligence tools such as Tableau [4] that ever-increasing amount of data and information available. News require a skill-set only available to few major outlets. publishers respond to this trend by developing in-house expertise To address these shortcomings we have developed the Crosstown to provide editors with the needed data-science skills, including Foundry, a platform that allows news editors to generate data analytics and data visualization, to create data-driven stories. scalable hyper-local news products quickly. Crosstown Foundry was developed in partnership by engineers and journalists Permission to make digital or hard copies of all or part of this work for personal or specifically for Crosstown, a nonprofit news organization based classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the University of Southern California’s Annenberg School on the first page. Copyrights for components of this work owned by others than ACM for Communication and Journalism. Crosstown Foundry gives must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, editors the means to outsource and craft stories leveraging curated to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]. local data sources. It automates news stories replication and SIGMOD ’21, June 20–25, 2021, Virtual Event, China specialization over large areas to provide local audiences with news © 2021 Association for Computing Machinery. products targeted to local neighborhoods. This work builds on our ACM ISBN 978-1-4503-8343-1/21/06...$15.00 https://doi.org/10.1145/3448016.3452751 previous work to help Crosstown editors assemble datasets and from official sources contain spatio-temporal information such as timestamps and neighborhood identity collected from diverse sources and standardized to enable hyper-local news. To stay up to date, we have automated the crawling process to collect data periodically, at the same rate as each data source. 2.1.1 Crime dataset. We collect the crime data directly from the law enforcement agencies or through open data portals such as Socrata [20]. In Los Angeles, there are 46 agencies, but only the largest make their data easily accessible to the public, namely the Los Angeles Police Department and the Los Angeles County Sheriff’s Department, and a few smaller agencies such as Pasadena and Santa Monica police departments. Though there are some national standards for agencies Figure 1: Crosstown Foundry and Products overview. reporting their data, called Uniform Crime Report, there are often inconsistencies from agency to agency. Some departments use different nomenclature for the same crime (e.g., larceny instead source data-driven news. Data-driven news stories can be sourced of petty theft), while others report the crime’s address instead from other news stories by contrasting with the local data or around of the latitude and longitude. This can impact the number of predictions, e.g., with our previous work to predict pollution [9], crimes that are reported within a neighborhood. To handle the traffic [10, 16] and crime [13]. Another way to outsource news crime type inconsistency, Crosstown uses a bundling tool which is to build stories around data outliers, which is the topic of our is a customized, reader-friendly hierarchy of crimes. Each crime related work with the Crosstown Detective that implements an type reported from the various agencies, is mapped to a unique outlier detector on the Crosstown datasets to report data points that nickname. After that, each nickname is mapped to a small bundle satisfy a discordancy test assuming a hypothesized distribution [2]. name which contains several similar nicknames (e.g., burglaries, Crosstown Foundry allows local news to do something never before attempted burglaries and residential burglaries are all mapped possible: create numerous local reports at scale. Previously, when to burglaries). This provides the flexibility to integrate new law news outlets wanted to cover more neighborhoods, they had to enforcement agencies with minimal effort and a unified framework hire more people. With Foundry, numerous local reports can be to generate crime reports. We have released publicly this dataset generated automatically without added costs. with our related work [14] where we have predicted crime trends. 2 SYSTEM 2.1.2 Traffic dataset. The traffic dataset consists of traffic data, parking citations and traffic collisions. Crosstown uses the Archived Figure 1 presents an overview of the Crosstown ecosystem, Data Management System (ADMS) [1] which collects, stores, including the Foundry and Products Dashboards. We follow a manages, and analyzes a variety of data sources, including massive three-tier architecture with the presentation, access and storage. traffic sensor data. ADMS collects data from 14,000 loop detectors The front-end layer includes the Foundry Dashboard used to deployed in arterial and highways covering 5,400 miles of roadway create newsletters and other hyper-local news content, and the in Los Angeles county and records traffic signals in real-time. Products Dashboards that provide data exploration to readers Data collected from these sensors, enable to calculate the volume of the Crosstown website and newsletter subscribers. The APIs of cars and traffic speed at various spatial and temporal resolutions. layer provides access to data and services for these dashboards, For a particular neighborhood, arterial sensor data deployed within specifically for the Foundry to publish and distribute content and the boundaries of the neighborhood are aggregated in hourly to the Products to access and explore the Crosstown datasets. The buckets with their
Recommended publications
  • Coffeescript Accelerated Javascript Development, Second Edition
    Extracted from: CoffeeScript Accelerated JavaScript Development, Second Edition This PDF file contains pages extracted from CoffeeScript, published by the Prag- matic Bookshelf. For more information or to purchase a paperback or PDF copy, please visit http://www.pragprog.com. Note: This extract contains some colored text (particularly in code listing). This is available only in online versions of the books. The printed versions are black and white. Pagination might vary between the online and printed versions; the content is otherwise identical. Copyright © 2015 The Pragmatic Programmers, LLC. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form, or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior consent of the publisher. The Pragmatic Bookshelf Dallas, Texas • Raleigh, North Carolina CoffeeScript Accelerated JavaScript Development, Second Edition Trevor Burnham The Pragmatic Bookshelf Dallas, Texas • Raleigh, North Carolina Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and The Pragmatic Programmers, LLC was aware of a trademark claim, the designations have been printed in initial capital letters or in all capitals. The Pragmatic Starter Kit, The Pragmatic Programmer, Pragmatic Programming, Pragmatic Bookshelf, PragProg and the linking g device are trade- marks of The Pragmatic Programmers, LLC. Every precaution was taken in the preparation of this book. However, the publisher assumes no responsibility for errors or omissions, or for damages that may result from the use of information (including program listings) contained herein. Our Pragmatic courses, workshops, and other products can help you and your team create better software and have more fun.
    [Show full text]
  • Open Source Used in Quantum SON Suite 18C
    Open Source Used In Cisco SON Suite R18C Cisco Systems, Inc. www.cisco.com Cisco has more than 200 offices worldwide. Addresses, phone numbers, and fax numbers are listed on the Cisco website at www.cisco.com/go/offices. Text Part Number: 78EE117C99-185964180 Open Source Used In Cisco SON Suite R18C 1 This document contains licenses and notices for open source software used in this product. With respect to the free/open source software listed in this document, if you have any questions or wish to receive a copy of any source code to which you may be entitled under the applicable free/open source license(s) (such as the GNU Lesser/General Public License), please contact us at [email protected]. In your requests please include the following reference number 78EE117C99-185964180 Contents 1.1 argparse 1.2.1 1.1.1 Available under license 1.2 blinker 1.3 1.2.1 Available under license 1.3 Boost 1.35.0 1.3.1 Available under license 1.4 Bunch 1.0.1 1.4.1 Available under license 1.5 colorama 0.2.4 1.5.1 Available under license 1.6 colorlog 0.6.0 1.6.1 Available under license 1.7 coverage 3.5.1 1.7.1 Available under license 1.8 cssmin 0.1.4 1.8.1 Available under license 1.9 cyrus-sasl 2.1.26 1.9.1 Available under license 1.10 cyrus-sasl/apsl subpart 2.1.26 1.10.1 Available under license 1.11 cyrus-sasl/cmu subpart 2.1.26 1.11.1 Notifications 1.11.2 Available under license 1.12 cyrus-sasl/eric young subpart 2.1.26 1.12.1 Notifications 1.12.2 Available under license Open Source Used In Cisco SON Suite R18C 2 1.13 distribute 0.6.34
    [Show full text]
  • Javascript: the Good Parts by Douglas Crockford
    1 JavaScript: The Good Parts by Douglas Crockford Publisher: O'Reilly Pub Date: May 2, 2008 Print ISBN-13: 978-0-596-51774-8 Pages: 170 Table of Contents | Index Overview Most programming languages contain good and bad parts, but JavaScript has more than its share of the bad, having been developed and released in a hurry before it could be refined. This authoritative book scrapes away these bad features to reveal a subset of JavaScript that's more reliable, readable, and maintainable than the language as a whole-a subset you can use to create truly extensible and efficient code. Considered the JavaScript expert by many people in the development community, author Douglas Crockford identifies the abundance of good ideas that make JavaScript an outstanding object-oriented programming language-ideas such as functions, loose typing, dynamic objects, and an expressive object literal notation. Unfortunately, these good ideas are mixed in with bad and downright awful ideas, like a programming model based on global variables. When Java applets failed, JavaScript became the language of the Web by default, making its popularity almost completely independent of its qualities as a programming language. In JavaScript: The Good Parts, Crockford finally digs through the steaming pile of good intentions and blunders to give you a detailed look at all the genuinely elegant parts of JavaScript, including: • Syntax • Objects • Functions • Inheritance • Arrays • Regular expressions • Methods • Style • Beautiful features The real beauty? As you move ahead with the subset of JavaScript that this book presents, you'll also sidestep the need to unlearn all the bad parts.
    [Show full text]
  • Portable Database Access for Javascript Applications Using Java 8 Nashorn
    Portable Database Access for JavaScript Applications using Java 8 Nashorn Kuassi Mensah Director, Product Management Server Technologies October 04, 2017 Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 3 Safe Harbor Statement The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 4 Speaker Bio • Director of Product Management at Oracle (i) Java integration with the Oracle database (JDBC, UCP, Java in the database) (ii) Oracle Datasource for Hadoop (OD4H), upcoming OD for Spark, OD for Flink and so on (iii) JavaScript/Nashorn integration with the Oracle database (DB access, JS stored proc, fluent JS ) • MS CS from the Programming Institute of University of Paris • Frequent speaker JavaOne, Oracle Open World, Data Summit, Node Summit, Oracle User groups (UKOUG, DOAG,OUGN, BGOUG, OUGF, GUOB, ArOUG, ORAMEX, Sangam,OTNYathra, China, Thailand, etc), • Author: Oracle Database Programming using Java and Web Services • @kmensah, http://db360.blogspot.com/, https://www.linkedin.com/in/kmensah Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Program Agenda 1 The State of JavaScript 2 The Problem with Database Access 3 JavaScript on the JVM - Nashorn 4 Portable Database Access 5 Wrap Up Copyright © 2017, Oracle and/or its affiliates.
    [Show full text]
  • Json Schema Design Tool
    Json Schema Design Tool Fatherless and noduled Mario rehabilitate her cadies malis palisading and tame morbidly. Undyed Sidney tax alway. Prehuman Raj fribbling presumably and lengthwise, she clotted her cretics saith sneakily. JSON Schema Faker combines JSON Schema standard with fake data generators allowing users to generate fake data that flaw to the schema. Thanks for editing paradigm supports a developer for. Threat force fraud protection for your web applications and APIs. Platform for training, speak is an event will exhibit for our conferences and suppose new business relationships with decision makers and top influencers responsible for API solutions. For a SaaS application we also design and build a normalized schema in order. There myself a command line tool very well exceed a user interface. SSH connections can be established to all supported database systems. You design tool helps you cannot be designed for data for data management for build or erd diagram tool of an initial project. The designer folder template reuse, which you can be designed for new business studio desktop developer portals packed with. JSON, etc. Json tools designed databases is something that is extremely helpful or input element of event tags that it also give you could end of. To be easy, xml tutorial will help you may encode numbers directly from postman in? Use jsonbuddy with which of repeated code itself out in as you can write everything can read. React-json-editor-ajrm json-schema-generator mongoose-schema-jsonschema fluent-schema mock-json-schema simple-json-schema-deref fluent-json-sche. Apis that already have it into xml or create truly connected with your inbox monthly.
    [Show full text]
  • Basic Introduction of Javascript
    JavaScript Primer Basic Introduction of JavaScript JavaScript History • Why (re)introduce JavaScript? o Notorious for being world’s most misunderstood programming language (Douglas Crockford - http://javascript.crockford.com/javascript.html) o Scripting language of the World Wide Web o A very nice dynamic object-oriented general purpose programming language o Java- prefix suggests that JavaScript is somehow related to Java o ECMAScript 3 – first stable version of JavaScript standard (1999) and has remained stable ever since. o We will use ECMAScript 5 (2009) and not ECMAScript 6 (June, 2015) o Unlike most programming languages, the JavaScript language has no concept of input or output. o Browser is most common host environment o JavaScript interpreters found elsewhere – Adobe Acrobat, Photoshop, SVG images, Yahoo’s widget engine, server-side environments as Node.js JavaScript Overview • Lisp in C’s clothing o C-like syntax, including curly braces and clunky for statement makes it look like an ordinary procedural language o JavaScript has more in common with functional languages like Lisp and Scheme: o It has arrays instead of lists, and objects instead of property lists, BUT o Functions are first class objects; it has closures; You get lambdas without having to balance all those parens • Object-Oriented o It has objects which can contain data and methods that act upon that data o Objects can contain other objects o It does not have classes, but it does have constructors which do what classes do o It does not have class-oriented inheritance,
    [Show full text]
  • Javascript Code Quality Analysis
    JavaScript Code Quality Analysis Master’s Thesis Joost-Wim Boekesteijn JavaScript Code Quality Analysis THESIS submitted in partial fulfillment of the requirements for the degree of MASTER OF SCIENCE in COMPUTER SCIENCE by Joost-Wim Boekesteijn born in Hoogeveen, the Netherlands Software Engineering Research Group m-industries Department of Software Technology M-Industries BV Faculty EEMCS, Delft University of Technology Rotterdamseweg 183c Delft, the Netherlands Delft, the Netherlands www.ewi.tudelft.nl www.m-industries.com c 2012 Joost-Wim Boekesteijn. JavaScript Code Quality Analysis Author: Joost-Wim Boekesteijn Student id: 1174355 Email: [email protected] Abstract Static analysis techniques provide a means to detect software errors early in the development process, without actually having to run the software that is being analyzed. These techniques are common for statically typed languages and have found their way into IDEs such as Eclipse and Visual Studio. However, applying the same techniques to dynamically typed languages is much less common. Tool support is less mature and the amount of published research is relatively small. For this project, we design and build a static analyis tool for JavaScript code. We start by giving background information on relevant parts of the JavaScript language, followed by a survey of existing tools and research. In the design of our analysis tool, we achieved a clear separation of responsibilities between the different modules for parsing, analysis, rule definition and reporting. The level of detail in the default reporter makes our tool an ideal candidate for integration in a JavaScript IDE. On the other hand, our tool is also suited for batch analysis of large code collections.
    [Show full text]
  • Rationales and Approaches for Automated Testing of Javascript and Standard ML
    UPTEC IT 14 002 Examensarbete 30 hp Februari 2014 Rationales and Approaches for Automated Testing of JavaScript and Standard ML Emil Wall Abstract Rationales and Approaches for Automated Testing of JavaScript and Standard ML Emil Wall Teknisk- naturvetenskaplig fakultet UTH-enheten The ever increasing complexity of web applications has brought new demands on automated testing of JavaScript, requiring test-driven development to achieve Besöksadress: maintainable code. A contrasting area is testing of Standard ML, another functional Ångströmlaboratoriet Lägerhyddsvägen 1 language but with important differences. Hus 4, Plan 0 The aim of this thesis is to highlight the main problems with testing behaviour of Postadress: applications written in these two programming languages, and how these problems Box 536 751 21 Uppsala relate to development tools and practises. This has been investigated based on the following research questions: What are the testability issues of client-side JavaScript Telefon: and Standard ML? Which considerations need to be made in order to write stable and 018 – 471 30 03 maintainable tests? How does testing culture affect productivity and quality of Telefax: software? 018 – 471 30 00 Through quantitative interviews, implementation of the DescribeSML testing Hemsida: framework and development with tests in different scenarios, answers to these http://www.teknat.uu.se/student questions have been sought. The dynamic nature of JavaScript makes it more important to test whereas there are limitations on how Standard ML can be tested imposed by its static type system and immutability. The conclusion was drawn that the main issues for testability are dependency management, how to test graphical interfaces, and maintaining separation of concerns.
    [Show full text]
  • Introduction to the Course>
    <Introduction to the Course> Lecture 0: Introduction to the Course CPEN400A - Building Modern Web Applications - Winter 2019 Karthik Pattabiraman The Univerity of British Columbia Department of Electrical and Computer Engineering Vancouver, Canada September 5th, 2019 <Introduction to the Course> Instructor: Karthik Pattabiraman 2 Associate Professor at UBC PhD from UIUC (2008) Post-doc at Microsoft Research (2009) Faculty member at UBC (since 2010) Fourth time offerring this course - also created it Research Internet Of Things (IoT) Security and Reliability Error Resilient Systems Software Engineering <Introduction to the Course> Course TAs: 3 Pritam Dash Second year Masters student Aarti Kashyap Second year Masters Student Zitao Chan Second year Masters student Niranjhana Narayanan First year Masters student For any question about the assignments, please ask the TAs. You should prioritize attending and asking questions during lab sessions (later) Alternatively, you are encouraged to ask your questions on Piazza publicly. For private matters, write a private message to us on Piazza. No Email whatsoever - we’ll ignore all email messages. <Introduction to the Course> What’s this course about? 4 Core principles behind building modern web applications Abstractions and design principles Application of technologies such as CSS, HTML, JavaScript, node.js to the above <Introduction to the Course> What’s it not about ? 5 Learning of specific technologies These will most likely get outdated by the time you finish Fast changing field, so new technologies
    [Show full text]
  • Refactoring-Javascript.Pdf
    Refactoring JavaScript Turning Bad Code into Good Code Evan Burchard Refactoring JavaScript by Evan Burchard Copyright © 2017 Evan Burchard. All rights reserved. Printed in the United States of America. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O’Reilly books may be purchased for educational, business, or sales promotion- al use. Online editions are also available for most titles (http://oreilly.com/ safari). For more information, contact our corporate/institutional sales depart- ment: 800-998-9938 or [email protected]. • Editors: Nan Barber and Allyson MacDonald • Production Editor: Kristen Brown • Copyeditor: Rachel Monaghan • Proofreader: Rachel Head • Indexer: Ellen Troutman-Zaig • Interior Designer: David Futato • Cover Designer: Karen Montgomery • Illustrator: Rebecca Demarest • March 2017: First Edition Revision History for the First Edition • 2017-03-10: First Release See http://oreilly.com/catalog/errata.csp?isbn=9781491964927 for release details. The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. Refactoring JavaScript, the cover image, and related trade dress are trademarks of O’Reilly Media, Inc. While the publisher and the author have used good faith efforts to ensure that the information and instructions contained in this work are accurate, the pub- lisher and the author disclaim all responsibility for errors or omissions, includ- ing without limitation responsibility for damages resulting from the use of or re- liance on this work. Use of the information and instructions contained in this work is at your own risk. If any code samples or other technology this work con- tains or describes is subject to open source licenses or the intellectual property rights of others, it is your responsibility to ensure that your use thereof com- plies with such licenses and/or rights.
    [Show full text]
  • Preliminary Report
    Preliminary Report Jonas H¨ubotter December 1, 2020 Abstract TypeScript is a programming language developed by Microsoft and first published in 2012. TypeScript is a superset of JavaScript adding static typing and transpiling to JavaScript. Today, TypeScript is widely used in many areas and supported by many development environments. TypeScript is open-source and its development takes place on GitHub. 1 History To understand TypeScript's roots its necessary to first understand the environment in which the initial idea was born. This is especially true as TypeScript is so deeply rooted in JavaScript. Brendan Eich famously created the first prototype of JavaScript, then named Mocha, in September 1995 in just ten days [Hof19]. The short time it took to de- velop the first version of Mocha meant that it was inherently unfinished. Originally, JavaScript was envisioned as a scripting language to add small effects to websites. The adoption of JavaScript happened quickly. Initially developed at Netscape, Mi- crosoft released JScript in 1996 which was almost identical. This, however, made the need for standardization of the language apparent. In 1997, the first ECMAScript specification was released based on Netscape's JavaScript. Through the early adoption by Netscape and Microsoft's Internet Explorer, the most widely used browsers at the time, JavaScript gained traction very quickly. Soon after its inception it had essentially gained a monopoly on client-side code evaluation in browsers. Already in 1999, with the first draft of ECMAScript version 4, a group led by Mozilla, proposed drastic changes to JavaScript aiming to turn it into a more complete 1 programming language and leaving behind its roots as a scripting language.
    [Show full text]
  • Douglas Crockford More Than One Thing at a Time
    Managing Asynchronicity Douglas Crockford More than one thing at a time. So hard. The Law of Turns • Never block. • Never wait. • Finish fast. The Problems With Threads • Races • Deadlocks • Reliability • Performance • Threads are safest and fastest when they don’t share memory. Event driven systems • Turn based. No pre-emption. • Associate events with actions. • Easy (beginners can do it). • User interfaces. JavaScript is moving to the server. Servers • Message driven, message queue • Actor-like • Simple events don’t fit: – Sequential • A sequence of requests, each dependent on the result of the previous. • Naïve approach: deeply nested handlers – Parallel • Do a bunch of independent things • Naïve approach: do it sequentially – Limited time, cancellation Functional Programming to the Rescue • Futures – Dataflow • Promise • Monads • Arrows • RX • FRP: Flapjax, bacon.js, elm. RQ A JavaScript library for managing asynchronicity in server applications. Four of five methods RQ.sequence(requestors) RQ.parallel(requestors) RQ.parallel(requestors, optionals) RQ.race(requestors) RQ.fallback(requestors) RQ.sequence • Takes an array of requestor functions, calls them one at a time, passing the result of the previous requestor to the next requestor. RQ.sequence([ getUserData, getPreference(), getCustomNav() ]) RQ.parallel • Takes an array of requestor functions, calls them all at once, and gives an array of results. RQ.parallel([ getNav(), getAds(), getMessageOfTheDay() ]) RQ.parallel • Also takes an optional array of optional requestors. Their results will be included if they can be obtained before the required requestors finish. RQ.parallel([ getNav, getAds, getMessageOfTheDay ], [ getHoroscope(), getGossip() ]) RQ.race • Takes an array of requestors, calls them all at once, and gives the result of the first success.
    [Show full text]