Jupyter Tutorial Release 0.8.0

Total Page:16

File Type:pdf, Size:1020Kb

Jupyter Tutorial Release 0.8.0 Jupyter Tutorial Release 0.8.0 Veit Schiele Oct 01, 2021 CONTENTS 1 Introduction 3 1.1 Status...................................................3 1.2 Target group...............................................3 1.3 Structure of the Jupyter tutorial.....................................3 1.4 Why Jupyter?...............................................4 1.5 Jupyter infrastructure...........................................4 2 First steps 5 2.1 Install Jupyter Notebook.........................................5 2.2 Create notebook.............................................7 2.3 Example................................................. 10 2.4 Installation................................................ 13 2.5 Follow us................................................. 15 2.6 Pull-Requests............................................... 15 3 Workspace 17 3.1 IPython.................................................. 17 3.2 Jupyter.................................................. 50 4 Read, persist and provide data 143 4.1 Open data................................................. 143 4.2 Serialisation formats........................................... 144 4.3 Requests................................................. 154 4.4 BeautifulSoup.............................................. 159 4.5 Intake................................................... 160 4.6 PostgreSQL................................................ 174 4.7 NoSQL databases............................................ 199 4.8 Application Programming Interface (API)............................... 208 4.9 Glossary................................................. 221 5 Clean up and validate data 225 5.1 Deduplicate data............................................. 225 5.2 String matching............................................. 230 5.3 Managing missing data with pandas................................... 232 5.4 Scikit Learn preprocessing........................................ 236 5.5 Dask pipeline............................................... 238 5.6 Data validation with voluptuous (schema definitions).......................... 242 5.7 Pandas DataFrame validation with Engarde............................... 248 5.8 Pandas DataFrame validation with Bulwark............................... 250 5.9 TDDA: Test-Driven Data Analysis.................................... 252 i 5.10 Hypothesis: property based testing................................... 256 6 Visualise data 259 7 Refactoring 261 7.1 Check and improve code quality and complexity............................ 261 7.2 Parameterisation and scheduling..................................... 277 7.3 Performance measurement and optimisation............................... 279 8 Create a product 325 8.1 Manage code with Git.......................................... 325 8.2 Manage data with DVC .......................................... 350 8.3 Create packages............................................. 359 8.4 Document................................................ 380 8.5 Licensing................................................. 391 8.6 Citing................................................... 394 8.7 Reproduce environments......................................... 405 8.8 Testing.................................................. 440 8.9 Logging.................................................. 455 9 Create web applications 459 9.1 Dashboards................................................ 459 10 Index 515 Index 517 ii Jupyter Tutorial, Release 0.8.0 Jupyter notebooks are growing in popularity with data scientists and have become the de facto standard for rapid prototyping and exploratory analysis. They inspire experiments and innovations enormously and as well they make the entire research process faster and more reliable. In addition, many additional components are created that expand the original limits of their use and enable new uses. CONTENTS 1 Jupyter Tutorial, Release 0.8.0 2 CONTENTS CHAPTER ONE INTRODUCTION 1.1 Status 1.2 Target group The users of Jupyter notebooks are diverse, from data scientists to data engineers and analysts to system engineers. Their skills and workflows are very different. However, one of the great strengths of Jupyter notebooks is thatthey allow these different experts to work closely together in cross-functional teams. • Data scientists explore data with different parameters and summarise the results. • Data engineers check the quality of the code and make it more robust, efficient and scalable. • Data analysts use the code provided by data engineers to systematically analyse the data. • System engineers provide the research platform based on the JupyterHub on which the other roles can perform their work. In this tutorial, we primarily address system engineers who want to build and operate a platform based on Jupyter notebooks. Then, we explain how this platform can be used effectively by data scientists, data engineers, and analysts. 1.3 Structure of the Jupyter tutorial From Chapter 3, the Jupyter tutorial follows the prototype of a research project: 3. Set up the workspace with the installation and configuration of IPython, Jupyter with nbextensions and ipywid- gets. 4. Collect data, either through a REST API or directly from an HTML page. 5. Cleaning up data is a recurring task that includes Remove or modify redundant, inconsistent, or incorrectly formatted data. 6. Analyse data through exploratory analysis and visualising data. 3 Jupyter Tutorial, Release 0.8.0 7. Refactoring includes parameterisation, validation and performance optimisation, including through concur- rency. 8. Creating a product includes Testing, Logging and Document the methods and functions as well as creating packages. 9. Web applications can either generate dashboards from Jupyter notebooks or require more comprehensive appli- cation logic, such as demonstrated in Bokeh-Plots in Flask einbinden, or provide data via a RESTful API. 1.4 Why Jupyter? How can these diverse tasks be simplified? You will hardly find a tool that covers all of these tasks, and several toolsare often required even for individual tasks. Therefore, on a more abstract level, we are looking for more general patterns for tools and languages with which data can be analysed and visualised and a project can be documented and presented. This is exactly what we are aiming for with Project Jupyter. The Jupyter project started in 2014 with the aim of creating a consistent set of open source tools for scientific research, reproducible workflows, computational narratives and data analysis. In 2017, Jupyter received the ACM Software Systems Award – a prestigious award which, among other things, shares with Unix and the web. To understand why Jupyter notebooks are so successful, let’s take a closer look at the core functions: Jupyter Notebook Format Jupyter Notebooks are an open, JSON-based document format with full records of the user’s sessions and the code they contain. Interactive Computing Protocol The notebook communicates with the computing kernel via the Interactive Com- puting Protocol, an open network protocol based on JSON data via ZMQ and WebSockets. Kernels Kernels are processes that execute interactive code in a specific programming language and return the output to the user. See also: • Jupyter celebrates 20 years 1.5 Jupyter infrastructure A platform for the above-mentioned use cases requires an extensive infrastructure that not only allows the provision of the kernel and the parameterisation, time control and parallelisation of notebooks, but also the uniform provision of resources. This tutorial provides a platform that enables fast, flexible and comprehensive data analysis beyond Jupyter notebooks. At the moment, however, we are not yet going into how it can be expanded to include streaming pipelines and domain- driven data stores. However, you can also create and run the examples in the Jupyter tutorial locally. 4 Chapter 1. Introduction CHAPTER TWO FIRST STEPS 2.1 Install Jupyter Notebook 2.1.1 Install Pipenv pipenv is a dependency manager for Python projects. It uses Pip to install Python packages, but it simplifies dependency management. Pip can be used to install Pipenv, but the --user flag should be used so that it is only available tothat user. This is to prevent system-wide packets from being accidentally overwritten: $ python3 -m pip install --user pipenv Downloading pipenv-2018.7.1-py3-none-any.whl (5.0MB): 5.0MB downloaded Requirement already satisfied (use --upgrade to upgrade): virtualenv in /usr/lib/python3/ ,!dist-packages (from pipenv) Installing collected packages: pipenv, certifi, pip, setuptools, virtualenv-clone ... Successfully installed pipenv certifi pip setuptools virtualenv-clone Cleaning up... Note: If Pipenv is not available in the shell after installation, the USER_BASE/bin directory may have to be specified in PATH. Under Linux and MacOS, USER_BASE can be determined with: $ python3 -m site --user-base /home/veit/.local Then the bin directory has to be appended and added to the PATH. Alternatively, PATH can be set permanently by changing ~/.profile or ~/.bash_profile, in my case: export PATH=/home/veit/.local/bin:$PATH • Under Windows, the directory can be determined with py -m site --user-site and then site-packages can be replaced by Scripts. This then results in, for example: C:\Users\veit\AppData\Roaming\Python36\Scripts In order to be permanently available, this path can be entered under ``PATH`` in the control panel. 5 Jupyter Tutorial, Release 0.8.0 Further information on user-specific installation can
Recommended publications
  • Ironpython in Action
    IronPytho IN ACTION Michael J. Foord Christian Muirhead FOREWORD BY JIM HUGUNIN MANNING IronPython in Action Download at Boykma.Com Licensed to Deborah Christiansen <[email protected]> Download at Boykma.Com Licensed to Deborah Christiansen <[email protected]> IronPython in Action MICHAEL J. FOORD CHRISTIAN MUIRHEAD MANNING Greenwich (74° w. long.) Download at Boykma.Com Licensed to Deborah Christiansen <[email protected]> For online information and ordering of this and other Manning books, please visit www.manning.com. The publisher offers discounts on this book when ordered in quantity. For more information, please contact Special Sales Department Manning Publications Co. Sound View Court 3B fax: (609) 877-8256 Greenwich, CT 06830 email: [email protected] ©2009 by Manning Publications Co. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by means electronic, mechanical, photocopying, or otherwise, without prior written permission of the publisher. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in the book, and Manning Publications was aware of a trademark claim, the designations have been printed in initial caps or all caps. Recognizing the importance of preserving what has been written, it is Manning’s policy to have the books we publish printed on acid-free paper, and we exert our best efforts to that end. Recognizing also our responsibility to conserve the resources of our planet, Manning books are printed on paper that is at least 15% recycled and processed without the use of elemental chlorine.
    [Show full text]
  • The Essentials of Stackless Python Tuesday, 10 July 2007 10:00 (30 Minutes)
    EuroPython 2007 Contribution ID: 62 Type: not specified The Essentials of Stackless Python Tuesday, 10 July 2007 10:00 (30 minutes) This is a re-worked, actualized and improved version of my talk at PyCon 2007. Repeating the abstract: As a surprise for people who think they know Stackless, we present the new Stackless implementation For PyPy, which has led to a significant amount of new insight about parallel programming and its possible implementations. We will isolate the known Stackless as a special case of a general concept. This is a Stackless, not a PyPy talk. But the insights presented here would not exist without PyPy’s existance. Summary Stackless has been around for a long time now. After several versions with different goals in mind, the basic concepts of channels and tasklets turned out to be useful abstractions, and since many versions, Stackless is only ported from version to version, without fundamental changes to the principles. As some spin-off, Armin Rigo invented Greenlets at a Stackless sprint. They are some kind of coroutines and a bit of special semantics. The major benefit is that Greenlets can runon unmodified CPython. In parallel to that, the PyPy project is in its fourth year now, and one of its goals was Stackless integration as an option. And of course, Stackless has been integrated into PyPy in a very nice and elegant way, much nicer than expected. During the design of the Stackless extension to PyPy, it turned out, that tasklets, greenlets and coroutines are not that different in principle, and it was possible to base all known parallel paradigms on one simple coroutine layout, which is as minimalistic as possible.
    [Show full text]
  • Python Programming
    Python Programming Wikibooks.org June 22, 2012 On the 28th of April 2012 the contents of the English as well as German Wikibooks and Wikipedia projects were licensed under Creative Commons Attribution-ShareAlike 3.0 Unported license. An URI to this license is given in the list of figures on page 149. If this document is a derived work from the contents of one of these projects and the content was still licensed by the project under this license at the time of derivation this document has to be licensed under the same, a similar or a compatible license, as stated in section 4b of the license. The list of contributors is included in chapter Contributors on page 143. The licenses GPL, LGPL and GFDL are included in chapter Licenses on page 153, since this book and/or parts of it may or may not be licensed under one or more of these licenses, and thus require inclusion of these licenses. The licenses of the figures are given in the list of figures on page 149. This PDF was generated by the LATEX typesetting software. The LATEX source code is included as an attachment (source.7z.txt) in this PDF file. To extract the source from the PDF file, we recommend the use of http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ utility or clicking the paper clip attachment symbol on the lower left of your PDF Viewer, selecting Save Attachment. After extracting it from the PDF file you have to rename it to source.7z. To uncompress the resulting archive we recommend the use of http://www.7-zip.org/.
    [Show full text]
  • Goless Documentation Release 0.6.0
    goless Documentation Release 0.6.0 Rob Galanakis July 11, 2014 Contents 1 Intro 3 2 Goroutines 5 3 Channels 7 4 The select function 9 5 Exception Handling 11 6 Examples 13 7 Benchmarks 15 8 Backends 17 9 Compatibility Details 19 9.1 PyPy................................................... 19 9.2 Python 2 (CPython)........................................... 19 9.3 Python 3 (CPython)........................................... 19 9.4 Stackless Python............................................. 20 10 goless and the GIL 21 11 References 23 12 Contributing 25 13 Miscellany 27 14 Indices and tables 29 i ii goless Documentation, Release 0.6.0 • Intro • Goroutines • Channels • The select function • Exception Handling • Examples • Benchmarks • Backends • Compatibility Details • goless and the GIL • References • Contributing • Miscellany • Indices and tables Contents 1 goless Documentation, Release 0.6.0 2 Contents CHAPTER 1 Intro The goless library provides Go programming language semantics built on top of gevent, PyPy, or Stackless Python. For an example of what goless can do, here is the Go program at https://gobyexample.com/select reimplemented with goless: c1= goless.chan() c2= goless.chan() def func1(): time.sleep(1) c1.send(’one’) goless.go(func1) def func2(): time.sleep(2) c2.send(’two’) goless.go(func2) for i in range(2): case, val= goless.select([goless.rcase(c1), goless.rcase(c2)]) print(val) It is surely a testament to Go’s style that it isn’t much less Python code than Go code, but I quite like this. Don’t you? 3 goless Documentation, Release 0.6.0 4 Chapter 1. Intro CHAPTER 2 Goroutines The goless.go() function mimics Go’s goroutines by, unsurprisingly, running the routine in a tasklet/greenlet.
    [Show full text]
  • Faster Cpython Documentation Release 0.0
    Faster CPython Documentation Release 0.0 Victor Stinner January 29, 2016 Contents 1 FAT Python 3 2 Everything in Python is mutable9 3 Optimizations 13 4 Python bytecode 19 5 Python C API 21 6 AST Optimizers 23 7 Old AST Optimizer 25 8 Register-based Virtual Machine for Python 33 9 Read-only Python 39 10 History of Python optimizations 43 11 Misc 45 12 Kill the GIL? 51 13 Implementations of Python 53 14 Benchmarks 55 15 PEP 509: Add a private version to dict 57 16 PEP 510: Specialized functions with guards 59 17 PEP 511: API for AST transformers 61 18 Random notes about PyPy 63 19 Talks 65 20 Links 67 i ii Faster CPython Documentation, Release 0.0 Contents: Contents 1 Faster CPython Documentation, Release 0.0 2 Contents CHAPTER 1 FAT Python 1.1 Intro The FAT Python project was started by Victor Stinner in October 2015 to try to solve issues of previous attempts of “static optimizers” for Python. The main feature are efficient guards using versionned dictionaries to check if something was modified. Guards are used to decide if the specialized bytecode of a function can be used or not. Python FAT is expected to be FAT... maybe FAST if we are lucky. FAT because it will use two versions of some functions where one version is specialised to specific argument types, a specific environment, optimized when builtins are not mocked, etc. See the fatoptimizer documentation which is the main part of FAT Python. The FAT Python project is made of multiple parts: 3 Faster CPython Documentation, Release 0.0 • The fatoptimizer project is the static optimizer for Python 3.6 using function specialization with guards.
    [Show full text]
  • Performance Research and Optimization on Cpython's Interpreter
    Proceedings of the Federated Conference on DOI: 10.15439/2015F139 Computer Science and Information Systems pp. 435–441 ACSIS, Vol. 5 Performance Research and Optimization on CPython’s Interpreter Huaxiong Cao, Naijie Gu1, Kaixin Ren, and Yi Li 1) Department of Computer Science and Technology, University of Science and Technology of China 2) Anhui Province Key Laboratory of Computing and Communication Software 3) Institute of Advanced Technology, University of Science and Technology of China Hefei, China, 230027 Email: [email protected], [email protected] Abstract—In this paper, the performance research on monitoring programs’ behavior and using this information to CPython’s latest interpreter is presented, concluding that drive optimization decisions [1]. The dominant concepts that bytecode dispatching takes about 25 percent of total execution have influenced effective optimization technologies in today’s time on average. Based on this observation, a novel bytecode virtual machines include JIT compilers, interpreters, and their dispatching mechanism is proposed to reduce the time spent on this phase to a minimum. With this mechanism, the blocks integrations. associated with each kind of bytecodes are rewritten in JIT (just-in-time) techniques exploit the well-known fact that hand-tuned assembly, their opcodes are renumbered, and their large scale programs usually spend the majority of time on a memory spaces are rescheduled. With these preparations, this small fraction of the code [2]. During the execution of new bytecode dispatching mechanism replaces the interpreters, they record the bytecode blocks which have been time-consuming memory reading operations with rapid executed more than a specified number of times, and cache the operations on registers.
    [Show full text]
  • Pdf for a Detailed Explanation, Along with Various Techniques for Debouncing
    MicroPython Documentation Release 1.11 Damien P. George, Paul Sokolovsky, and contributors May 29, 2019 CONTENTS i ii CHAPTER ONE MICROPYTHON LIBRARIES Warning: Important summary of this section • MicroPython implements a subset of Python functionality for each module. • To ease extensibility, MicroPython versions of standard Python modules usually have u (“micro”) prefix. • Any particular MicroPython variant or port may miss any feature/function described in this general docu- mentation (due to resource constraints or other limitations). This chapter describes modules (function and class libraries) which are built into MicroPython. There are a few categories of such modules: • Modules which implement a subset of standard Python functionality and are not intended to be extended by the user. • Modules which implement a subset of Python functionality, with a provision for extension by the user (via Python code). • Modules which implement MicroPython extensions to the Python standard libraries. • Modules specific to a particular MicroPython port and thus not portable. Note about the availability of the modules and their contents: This documentation in general aspires to describe all modules and functions/classes which are implemented in MicroPython project. However, MicroPython is highly configurable, and each port to a particular board/embedded system makes available only a subset of MicroPython libraries. For officially supported ports, there is an effort to either filter out non-applicable items, or mark individual descriptions with “Availability:” clauses describing which ports provide a given feature. With that in mind, please still be warned that some functions/classes in a module (or even the entire module) described in this documentation may be unavailable in a particular build of MicroPython on a particular system.
    [Show full text]
  • BSCW Administrator Documentation Release 7.4.1
    BSCW Administrator Documentation Release 7.4.1 OrbiTeam Software Mar 11, 2021 CONTENTS 1 How to read this Manual1 2 Installation of the BSCW server3 2.1 General Requirements........................................3 2.2 Security considerations........................................4 2.3 EU - General Data Protection Regulation..............................4 2.4 Upgrading to BSCW 7.4.1......................................5 2.4.1 Upgrading on Unix..................................... 13 2.4.2 Upgrading on Windows................................... 17 3 Installation procedure for Unix 19 3.1 System requirements......................................... 19 3.2 Installation.............................................. 20 3.3 Software for BSCW Preview..................................... 26 3.4 Configuration............................................. 30 3.4.1 Apache HTTP Server Configuration............................ 30 3.4.2 BSCW instance configuration............................... 35 3.4.3 Administrator account................................... 36 3.4.4 De-Installation....................................... 37 3.5 Database Server Startup, Garbage Collection and Backup..................... 37 3.5.1 BSCW Startup....................................... 38 3.5.2 Garbage Collection..................................... 38 3.5.3 Backup........................................... 38 3.6 Folder Mail Delivery......................................... 39 3.6.1 BSCW mail delivery agent (MDA)............................. 39 3.6.2 Local Mail Transfer Agent
    [Show full text]
  • The Pisharp IDE for Raspberry PI
    http://researchcommons.waikato.ac.nz/ Research Commons at the University of Waikato Copyright Statement: The digital copy of this thesis is protected by the Copyright Act 1994 (New Zealand). The thesis may be consulted by you, provided you comply with the provisions of the Act and the following conditions of use: Any use you make of these documents or images must be for research or private study purposes only, and you may not make them available to any other person. Authors control the copyright of their thesis. You will recognise the author’s right to be identified as the author of the thesis, and due acknowledgement will be made to the author where appropriate. You will obtain the author’s permission before publishing any material from the thesis. The PiSharp IDE for Raspberry PI Bo Si This thesis is submitted in partial fulfillment of the requirements for the Degree of Master of Science at the University of Waikato. August 2017 © 2017 Bo Si Abstract The purpose of the PiSharp project was to build an IDE that is usable for beginners developing XNA-like programs on a Raspberry-Pi. The system developed is capable of 1. Managing and navigating a directory of source files 2. Display a file in a code text editor 3. Display code with syntax highlight 4. Automatically discovering program library structure from code namespaces 5. Compiling libraries and programs automatically with recompilation avoided if source code has not been updated 6. Compiling and running from the IDE 7. Editing more than one file at a time 8.
    [Show full text]
  • Antonio Ferraro Software Developer / IT Professional
    Antonio Ferraro Software Developer / IT Professional Rue Du Village, 6, 4600 - Lanaye – Belgium +32 4 3791181 +32 479 122523 [email protected] → PROFESSIONAL PROFILE • Independent, experienced, committed IT professional. • Eager to learn new tools and new technologies. • Positive, adaptable, respectful and team-minded. • Extensive experience in the field of NATO Military Tactical Data Links. • Other: ◦ Driving License type B ◦ NATO Security Clearance: NS ◦ Linkedin profile: https://www.linkedin.com/in/antonio-ferraro-860b1825 ◦ Company’s web page: http://safits.be → IT / PROFESSIONAL SKILLS • Programming Languages: Java (Eclipse RCP, Swing, Spring, Hibernate...), C, Python (Flask, Pandas...), R, some C++ and Javascript, VB / VBA, Pascal (Delphi and other dialects), Powerbuilder, XML/HTML/CSS/Bootstrap, data representation in XML/JSON. • Scripting: Perl, bash • Databases: MS SQL, MySQL, Postgresql, SQLLite. • IDEs: Eclipse (for Java and C), IntelliJ Idea. Pycharm/Atom/Wing IDE (Python), Jupyter Notebook (Python, R, Nodes), Rstudio (R), Source Navigator and more. • Virtualization: VirtualBox, Vmware. • OS Administration: Oracle Solaris 8, 10, 11, UNIX/Linux (Red Hat and Ubuntu families current versions), Windows up to 2012, OS User Experience: All of the above and Mac OS X, IOS, Android. • Version Control: Git, SVN, CVS, RCS, MS Sharepoint 2016. • Network Administration: CISCO and network design and administration (CCNA), RAD Megaplex Configuration and Administration, Network services design / reorganization. • CMSs: Wordpress, Joomla,
    [Show full text]
  • Comparative Studies of Six Programming Languages
    Comparative Studies of Six Programming Languages Zakaria Alomari Oualid El Halimi Kaushik Sivaprasad Chitrang Pandit Concordia University Concordia University Concordia University Concordia University Montreal, Canada Montreal, Canada Montreal, Canada Montreal, Canada [email protected] [email protected] [email protected] [email protected] Abstract Comparison of programming languages is a common topic of discussion among software engineers. Multiple programming languages are designed, specified, and implemented every year in order to keep up with the changing programming paradigms, hardware evolution, etc. In this paper we present a comparative study between six programming languages: C++, PHP, C#, Java, Python, VB ; These languages are compared under the characteristics of reusability, reliability, portability, availability of compilers and tools, readability, efficiency, familiarity and expressiveness. 1. Introduction: Programming languages are fascinating and interesting field of study. Computer scientists tend to create new programming language. Thousand different languages have been created in the last few years. Some languages enjoy wide popularity and others introduce new features. Each language has its advantages and drawbacks. The present work provides a comparison of various properties, paradigms, and features used by a couple of popular programming languages: C++, PHP, C#, Java, Python, VB. With these variety of languages and their widespread use, software designer and programmers should to be aware
    [Show full text]
  • Json Schema Python Package
    Json Schema Python Package Epiphytical and irascible Stanly often tetanized some caraway astern or recap terminably. Alicyclic or sepaloid, Rajeev never lambastes any paedophilia! Lubricious and unperilous Martin unsolders while tonish Sherwin uprears her savers first-class and vitiates ungovernably. Thats it uses json package The jsonschema package must be installed separately in order against use this decorator Combining schemas Understanding JSON Schema 70 Apr 12 2020. It is in xml processing of specific use regular expressions are examples show you can create a mandatory conversion tactic can see full list. Any changes take effect, our example below is there is a given types, free edition of code example above, happy testing process generated from any. By which require that in addition, and click actions on disk, but you have a standard. Learn about JSON Schemas and how you agree use sometimes to build your own JSON Validator Server using Python and Django. You maybe transitive dependencies. The instance object. You really fast json package manager for packaging into a packages in python library in json schema, if there any errors with. Build Your Own Schema Registry Server Using Python and. Jsonchema Custom type format and validator in Python. Debian - Details of package python3-jsonschema in stretch. If you to your messy. Pyarrow datatype. In go to properly formatted string. Validate an XML or JSON file against a LIXI2 Schema Validate a LIXI package XML or JSON against a Schematron file that contains business. See if not build one. Lightweight data to configure canonical logging, seems somewhat different tasks that contain all news about contact search.
    [Show full text]