Jswhiz Static Analysis for Javascript Memory Leaks

Total Page:16

File Type:pdf, Size:1020Kb

Jswhiz Static Analysis for Javascript Memory Leaks JSWhiz Static Analysis for JavaScript Memory Leaks Jacques A. Pienaar Robert Hundt Purdue University Google, Inc. [email protected] [email protected] Abstract all major web browsers, such as Microsoft’s Internet Ex- JavaScript is the dominant language for implementing dy- plorer, Mozilla’s Firefox, Apple’s Safari, Google’s Chrome, namic web pages in browsers. Even though it is standard- and many others. With JavaScript’s execution speed acceler- ized, many browsers implement language and browser bind- ating, efforts such as node.js [1] promote using JavaScript ings in different and incompatible ways. As a result, a in servers as well. plethora of web development frameworks were developed to Despite the fact that JavaScript and its semantics have hide cross-browser issues and to ease development of large been standardized, the various JavaScript engines and their web applications. An unwelcome side-effect of these frame- embedding browsers implement important parts of Java- works is that they can introduce memory leaks, despite the Script in incompatible ways, a problem that has burdened fact that JavaScript is garbage collected. Memory bloat is a the web development community for years. As a result, a major issue for web applications, as it affects user perceived whole range of JavaScript development environments were latency and may even prevent large web applications from developed to ease development of larger JavaScript web ap- running on devices with limited resources. plications and to hide cross-browser differences. Prominent In this paper we present JSWhiz, an extension to the libraries such as JQuery [10] and Dojo [24], as well as frame- open-source Closure JavaScript compiler. Based on experi- works such as Google Web Toolkit [12, 15] or Google’s Clo- ences analyzing memory leaks in Gmail, JSWhiz detects five sure [8] are widely used and applications written with these identified common problem patterns. JSWhiz found a total toolsets are being used by hundreds of millions of users ev- of 89 memory leaks across Google’s Gmail, Docs, Spread- ery day. Google Closure stands out as it contains a JavaScript sheets, Books, and Closure itself. It contributed significantly compiler as well as library code. The (open-source) Closure in a recent effort to reduce Gmail memory footprint, which compiler is based on Mozilla’s Rhino [21]. It accepts legal resulted in bloat reduction of 75% at the 99th percentile, and JavaScript as input and produces JavaScript as output. It con- by roughly 50% at the median. tains a JavaScript comment-based type system to aid large- scale developments. The type system is also helpful in the Categories and Subject Descriptors D.3.4 [Processors]: context of this paper. The compiler offers many optimiza- Compilers; D.3.4 [Processors]: Optimization tions targeting performance, minification and obfuscation, General Terms Performance, Static Analysis which are all important for web applications. An interesting and unwelcome side-effect of these frame- Keywords Optimization, Performance, Static Analysis, works’ abstractions and wrappers is that they can introduce Memory Leak, JavaScript memory leaks, despite the fact that JavaScript is garbage col- lected. As with any garbage collected language, if references 1. Introduction to otherwise dead objects exist, the objects are reachable and JavaScript is the dominant language for implementing dy- cannot be reclaimed. In browsers, a simple example could namic web pages in browsers. It is the “Lingua Franca” of be that a group of DOM nodes is managed as a “view”, and the web. It has been standardized [14] and is supported by the application maintains a (badly managed) cache of these views. Since there are JavaScript objects maintaining refer- ences to DOM nodes, those can never be freed, unless the references from JavaScript are set to null as well. Permission to make digital or hard copies of all or part of this work for personal or A specifically common problem in browsers is being in- 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 troduced by the abstractions to handle the incompatible na- on the first page. To copy otherwise, to republish, to post on servers or to redistribute tive browser event systems. Typically, the frameworks pro- to lists, requires prior specific permission and/or a fee. CGO’13 23-27 February 2013, Shenzhen China. vide their own abstractions and wrap the native event sys- 978-1-4673-5525-4/13/$31.00 ©2013 IEEE. $15.00 tems to hide the browser differences. Often, global reg- istries are being used where references to events and event The rest of this paper is organized as follows. We show a targets are being maintained and have to be explicitly re- correlation between memory bloat and latency degradation leased to avoid leaks. This is similar to, e.g., the C++ new in Section 2. We describe the current manual labor intensive and delete memory allocation API requiring matching calls. process to find memory leaks in Section 3. In this section we This situation is further complicated by modern, dynami- also describe in detail the identified seven problem patterns cally compiled, browser-embedded execution engines. Com- and their resolution. We then discuss the static memory piled JavaScript living in an internal code cache can hang on leak identification tool we have developed in Section 4. We to DOM nodes which are allocated in the rendering parts of discuss results in Section 5, before we present related work the browser. Such problems are typically very hard to find, in Section 6. We conclude in Section 7. specifically because of insufficient tool support in browsers. Forgetting to manually “unlisten” to events can lead to leak- 2. Impact of Memory Bloat on Latency ing DOM nodes and unlimited memory growth. The Gmail team regularly got complaints from users about Memory bloat for web applications is big problem, it massive size Gmail processes. 2GB were not uncommon, impacts, as we shall show, user experienced latency, and some users reported memory usage of over 10GB. For mo- can prevent larger, long running web applications from even bile devices, such as Chromebooks or mobile tablets, which running on smaller devices. In the context of Gmail, we typically have less physical memory available than desktop studied the impact of memory bloat itself, as well its impact computers, Gmail would consume more memory than avail- on user experienced latency. able and be terminated on a regular basis. The Gmail team started an effort to reduce memory bloat To further study the impact of memory bloat on la- and identified and fixed several dozen problems in a labor tency, we ran a simple Gmail scenario (compose/discard) intensive, manual process. Since Gmail utilizes the Closure repeatedly for many hours. In Figure 1 the x-axis denotes compiler, the question was whether it would be possible time, 21,056 seconds for the whole experiment. The left y- to automate finding of these problems with help of static axis shows the latency in Milli-seconds, from 0ms to over analysis in the compiler. 2,000ms. The right y-axis shows the number of DOM nodes, The results presented in this paper are specific to the use which linearly increases in this experiment to up to over of the Closure library and mostly to the event system abstrac- 2,000,000 nodes. tions made in this framework. However, we want to empha- As the number of DOM nodes continues to grow into size that the problem itself is general—any framework that the millions because of Gmail memory leaks, we can see uses auxiliary data structures to maintain certain objects’ that the magnitude of the latency outliers also increases. lifetimes is susceptible to introducing memory leaks from An operation that took just about 100ms in the beginning mis-matched API calls. For example, the jQuery framework can take more than 2 seconds at the end of the experiment. has several leak patterns [3], and both the Dojo framework This can be explained by the effects of garbage collection. and the YUI framework suffer from leak patterns in the event In order to detect detached DOM trees the browser has to system [2, 4]. We focus on the Closure specific leak patterns, traverse all nodes, an operation that scales linearly to the but believe that many of these other patterns can be found number of DOM nodes. with static analysis similar to the one presented here. We The effect of this can be observed for real individual user make the following main contributions: accounts as well. Figure 2 shows how memory grows for • We show the correlation of memory bloat and latency a single user over the course of 4 days. Starting at only a degradations for web applications; few hundred MB, memory grows to roughly 1.5GB. Figure 3 shows the distribution of latency for this user. The blue • We identify seven patterns that introduce memory leaks dots represent user requests that were done during the day, in JavaScript; these examples are Closure specific, but, “empty” white space correspond to this user’s inactive night again, the conceptual problems are general. time. Latency variation increases greatly with memory bloat. • We developed compiler passes to identify five of them Latency outliers grow in size from roughly 2 seconds to over reliably, without any false positives. This implementation 12 seconds. will be released open-source with Google Closure. Using the new compiler passes, we found 89 memory 3. Memory leak patterns leaks across several large Google applications, such as Garbage collectors used by the modern browsers are able to Gmail, Docs, Spreadsheets, Presentations, Books, and the reclaim memory in a great assortment of varied and com- Closure libraries.
Recommended publications
  • What Is Dart?
    1 Dart in Action By Chris Buckett As a language on its own, Dart might be just another language, but when you take into account the whole Dart ecosystem, Dart represents an exciting prospect in the world of web development. In this green paper based on Dart in Action, author Chris Buckett explains how Dart, with its ability to either run natively or be converted to JavaScript and coupled with HTML5 is an ideal solution for building web applications that do not need external plugins to provide all the features. You may also be interested in… What is Dart? The quick answer to the question of what Dart is that it is an open-source structured programming language for creating complex browser based web applications. You can run applications created in Dart by either using a browser that directly supports Dart code, or by converting your Dart code to JavaScript (which happens seamlessly). It is class based, optionally typed, and single threaded (but supports multiple threads through a mechanism called isolates) and has a familiar syntax. In addition to running in browsers, you can also run Dart code on the server, hosted in the Dart virtual machine. The language itself is very similar to Java, C#, and JavaScript. One of the primary goals of the Dart developers is that the language seems familiar. This is a tiny dart script: main() { #A var d = “Dart”; #B String w = “World”; #C print(“Hello ${d} ${w}”); #D } #A Single entry point function main() executes when the script is fully loaded #B Optional typing (no type specified) #C Static typing (String type specified) #D Outputs “Hello Dart World” to the browser console or stdout This script can be embedded within <script type=“application/dart”> tags and run in the Dartium experimental browser, converted to JavaScript using the Frog tool and run in all modern browsers, or saved to a .dart file and run directly on the server using the dart virtual machine executable.
    [Show full text]
  • TIBCO Activematrix® BPM Web Client Developer's Guide Software Release 4.3 April 2019 2
    TIBCO ActiveMatrix® BPM Web Client Developer's Guide Software Release 4.3 April 2019 2 Important Information SOME TIBCO SOFTWARE EMBEDS OR BUNDLES OTHER TIBCO SOFTWARE. USE OF SUCH EMBEDDED OR BUNDLED TIBCO SOFTWARE IS SOLELY TO ENABLE THE FUNCTIONALITY (OR PROVIDE LIMITED ADD-ON FUNCTIONALITY) OF THE LICENSED TIBCO SOFTWARE. THE EMBEDDED OR BUNDLED SOFTWARE IS NOT LICENSED TO BE USED OR ACCESSED BY ANY OTHER TIBCO SOFTWARE OR FOR ANY OTHER PURPOSE. USE OF TIBCO SOFTWARE AND THIS DOCUMENT IS SUBJECT TO THE TERMS AND CONDITIONS OF A LICENSE AGREEMENT FOUND IN EITHER A SEPARATELY EXECUTED SOFTWARE LICENSE AGREEMENT, OR, IF THERE IS NO SUCH SEPARATE AGREEMENT, THE CLICKWRAP END USER LICENSE AGREEMENT WHICH IS DISPLAYED DURING DOWNLOAD OR INSTALLATION OF THE SOFTWARE (AND WHICH IS DUPLICATED IN THE LICENSE FILE) OR IF THERE IS NO SUCH SOFTWARE LICENSE AGREEMENT OR CLICKWRAP END USER LICENSE AGREEMENT, THE LICENSE(S) LOCATED IN THE “LICENSE” FILE(S) OF THE SOFTWARE. USE OF THIS DOCUMENT IS SUBJECT TO THOSE TERMS AND CONDITIONS, AND YOUR USE HEREOF SHALL CONSTITUTE ACCEPTANCE OF AND AN AGREEMENT TO BE BOUND BY THE SAME. ANY SOFTWARE ITEM IDENTIFIED AS THIRD PARTY LIBRARY IS AVAILABLE UNDER SEPARATE SOFTWARE LICENSE TERMS AND IS NOT PART OF A TIBCO PRODUCT. AS SUCH, THESE SOFTWARE ITEMS ARE NOT COVERED BY THE TERMS OF YOUR AGREEMENT WITH TIBCO, INCLUDING ANY TERMS CONCERNING SUPPORT, MAINTENANCE, WARRANTIES, AND INDEMNITIES. DOWNLOAD AND USE OF THESE ITEMS IS SOLELY AT YOUR OWN DISCRETION AND SUBJECT TO THE LICENSE TERMS APPLICABLE TO THEM. BY PROCEEDING TO DOWNLOAD, INSTALL OR USE ANY OF THESE ITEMS, YOU ACKNOWLEDGE THE FOREGOING DISTINCTIONS BETWEEN THESE ITEMS AND TIBCO PRODUCTS.
    [Show full text]
  • Attacking AJAX Web Applications Vulns 2.0 for Web 2.0
    Attacking AJAX Web Applications Vulns 2.0 for Web 2.0 Alex Stamos Zane Lackey [email protected] [email protected] Blackhat Japan October 5, 2006 Information Security Partners, LLC iSECPartners.com Information Security Partners, LLC www.isecpartners.com Agenda • Introduction – Who are we? – Why care about AJAX? • How does AJAX change Web Attacks? • AJAX Background and Technologies • Attacks Against AJAX – Discovery and Method Manipulation – XSS – Cross-Site Request Forgery • Security of Popular Frameworks – Microsoft ATLAS – Google GWT –Java DWR • Q&A 2 Information Security Partners, LLC www.isecpartners.com Introduction • Who are we? – Consultants for iSEC Partners – Application security consultants and researchers – Based in San Francisco • Why listen to this talk? – New technologies are making web app security much more complicated • This is obvious to anybody who reads the paper – MySpace – Yahoo – Worming of XSS – Our Goals for what you should walk away with: • Basic understanding of AJAX and different AJAX technologies • Knowledge of how AJAX changes web attacks • In-depth knowledge on XSS and XSRF in AJAX • An opinion on whether you can trust your AJAX framework to “take care of security” 3 Information Security Partners, LLC www.isecpartners.com Shameless Plug Slide • Special Thanks to: – Scott Stender, Jesse Burns, and Brad Hill of iSEC Partners – Amit Klein and Jeremiah Grossman for doing great work in this area – Rich Cannings at Google • Books by iSECer Himanshu Dwivedi – Securing Storage – Hackers’ Challenge 3 • We are
    [Show full text]
  • Cliente Twitter Con Compresión De Datos
    PROYECTO FIN DE GRADO GRADO EN INGENIERÍA INFROMÁTICA CLIENTE TWITTER CON COMPRESIÓN DE DATOS Autor: Plácido Fernández Declara Tutores: Luis Miguel Sánchez García Rafael Sotomayor Fernández Colmenarejo, Febrero de 2013 RESUMEN La popular red social Twitter es usada hoy en día en diversos lugares y momentos, gracias también a las redes móviles que nos proporcionan conexión a internet en casi cualquier lugar. Twitter permite publicar y mandar mensajes cortos de texto plano con un máximo de 140 caracteres, así como la lectura de estos mensajes cortos de otros usuarios a los que podemos seguir para tal propósito. Hacer uso de este servicio en zonas con buena cobertura, o cuando usamos Wi-fi no supone generalmente ningún problema. Es cuando nos encontramos en zonas de poca cobertura cuando vemos problemas para hacer uso de este servicio, ya que las velocidades de descarga pueden disminuir hasta el punto de necesitar decenas de segundos para disponer de los mensajes cortos, los “Tweets”. A esto hay que añadir que los planes de datos actuales están limitados de alguna forma (al alcanzar un número de Mb), por lo que la cantidad de Mb usada es hoy también un factor importante. Para ello esta aplicación ofrece la experiencia de un cliente Twitter sencillo en el que consultar los “Tweets” de a quien seguimos, así como publicar “Tweets”, haciendo uso de un Proxy que comprime estos datos considerablemente de forma que se reducen los tiempos de descarga para las zonas de poca cobertura y además se reduce el número de Mb consumidos por el dispositivo móvil. Índice de contenido RESUMEN .................................................................................................................................
    [Show full text]
  • Towards Secure and Reusable Web Applications
    Mashups and Modularity: Towards Secure and Reusable Web Applications Antero Taivalsaari Tommi Mikkonen Sun Microsystems Laboratories [email protected] http://research.sun.com/projects/lively 2 Evolution of the Web 1) Simple pages with text and static images only (e.g., http://www.google.com) 2) Animated pages with plug-ins (e.g., http://www.cadillac.com) 3) Rich Internet Applications (e.g., docs.google.com) What's Next? 3 Web Applications – Implications • Web-based software will dramatically change the way people develop, deploy and use software. • No more installations! > Applications will simply run off the Web. • No more upgrades! > Always run the latest application version. • Instant worldwide deployment! > No middlemen or distributors needed. • No CPU dependencies, OS dependencies, ... > The Web is the Platform. 4 Unfortunately... • The web browser was not designed for running real applications. > It was designed in the early 1990s for viewing documents, forms and other page-structured artifacts – not applications. > Programming capabilities on the web were an afterthought, not something inherent in the design of the browser. • Various Rich Internet Application (RIA) technologies have been introduced recently to retrofit application execution capabilities into the web browser. 5 Web Development vs. Conventional Software The Impedance Mismatch Web Development Conventional SW Development - Documents - Applications - Page / form oriented interaction - Direct manipulation - Managed graphics, static layout - Directly drawn, dynamic
    [Show full text]
  • A Framework for PHP Program Analysis
    A Framework for PHP Program Analysis Mark Hills Postdoc in Software Analysis and Transformation (SWAT) CWI Scientific Meeting February 8, 2013 http://www.rascal-mpl.org Overview • Motivation • Goals • Current Progress • Related Work 2 3 PHP: Not Always Loved and Respected • Created in 1994 as a set of tools to maintain personal home pages • Major language evolution since: now an OO language with a number of useful libraries, focused on building web pages • Growing pains: some “ease of use” features recognized as bad and deprecated, others questionable but still around • Attracts articles with names like “PHP: a fractal of bad design” and “PHP Sucks, But It Doesn’t Matter” 4 So Why Focus on PHP? • Popular with programmers: #6 on TIOBE Programming Community Index, behind C, Java, Objective-C, C++, and C#, and 6th most popular language on GitHub • Used by 78.8% of all websites whose server-side language can be determined, used in sites such as Facebook, Hyves, Wikipedia • Big projects (MediaWiki 1.19.1 > 846k lines of PHP), wide range of programming skills: big opportunities for program analysis to make a positive impact 5 Rascal: A Meta-Programming One-Stop-Shop • Context: wide variety of programming languages (including dialects) and meta-programming tasks • Typical solution: many different tools, lots of glue code • Instead, we want this all in one language, i.e., the “one-stop-shop” • Rascal: domain specific language for program analysis, program transformation, DSL creation PHP Program Analysis Goals • Build a Rascal framework for creating
    [Show full text]
  • Diseño De Un Sistema De Monitorización De Dispositivos Móviles
    Departamento de Informática PROYECTO FIN DE GRADO DISEÑO DE UN SISTEMA DE MONITORIZACIÓN DE DISPOSITIVOS MÓVILES Autor: Antonio Becerra López Tutor: Luis Miguel Sánchez García Colmenarejo, Septiembre de 2012 1 Diseño de un sistema de monitorización de dispositivos móviles Título: Diseño de un sistema de monitorización de dispositivos móviles Autor: Antonio Becerra López Director: EL TRIBUNAL Presidente: Vocal: Secretario: Realizado el acto de defensa y lectura del Proyecto Fin de Carrera el día __ de _______ de 20__ en Leganés, en la Escuela Politécnica Superior de la Universidad Carlos III de Madrid, acuerda otorgarle la CALIFICACIÓN de VOCAL SECRETARIO PRESIDENTE 1 2 Diseño de un sistema de monitorización de dispositivos móviles Resumen AndroidMonitor es un sistema cuya finalidad consiste en monitorizar distribuidamente dispositivos móviles con el sistema operativo Android. Los teléfonos móviles en la actualidad son un elemento indispensable más de las personas junto con las llaves de casa y la cartera con los documentos personales. En el año 2011, la población total de la Tierra superaba la asombrosa cantidad de siete mil millones de personas. En ese mismo año, se calculaba que el número de teléfonos móviles en el mundo era superior a los 5.600 millones. Los dispositivos móviles cuentan con gran variedad de sensores: acelerómetro, sensor de luz, sensor de temperatura, barómetro, sensor de gravedad, sensor de presión; Sensores que recopilan información de su entorno que puede ser utilizada para comprar la situación del terminal. El objetivo de este proyecto es el análisis, el diseño y el desarrollo de un sistema para monitorizar remotamente los valores de los sensores de dispositivos móviles.
    [Show full text]
  • Download the Index
    Dewsbury.book Page 555 Wednesday, October 31, 2007 11:03 AM Index Symbols addHistoryListener method, Hyperlink wid- get, 46 $wnd object, JSNI, 216 addItem method, MenuBar widget, 68–69 & (ampersand), in GET and POST parameters, addLoadListener method, Image widget, 44 112–113 addMessage method, ChatWindowView class, { } (curly braces), JSON, 123 444–445 ? (question mark), GET requests, 112 addSearchResult method JUnit test case, 175 SearchResultsView class, 329 A addSearchView method, MultiSearchView class, 327 Abstract Factory pattern, 258–259 addStyleName method, connecting GWT widgets Abstract methods, 332 to CSS, 201 Abstract Window Toolkit (AWT), Java, 31 addToken method, handling back button, 199 AbstractImagePrototype object, 245 addTreeListener method, Tree widget, 67 Abstraction, DAOs and, 486 Adobe Flash and Flex, 6–7 AbstractMessengerService Aggregator pattern Comet, 474 defined, 34 Jetty Continuations, 477 Multi-Search application and, 319–321 action attribute, HTML form tag, 507 sample application, 35 Action-based web applications Aggregators, 320 overview of, 116 Ajax (Asynchronous JavaScript and XML) PHP scripts for building, 523 alternatives to, 6–8 ActionObjectDAO class, 527–530 application development and, 14–16 Actions, server integration with, 507–508 building web applications and, 479 ActionScript, 6 emergence of, 3–5 ActiveX, 7 Google Gears for storage, 306–309 Add Import command Same Origin policy and, 335 creating classes in Eclipse, 152 success and limitations of, 5–6 writing Java code using Eclipse Java editor,
    [Show full text]
  • Google Webtool
    Google Web Toolkit Stephen Bilston Stuart Johnson Eric Fath-Kolmes Ai Ci Lin Andrew Nisbet Presentation Goals What is GWT? An overview of GWT's features. When should I use GWT? Who's using it? Finally what you can do with it? What are the risks? What is Google Web Toolkit (GWT)? Develop Webapps using Java Compile the Java to X-browser Javascript Finally a magic bullet to fix Everything! What's so great about it Abstracts away HTML and CSS Makes Client server communcation easy Has robust 3rd party libaraies Easy deployment Eases Web development Lets you avoid HTML and CSS along with all there vairous oddities Many programmers already know java but don't know JavaScript, GWT moves the task of learning from new languages to what is effectively another library Writing javascript can be weird - GWT removes much of the weirdness Makes client server comuncation easy Two easy methods: GWT-RPC Almost makes server commuincation feel like local method calls Has rather good serialization functionality Request Factory Acts like a fake ORM(Object Relational Mapping) for the client side Normal Ajax if you really want to Has robust third party libaries Smart GWT Widgets Dual licensed Ext GWT More Widgets Dual licensed with reduced functionaliy Vaadin Widgets Server Side functionality(validation, etc) Easy depoyment Uses Java Servlets for GWT-RPC and Request Factory Lots of options(Tomcat, JBoss etc..) If your okay with the abstraction leaking a bit you can use anything to do generic AJAX Php Ruby Perl Whatever Using java server side is an easy sell Code Quality Concerns Debugging -With GWT, you can debug java byte code directly as it was executed in a simulated browser environment.
    [Show full text]
  • Ray Cromwell
    Building Applications with Google APIs Ray Cromwell Monday, June 1, 2009 “There’s an API for that” • code.google.com shows 60+ APIs • full spectrum (client, server, mobile, cloud) • application oriented (android, opensocial) • Does Google have a Platform? Monday, June 1, 2009 Application Ecosystem Client REST/JSON, GWT, Server ProtocolBuffers Earth PHP Java O3D App Services Media Docs Python Ruby Utility Blogger Spreadsheets Maps/Geo JPA/JDO/Other Translate Base Datastore GViz Social MySQL Search OpenSocial Auth FriendConnect $$$ ... GData Contacts AdSense Checkout Monday, June 1, 2009 Timefire • Store and Index large # of time series data • Scalable Charting Engine • Social Collaboration • Story Telling + Video/Audio sync • Like “Google Maps” but for “Time” Monday, June 1, 2009 Android Version 98% Shared Code with Web version Monday, June 1, 2009 Android • Full API stack • Tight integration with WebKit browser • Local database, 2D and 3D APIs • External XML UI/Layout system • Makes separating presentation from logic easier, benefits code sharing Monday, June 1, 2009 How was this done? • Google Web Toolkit is the Foundation • Target GWT JRE as LCD • Use Guice Dependency Injection for platform-specific APIs • Leverage GWT 1.6 event system Monday, June 1, 2009 Example App Code Device/Service JRE interfaces Guice Android Browser Impl Impl Android GWT Specific Specific Monday, June 1, 2009 Shared Widget Events interface HasClickHandler interface HasClickHandler addClickHandler(injectedHandler) addClickHandler(injectedHandler) Gin binds GwtHandlerImpl
    [Show full text]
  • Muhammad Touqeer Shafi
    Muhammad Touqeer Shafi E-mail: [email protected] CONTACT Website: http://pk.linkedin.com/pub/touqeer- shafi/22/634/b44/ Phone: +923142032499 WORK EXPERIENCE Ovrlod Pvt Ltd January 2014 — Present Software Engineer Design, program, and deliver web/local development projects (PHP, .Javascript and related platforms) within designated schedules. • Support development of projects from inception through alpha/beta testing and final delivery • Identify, communicate, and overcome development problems and creative challenges related to complex web • Keep current with programming languages/platforms within the web development/web application, and • Comprehend and follow specific project life-cycle instructions and procedures when required • Revise and troubleshoot development work as required • Provide tactical application mentorship to other developers in area of expertise • Heavily contribute to and actively follow technical documentation related to interactive development cycles • Act as a go-to person within technical area of expertise • Effectively present technical information in one-on-one and small group situations to vendors, clients, and agency staff • Apply common-sense understanding to carry out detailed but objective written or oral instructions • Engage in a pattern of learning and research Mamdani Web October 2011 — December 2013 Php Developer Write “clean”, well designed code. Produce detailed specifications. Troubleshoot, test and maintain the core product software and databases to ensure strong optimization and functionality.
    [Show full text]
  • A Guide to Native Plants for the Santa Fe Landscape
    A Guide to Native Plants for the Santa Fe Landscape Penstemon palmeri Photo by Tracy Neal Santa Fe Native Plant Project Santa Fe Master Gardener Association Santa Fe, New Mexico March 15, 2018 www.sfmga.org Contents Introduction………………………………………………………………………………………………………………………………………………………………………………………………………….. ii Chapter 1 – Annuals and Biennials ........................................................................................................................................................................ 1 Chapter 2 – Cacti and Succulents ........................................................................................................................................................................... 3 Chapter 3 – Grasses ............................................................................................................................................................................................... 6 Chapter 4 – Ground Covers .................................................................................................................................................................................... 9 Chapter 5 – Perennials......................................................................................................................................................................................... 11 Chapter 6 – Shrubs .............................................................................................................................................................................................
    [Show full text]