Bachelor Degree Project Webassembly Vs. Its Predecessors

Total Page:16

File Type:pdf, Size:1020Kb

Bachelor Degree Project Webassembly Vs. Its Predecessors Bachelor Degree Project WebAssembly vs. its predecessors A comparison of technologies Author: Stefan Fredriksson Supervisor: Jesper Andersson Semester: VT 2020 Subject: Computer Science Abstract For many years it has only been HTML, CSS, and JavaScript that have been native to the Web. In December 2019, WebAssembly joined them as the fourth language to run natively on the Web. This thesis compared WebAssembly to the technologies ActiveX, Java applets, Asm.js, and Portable Native Client (PNaCl) in terms of their performance, security, and browser support. The reason why this was an interesting topic to investigate was to determine in what areas WebAssembly is an improvement over previous similar technologies. Another goal was to provide companies that still use older technologies with an indication as to whether or not it is worth upgrading their system with newer technology. To answer the problem, the thesis mainly focused on comparing the performance of the technologies through a controlled experiment. The thesis also aimed at getting a glimpse of the security differences between the technologies by the use of a literature study. The thesis showed that PNaCl was the technology with the best performance. However, WebAssembly had better browser support. Also, PNaCl is deprecated while WebAssembly is heavily supported and could potentially be further optimized. Keywords: WebAssembly, wasm, ActiveX, Java applet, applet, Asm.js, Portable Native Client, PNaCl, Performance, Security, Browser support, Dynamic Web Preface I would like to thank my supervisor during this thesis, Jesper Andersson, for guiding me and coming up with ideas I would not have had without him. I would also like to thank my peers who reviewed the thesis during its different stages. Contents List of Figures List of Tables List of Listings 1 Introduction1 1.1 Background.................................1 1.2 Related work................................2 1.3 Problem formulation............................3 1.4 Objectives..................................4 1.5 Scope/Limitation..............................4 1.6 Target group.................................4 1.7 Outline...................................4 2 Method5 2.1 Scientific Approach.............................5 2.1.1 Literature study...........................5 2.1.2 Controlled Experiment.......................5 2.2 Reliability and Validity...........................6 3 Dynamic web performance7 3.1 Dynamic web................................7 3.2 Technologies server-side..........................8 3.3 Technology overview............................8 3.3.1 Java Applets............................8 3.3.2 ActiveX...............................9 3.3.3 Asm.js............................... 10 3.3.4 Portable Native Client....................... 11 3.3.5 WebAssembly........................... 12 3.4 Performance Testing............................ 12 4 Data Collection 14 4.1 Design.................................... 14 4.1.1 Design for collecting performance data.............. 14 4.1.2 Design for collecting data on security............... 17 4.2 Performance experiment preparations................... 18 4.2.1 Browser settings.......................... 18 4.2.2 Compilation tools.......................... 18 4.3 Performance test execution......................... 19 4.3.1 Readying machine for testing................... 19 4.3.2 Running the tests.......................... 20 4.3.3 Hardware and Software....................... 20 5 Results 22 5.1 Performance experiment.......................... 22 5.1.1 Result explanation......................... 22 5.1.2 Fibonacci application........................ 22 5.1.3 Array application.......................... 25 5.1.4 Numeric application........................ 28 5.2 Qualitative results.............................. 31 5.2.1 Security............................... 31 5.2.2 Browser support.......................... 34 6 Analysis 35 6.1 Performance experiment.......................... 35 6.1.1 Execution time........................... 35 6.1.2 Load time.............................. 38 6.1.3 CPU usage............................. 41 6.1.4 Memory usage........................... 44 6.2 Qualitative results.............................. 47 6.2.1 Security............................... 47 6.2.2 Browser support.......................... 48 7 Discussion 49 7.1 Execution time & Load time........................ 49 7.2 CPU & RAM Usage............................ 50 7.3 Security................................... 50 7.4 Browser support............................... 51 7.5 Summary.................................. 51 8 Conclusions & Future work 53 References 55 A Appendix 1A B Appendix 2B C Appendix 3C List of Figures 3.1 High-level flow of a server-side scripting application............7 3.2 High-level flow of a client-side scripting application............8 3.3 High-level flow of a Java applet application.................9 3.4 High-level flow of an ActiveX application.................. 10 3.5 High-level flow of an Asm.js application.................. 11 3.6 High-level flow of a Portable Native Client application........... 11 3.7 High-level flow of a WebAssembly application............... 12 4.1 Design of the test process flow........................ 17 5.1 Execution times of the Fibonacci application................ 23 5.2 Load times of the Fibonacci application................... 23 5.3 CPU usage of the Fibonacci application running on the desktop...... 24 5.4 CPU usage of the Fibonacci application running on the laptop....... 24 5.5 Memory usage of the Fibonacci application running on the desktop.... 25 5.6 Memory usage of the Fibonacci application running on the laptop..... 25 5.7 Execution times of the Array application.................. 26 5.8 Load times of the Array application..................... 26 5.9 CPU usage of the Array application running on the desktop........ 27 5.10 CPU usage of the Array application running on the laptop......... 27 5.11 Memory usage of the Array application running on the desktop...... 28 5.12 Memory usage of the Array application running on the laptop....... 28 5.13 Execution times of the Numeric application................. 29 5.14 Load times of the Numeric application................... 29 5.15 CPU usage of the Numeric application running on the desktop....... 30 5.16 CPU usage of the Numeric application running on the laptop........ 30 5.17 Memory usage of the Numeric application running on the desktop..... 31 5.18 Memory usage of the Numeric application running on the laptop...... 31 6.1 Box plot showing the variance of execution times for the different tech- nologies running the Fibonacci application................. 36 6.2 Box plot showing the variance of execution times for the different tech- nologies running the array application.................... 37 6.3 Box plot showing the variance of execution times for the different tech- nologies running the numeric application.................. 38 6.4 Box plot showing the variance of load times for the different technologies running the Fibonacci application...................... 39 6.5 Box plot showing the variance of load times for the different technologies running the array application......................... 40 6.6 Box plot showing the variance of load times for the different technologies running the numeric application....................... 41 6.7 Box plot showing the variance of CPU usage for the different technologies running the Fibonacci application...................... 42 6.8 Box plot showing the variance of CPU usage for the different technologies running the array application......................... 43 6.9 Box plot showing the variance of CPU usage for the different technologies running the numeric application....................... 44 6.10 Box plot showing the variance of memory usage for the different tech- nologies running the Fibonacci application................. 45 6.11 Box plot showing the variance of memory usage for the different tech- nologies running the array application.................... 46 6.12 Box plot showing the variance of memory usage for the different tech- nologies running the numeric application.................. 47 C.1 Execution times of the Fibonacci application showing the execution time per browser..................................C C.2 Load times of the Fibonacci application showing the load time per browser.C C.3 Execution times of the Array application showing the execution time per browser....................................D C.4 Load times of the Array application showing the load time per browser..D C.5 Execution times of the Numeric application showing the execution time per browser..................................E C.6 Load times of the Numeric application showing the load time per browser.E List of Tables 4.1 Keywords used during the literature study.................. 18 4.2 Specification of the machines that the performance tests were executed on. 20 4.3 The versions of the software used in this study............... 21 5.1 Browser support for each technology.................... 34 Listings 1 Installing the Emscripten SDK.......................A 2 WebAssembly compilation command for the array application......A 3 Makefile of the array PNaCl application..................A 4 Installing the NaCl SDK..........................B 5 Make.bat file content of a PNaCl application................B 6 PNaCl compilation commands.......................B 7 Installing curl for Visual Studio 2017....................B This thesis is the final product of a bachelor degree
Recommended publications
  • Differential Fuzzing the Webassembly
    Master’s Programme in Security and Cloud Computing Differential Fuzzing the WebAssembly Master’s Thesis Gilang Mentari Hamidy MASTER’S THESIS Aalto University - EURECOM MASTER’STHESIS 2020 Differential Fuzzing the WebAssembly Fuzzing Différentiel le WebAssembly Gilang Mentari Hamidy This thesis is a public document and does not contain any confidential information. Cette thèse est un document public et ne contient aucun information confidentielle. Thesis submitted in partial fulfillment of the requirements for the degree of Master of Science in Technology. Antibes, 27 July 2020 Supervisor: Prof. Davide Balzarotti, EURECOM Co-Supervisor: Prof. Jan-Erik Ekberg, Aalto University Copyright © 2020 Gilang Mentari Hamidy Aalto University - School of Science EURECOM Master’s Programme in Security and Cloud Computing Abstract Author Gilang Mentari Hamidy Title Differential Fuzzing the WebAssembly School School of Science Degree programme Master of Science Major Security and Cloud Computing (SECCLO) Code SCI3084 Supervisor Prof. Davide Balzarotti, EURECOM Prof. Jan-Erik Ekberg, Aalto University Level Master’s thesis Date 27 July 2020 Pages 133 Language English Abstract WebAssembly, colloquially known as Wasm, is a specification for an intermediate representation that is suitable for the web environment, particularly in the client-side. It provides a machine abstraction and hardware-agnostic instruction sets, where a high-level programming language can target the compilation to the Wasm instead of specific hardware architecture. The JavaScript engine implements the Wasm specification and recompiles the Wasm instruction to the target machine instruction where the program is executed. Technically, Wasm is similar to a popular virtual machine bytecode, such as Java Virtual Machine (JVM) or Microsoft Intermediate Language (MSIL).
    [Show full text]
  • Emscripten: an LLVM to Javascript Compiler
    Emscripten: An LLVM to JavaScript Compiler Alon Zakai Mozilla What? Why? Compiling to JavaScript ● The web is everywhere – PCs to iPads – No plugins, no installation required – Built on standards ● The web runs JavaScript Existing Compilers to JavaScript ● Google Web Toolkit: Java (Gmail, etc.) ● CoffeeScript ● Pyjamas: Python ● SCM2JS: Scheme ● JSIL: .NET bytecode ● (and many more) ● But C and C++ are missing! Emscripten ● Enables compiling C and C++ into JavaScript ● Written in JavaScript ● Open source http://emscripten.org https://github.com/kripken/emscripten Demos! ● Bullet ● SQLite ● Python, Ruby, Lua ● Real-world code – Large, complex codebases ● Manual ports exist – Typically partial and not up to date The Big Picture C or C++ LLVM Bitcode JavaScript Low Level Virtual Machine (LLVM) ● A compiler project (cf. GCC) ● Intermediate Representation: LLVM bitcode – Very well documented – Great tools ● Much easier to compile LLVM bitcode than compile C or C++ directly! How? Code Comparison #include <stdio.h> int main() { printf(“hello, world!\n”); return 0; } Code Comparison @.str = private unnamed_addr constant [15 x i8] c"hello, world!\0A\00", align 1 define i32 @main() { entry: %retval = alloca i32, align 4 call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0)) store i32 0, i32* %retval ret i32 %retval } Code Comparison define i32 @main() { function _main() { entry: %retval = alloca i32, var _retval; align 4 call i32 (i8*, ...)* _printf (..); @printf (..) store i32 0, i32* _retval = 0; %retval ret
    [Show full text]
  • Machine Learning in the Browser
    Machine Learning in the Browser The Harvard community has made this article openly available. Please share how this access benefits you. Your story matters Citable link http://nrs.harvard.edu/urn-3:HUL.InstRepos:38811507 Terms of Use This article was downloaded from Harvard University’s DASH repository, and is made available under the terms and conditions applicable to Other Posted Material, as set forth at http:// nrs.harvard.edu/urn-3:HUL.InstRepos:dash.current.terms-of- use#LAA Machine Learning in the Browser a thesis presented by Tomas Reimers to The Department of Computer Science in partial fulfillment of the requirements for the degree of Bachelor of Arts in the subject of Computer Science Harvard University Cambridge, Massachusetts March 2017 Contents 1 Introduction 3 1.1 Background . .3 1.2 Motivation . .4 1.2.1 Privacy . .4 1.2.2 Unavailable Server . .4 1.2.3 Simple, Self-Contained Demos . .5 1.3 Challenges . .5 1.3.1 Performance . .5 1.3.2 Poor Generality . .7 1.3.3 Manual Implementation in JavaScript . .7 2 The TensorFlow Architecture 7 2.1 TensorFlow's API . .7 2.2 TensorFlow's Implementation . .9 2.3 Portability . .9 3 Compiling TensorFlow into JavaScript 10 3.1 Motivation to Compile . 10 3.2 Background on Emscripten . 10 3.2.1 Build Process . 12 3.2.2 Dependencies . 12 3.2.3 Bitness Assumptions . 13 3.2.4 Concurrency Model . 13 3.3 Experiences . 14 4 Results 15 4.1 Benchmarks . 15 4.2 Library Size . 16 4.3 WebAssembly . 17 5 Developer Experience 17 5.1 Universal Graph Runner .
    [Show full text]
  • Browser Security Information
    Browser Security Information Customer security is important to us. Our top priority is to protect the privacy of your personal account information and your financial transactions FirstLine Mortgages is leading the way in Internet banking services and uses several layers of robust security technology to help ensure the confidentiality of transactions across the Internet. The first security level begins with your Web browser. When you access FirstLine Mortgages Internet Site , your browser is checked to ensure that it meets our minimum requirements. Additionally, we only allow customers with browsers that use 128-bit encryption (one of the highest levels of browser security available today) to bank on our web site. But, even with this validation, there are other precautions you should follow to maximize your protection. You have a responsibility to ensure your own security. The browser validation will verify the browser type you are using, your browser encryption level, the version of Netscape or Microsoft browser, as well as Javascript and cookies being enabled. To access -FirstLine Mortgages Internet site , you need to use: • a Netscape browser version 4.06 or better with a minimum 128-bit encryption technology • a Microsoft browser version 4.01 SP2 or better with a minimum 128-bit encryption technology • Javascript (please see below for more information about how to check and enable Javascript support) • Cookies (see below) If your browser does not meet all of these requirements, you will need to upgrade your browser to access the FirstLine Internet Site . To upgrade your browser, select the Netscape or Microsoft button below and download the latest browser version.
    [Show full text]
  • SOAP Plug-In
    User Guide SOAP Plug-in Release 5.0 © 2010 Avaya Inc. All Rights Reserved. Notice While reasonable efforts were made to ensure that the information in this document was complete and accurate at the time of printing, Avaya Inc. can assume no liability for any errors. Changes and corrections to the information in this document may be incorporated in future releases. Documentation disclaimer Avaya Inc. is not responsible for any modifications, additions, or deletions to the original published version of this documentation unless such modifications, additions, or deletions were performed by Avaya. Link disclaimer Avaya Inc. is not responsible for the contents or reliability of any linked Web sites referenced elsewhere within this Documentation, and Avaya does not necessarily endorse the products, services, or information described or offered within them. We cannot guarantee that these links will work all of the time and we have no control over the availability of the linked pages. License USE OR INSTALLATION OF THE PRODUCT INDICATES THE END USER'S ACCEPTANCE OF THE TERMS SET FORTH HEREIN AND THE GENERAL LICENSE TERMS AVAILABLE ON THE AVAYA WEBSITE AT http://support.avaya.com/LicenseInfo/ ("GENERAL LICENSE TERMS"). IF YOU DO NOT WISH TO BE BOUND BY THESE TERMS, YOU MUST RETURN THE PRODUCT(S) TO THE POINT OF PURCHASE WITHIN TEN (10) DAYS OF DELIVERY FOR A REFUND OR CREDIT. Avaya grants End User a license within the scope of the license types described below. The applicable number of licenses and units of capacity for which the license is granted will be one (1), unless a different number of licenses or units of capacity is specified in the Documentation or other materials available to End User.
    [Show full text]
  • Embedded Linux for Thin Clients Next Generation (Elux® NG) Version 1.25
    Embedded Linux for Thin Clients Next Generation (eLux® NG) Version 1.25 Administrator’s Guide Build Nr.: 23 UniCon Software GmbH www.myelux.com eLux® NG Information in this document is subject to change without notice. Companies, names and data used in examples herein are fictitious unless otherwise noted. No part of this document may be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose, without the express consent of UniCon Software GmbH. © by UniCon 2005 Software GmbH. All rights reserved eLux is a registered trademark of UniCon Software GmbH in Germany. Accelerated-X is a trademark of Xi Graphics, Inc. Adobe, Acrobat Reader and PostScript are registered trademarks of Adobe Systems Incorporated in the United States and/or other countries. Broadcom is a registered trademark of Broadcom Corporation in the U.S. and/or other countries. CardOS is a registered trademark and CONNECT2AIR is a trademark of Siemens AG in Germany and/or other countries. Cisco and Aironet are registered trademarks of Cisco Systems, Inc. and/or its affiliates in the U.S. and certain other countries. Citrix, Independent Computing Architecture (ICA), Program Neighborhood, MetaFrame, and MetaFrame XP are registered trademarks or trademarks of Citrix Systems, Inc. in the United States and other countries. CUPS and the Common UNIX Printing System are the trademark property of Easy Software Products. DivX is a trademark of Project Mayo. Ericom and PowerTerm are registered trademarks of Ericom Software in the United States and/or other countries. Gemplus is a registered trademark and GemSAFE a trademark of Gemplus.
    [Show full text]
  • Asp Net Jquery Ajax Json Example Wersja
    Asp Net Jquery Ajax Json Example Conquering and exculpatory Thorsten wited clumsily and prickle his heed unforcedly and soothingly. Unanswered and numinous Graig never conscripts observably when Bela shoals his luffas. Oligarchic and ben Ashton held so rifely that Simon sticky his bajada. Dbcontect classes to help, i am glad you will send ajax call will execute and the feedback. Scheduled tasks in asp jquery example will help make them together with an array of products table that will decrease automatically. Provides the asp net jquery json helper method, what the about. Via json format in asp net example given by microsoft json request is given by default name to your network have your data has a formatted result. Comment is shown the asp ajax json request to understand concept is the project, the article we click on the product details. Loads data types, ajax example is, the other articles. Into our method in asp net example we can get request and suggestions will not the future of response, for this by both the _layout. We should then the asp net ajax methods of errors potentially introduced by using chart with razor page without updating the class as an array of the div tag. Developer will call with jquery ajax json or with my things, then passes the database and the body. Message using and the example is the client side method can be the console. Year passed to use jquery json data you know what follows is providing different types in the year. Installing a controller folder and a button to products model, simple example below is, and then the _layout.
    [Show full text]
  • But Were Afraid to Ask!)
    05_576593 ch01.qxd 10/12/04 9:55 PM Page 9 Chapter 1 All You Ever Wanted to Know about JavaScript (But Were Afraid to Ask!) In This Chapter ᮣ Understanding a working definition of JavaScript ᮣ Dispelling common JavaScript misconceptions ᮣ Getting started with JavaScript tools ᮣ Finding information online aybe you’ve surfed to a Web site that incorporates really cool features, Msuch as ߜ Images that change when you move your mouse over them ߜ Slideshow animations ߜ Input forms with pop-up messages that help you fill in fields correctly ߜ Customized messages that welcome repeat visitors By using JavaScript and the book you’re reading right now you can create all these effects and many more! The Web page in Figure 1-1 shows you an example COPYRIGHTEDof the kinds of things that you canMATERIAL look forward to creating for your own site. A lot has changed since the previous edition of JavaScript For Dummies came out. Perhaps the biggest change is the evolution of DHTML, or dynamic HTML. DHTML refers to JavaScript combined with HTML and cascading style sheets, and it’s a powerful combination you can use to create even more breathtak- ingly cool Web sites than ever before. 05_576593 ch01.qxd 10/12/04 9:55 PM Page 10 10 Part I: Building Killer Web Pages for Fun and Profit Figure 1-1: JavaScript lets you add interactive features to your Web site quickly and easily. Along with this increased power comes increased complexity, unfortunately — but that’s where this new, improved, better-tasting edition of JavaScript For Dummies comes in! Even if you’re not a crackerjack programmer, you can use the techniques and sample scripts in this book to create interactive Web pages bursting with animated effects.
    [Show full text]
  • Front-End Development with ASP.NET Core, Angular, And
    Table of Contents COVER TITLE PAGE FOREWORD INTRODUCTION WHY WEB DEVELOPMENT REQUIRES POLYGLOT DEVELOPERS WHO THIS BOOK IS FOR WHAT THIS BOOK COVERS HOW THIS BOOK IS STRUCTURED WHAT YOU NEED TO USE THIS BOOK CONVENTIONS SOURCE CODE ERRATA 1 What’s New in ASP.NET Core MVC GETTING THE NAMES RIGHT A BRIEF HISTORY OF THE MICROSOFT .NET WEB STACK .NET CORE INTRODUCING ASP.NET CORE NEW FUNDAMENTAL FEATURES OF ASP.NET CORE AN OVERVIEW OF SOME ASP.NET CORE MIDDLEWARE ASP.NET CORE MVC SUMMARY 2 The Front‐End Developer Toolset ADDITIONAL LANGUAGES YOU HAVE TO KNOW JAVASCRIPT FRAMEWORKS CSS FRAMEWORKS PACKAGE MANAGERS TASK RUNNERS SUMMARY 3 Angular in a Nutshell ANGULAR CONCEPTS THE LANGUAGE OF ANGULAR SETTING UP AN ANGULAR PROJECT THE STRUCTURE OF AN ANGULAR APP DATA BINDING DIRECTIVES SERVICES AND DEPENDECY INJECTION MULTIPLE COMPONENTS INPUT AND OUTPUT PROPERTIES TALKING TO THE BACK END USING ANGULAR WITH ASP.NET MVC VISUAL STUDIO 2017 SUPPORT FOR ANGULAR SUMMARY 4 Bootstrap in a Nutshell INTRODUCTION TO BOOTSTRAP BOOTSTRAP STYLES COMPONENTS JAVASCRIPT CUSTOMIZING BOOTSTRAP WITH LESS BOOTSTRAP SUPPORT IN VISUAL STUDIO 2017 AND ASP.NET CORE SUMMARY 5 Managing Dependencies with NuGet and Bower GENERAL CONCEPTS NUGET NPM (NODE.JS PACKAGE MANAGER) BOWER SUMMARY 6 Building Your Application with Gulp and webpack WHAT FRONT‐END BUILD SYSTEMS ARE FOR A DEEPER LOOK AT GULP INTRODUCTION TO WEBPACK VISUAL STUDIO 2017 AND BUILD SYSTEMS SUMMARY 7 Deploying ASP.NET Core THE NEW HOSTING MODEL OF ASP.NET CORE INSTALLING ON INTERNET INFORMATION SERVICES ON PREMISE
    [Show full text]
  • Seamless Offloading of Web App Computations from Mobile Device to Edge Clouds Via HTML5 Web Worker Migration
    Seamless Offloading of Web App Computations From Mobile Device to Edge Clouds via HTML5 Web Worker Migration Hyuk Jin Jeong Seoul National University SoCC 2019 Virtual Machine & Optimization Laboratory Department of Electrical and Computer Engineering Seoul National University Computation Offloading Mobile clients have limited hardware resources Require computation offloading to servers E.g., cloud gaming or cloud ML services for mobile Traditional cloud servers are located far from clients Suffer from high latency 60~70 ms (RTT from our lab to the closest Google Cloud DC) Latency<50 ms is preferred for time-critical games Cloud data center End device [Kjetil Raaen, NIK 2014] 2 Virtual Machine & Optimization Laboratory Edge Cloud Edge servers are located at the edge of the network Provide ultra low (~a few ms) latency Central Clouds Mobile WiFi APs Small cells Edge Device Cloud Clouds What if a user moves? 3 Virtual Machine & Optimization Laboratory A Major Issue: User Mobility How to seamlessly provide a service when a user moves to a different server? Resume the service at the new server What if execution state (e.g., game data) remains on the previous server? This is a challenging problem Edge computing community has struggled to solve it • VM Handoff [Ha et al. SEC’ 17], Container Migration [Lele Ma et al. SEC’ 17], Serverless Edge Computing [Claudio Cicconetti et al. PerCom’ 19] We propose a new approach for web apps based on app migration techniques 4 Virtual Machine & Optimization Laboratory Outline Motivation Proposed system WebAssembly
    [Show full text]
  • In This Issue Monthly Meeting
    Monthly Meeting January 28, 2004 The Apple Store Westfarms Mall Panther demo, hands-on G5 trials, great deals, etc. NEWSLETTER OF CONNECTICUT MACINTOSH CONNECTION, INC.JANUARY, 2004 Danger! iPod Could instead of making her surface was clear. Inspection of the wait to Christmas for it. car revealed the side walls on both Be Hazardous To After all, if I didn’t, I passenger tires were torn, and one rim Your Health! would have to burn 25 was badly chewed up. She had Mouse Tales CDs so she could lis- obviously tangled both right wheels By Don Dickey, president ten to the new book! with the curb, but why? Answer: iPod There was a single distraction. Whenever a good deal condition to my gift, appears, I often call Joe Arcuri however. Before shelling out $640 for a new and ask him to “talk me out of chrome plated alloy rim and half that it” if he can. He sometimes does the same with me. The iPod I ordered for a pair of new tires, I realized just Simultaneous failures arrived a couple of how lucky we were. This was a lesson led us to both purchase Umax days before Joe’s, so she walked away from. Had it clones and scanners, Wallstreet one morning I met him and his daugh- happened on Interstate 91 at 65 miles PowerBook G3s, Toshiba M4 digital ter Savannah for breakfast and per hour, things could have been cameras, PowerBook G4s, PowerBoy brought along the iPod to show him. much more tragic, to say the least.
    [Show full text]
  • WHO Guidance on Management of Snakebites
    GUIDELINES FOR THE MANAGEMENT OF SNAKEBITES 2nd Edition GUIDELINES FOR THE MANAGEMENT OF SNAKEBITES 2nd Edition 1. 2. 3. 4. ISBN 978-92-9022- © World Health Organization 2016 2nd Edition All rights reserved. Requests for publications, or for permission to reproduce or translate WHO publications, whether for sale or for noncommercial distribution, can be obtained from Publishing and Sales, World Health Organization, Regional Office for South-East Asia, Indraprastha Estate, Mahatma Gandhi Marg, New Delhi-110 002, India (fax: +91-11-23370197; e-mail: publications@ searo.who.int). The designations employed and the presentation of the material in this publication do not imply the expression of any opinion whatsoever on the part of the World Health Organization concerning the legal status of any country, territory, city or area or of its authorities, or concerning the delimitation of its frontiers or boundaries. Dotted lines on maps represent approximate border lines for which there may not yet be full agreement. The mention of specific companies or of certain manufacturers’ products does not imply that they are endorsed or recommended by the World Health Organization in preference to others of a similar nature that are not mentioned. Errors and omissions excepted, the names of proprietary products are distinguished by initial capital letters. All reasonable precautions have been taken by the World Health Organization to verify the information contained in this publication. However, the published material is being distributed without warranty of any kind, either expressed or implied. The responsibility for the interpretation and use of the material lies with the reader. In no event shall the World Health Organization be liable for damages arising from its use.
    [Show full text]