WALA is an open source framework for static and dynamic program analysis initially developed at IBM and used in various research and commercial products. It provides features like pointer analysis, call graph construction, and dataflow analysis and is designed to be robust, efficient, and extensible. The document outlines the key features and modules of WALA and how they can be used and customized for program analysis.
This presentation is for enterprises that are considering adopting Scala. The author is managing editor of http://scalacourses.com, which offers self-paced online courses that teach Introductory and Intermediate Scala and Play Framework.
- The document discusses the Simple Build Tool (sbt) and how it can be used to define Scala projects and their dependencies.
- It describes the structure of sbt's build.sbt file which defines project settings, dependencies, and repositories.
- Useful sbt plugins are mentioned like sbt-idea and sbteclipse to generate IDE project files, and sbt-assembly to build single JAR files. Common sbt tasks are also listed.
- Integration of sbt projects with IntelliJ IDEA and Eclipse IDEs is covered, with IDEA having better support and integration with sbt than Eclipse.
Abstract:
A apresentação centra-se na temática de ter forma de controlar, versionar e actualizar toda a parte de Base de Dados de um projecto. Estamos a falar, desde a produção de modelos ER, a versionamento de scripts, passando pelo deploy dos mesmos e terminado na documentação. A apresentação conta ainda com uma breve demonstração do uso da ferramenta Flyway para versionar e controlar a execução de scripts nos diversos ambientes de um projecto.
Sobre o Nuno Alves:
Chamo-me Nuno Alves nascido em Coimbra, Portugal e vivi maioritariamente em Leiria. Licenciado em Engenharia Informática na ESTG-IPLeiria (Escola Superior de Tecnologia e Gestão) onde o gosto por dados e bases de dados se começou a desenvolver. Daí, profissionalmente a minha área de actuação ser em torno de bases de dados e infra-estruturas. Tenho cerca de 10 anos de experiência repartidos pelas áreas Financeira, Seguros, Governo, Militar em tecnologias que vão desde Oracle, PostgreSQL, MSSQLServer a DB2.
Writing concurrent programs that can run in multiple threads and on multiple cores is crucial but daunting. Futures provides a convenient abstraction for many problem domains. The online course "Intermediate Scala" includes an up-to-date discussion of futures and the parts of java.util.concurrent that underlie the Scala futures implementation. Unlike Java's futures, Scala futures supports composition, transformations and sophisticated callbacks.
The author is managing editor of http://scalacourses.com, which offers self-paced online courses that teach Introductory and Intermediate Scala and Play Framework.
Love it or hate it (and a lot of people seem to hate it), Maven is a widely used tool. We can consider that Maven has been the de-facto standard build tool for Java over the last 10 years. Most experienced developers already got their share of Maven headaches. Unfortunately, new developers are going through the same hard learning process, because they don't know how to deal with Maven particularities. "Why is this jar in my build?", "I can’t see my changes!", "The jar is not included in the distribution!", "The artifact was not found!" are common problems. Learn to tame the Maven Beast and be in complete control of your build to save you countless hours of pain and frustration.
Are you still stuck in Java EE 5? Eager to move and boost developer productivity with all the cool things introduced in Java EE 7? Attend this session to hear about some of the solutions Tomitribe had to implement to completely migrate an application called Segurnet from Java EE 5 to Java EE 7. Expect a very technical session that delves into the details. Segurnet is a platform held by APS (Portuguese Insurance Association) that has served as an integration network for the insurance sector in Portugal for the last 20 years, with more than 33,000 active users.
This document provides an overview of the Play 2 framework, including:
- Play features such as type-safety and async programming.
- The anatomy of a Play application including directories for assets, controllers, models, and views.
- Play's MVC architecture with models, views rendered by Twirl templates, and controllers handling requests and responses.
- Form handling in Play using binding and validation.
pull requests I sent to scala/scala (ny-scala 2019)Eugene Yokota
I will go over some pull requests that I sent to the upcoming Scala 2.13.x, and describe how to participate in open-source work happening in scala/scala or sbt/* on GitHub.
This presentation is for enterprises that are considering adopting Scala. The author is managing editor of http://scalacourses.com, which offers self-paced online courses that teach Introductory and Intermediate Scala and Play Framework.
- The document discusses the Simple Build Tool (sbt) and how it can be used to define Scala projects and their dependencies.
- It describes the structure of sbt's build.sbt file which defines project settings, dependencies, and repositories.
- Useful sbt plugins are mentioned like sbt-idea and sbteclipse to generate IDE project files, and sbt-assembly to build single JAR files. Common sbt tasks are also listed.
- Integration of sbt projects with IntelliJ IDEA and Eclipse IDEs is covered, with IDEA having better support and integration with sbt than Eclipse.
Abstract:
A apresentação centra-se na temática de ter forma de controlar, versionar e actualizar toda a parte de Base de Dados de um projecto. Estamos a falar, desde a produção de modelos ER, a versionamento de scripts, passando pelo deploy dos mesmos e terminado na documentação. A apresentação conta ainda com uma breve demonstração do uso da ferramenta Flyway para versionar e controlar a execução de scripts nos diversos ambientes de um projecto.
Sobre o Nuno Alves:
Chamo-me Nuno Alves nascido em Coimbra, Portugal e vivi maioritariamente em Leiria. Licenciado em Engenharia Informática na ESTG-IPLeiria (Escola Superior de Tecnologia e Gestão) onde o gosto por dados e bases de dados se começou a desenvolver. Daí, profissionalmente a minha área de actuação ser em torno de bases de dados e infra-estruturas. Tenho cerca de 10 anos de experiência repartidos pelas áreas Financeira, Seguros, Governo, Militar em tecnologias que vão desde Oracle, PostgreSQL, MSSQLServer a DB2.
Writing concurrent programs that can run in multiple threads and on multiple cores is crucial but daunting. Futures provides a convenient abstraction for many problem domains. The online course "Intermediate Scala" includes an up-to-date discussion of futures and the parts of java.util.concurrent that underlie the Scala futures implementation. Unlike Java's futures, Scala futures supports composition, transformations and sophisticated callbacks.
The author is managing editor of http://scalacourses.com, which offers self-paced online courses that teach Introductory and Intermediate Scala and Play Framework.
Love it or hate it (and a lot of people seem to hate it), Maven is a widely used tool. We can consider that Maven has been the de-facto standard build tool for Java over the last 10 years. Most experienced developers already got their share of Maven headaches. Unfortunately, new developers are going through the same hard learning process, because they don't know how to deal with Maven particularities. "Why is this jar in my build?", "I can’t see my changes!", "The jar is not included in the distribution!", "The artifact was not found!" are common problems. Learn to tame the Maven Beast and be in complete control of your build to save you countless hours of pain and frustration.
Are you still stuck in Java EE 5? Eager to move and boost developer productivity with all the cool things introduced in Java EE 7? Attend this session to hear about some of the solutions Tomitribe had to implement to completely migrate an application called Segurnet from Java EE 5 to Java EE 7. Expect a very technical session that delves into the details. Segurnet is a platform held by APS (Portuguese Insurance Association) that has served as an integration network for the insurance sector in Portugal for the last 20 years, with more than 33,000 active users.
This document provides an overview of the Play 2 framework, including:
- Play features such as type-safety and async programming.
- The anatomy of a Play application including directories for assets, controllers, models, and views.
- Play's MVC architecture with models, views rendered by Twirl templates, and controllers handling requests and responses.
- Form handling in Play using binding and validation.
pull requests I sent to scala/scala (ny-scala 2019)Eugene Yokota
I will go over some pull requests that I sent to the upcoming Scala 2.13.x, and describe how to participate in open-source work happening in scala/scala or sbt/* on GitHub.
This document provides an introduction and overview of the Scala programming language. It begins with a brief history of Scala's creation at EPFL by Martin Odersky in 2001. It then discusses some of the key reasons for using Scala, including its ability to scale with demands through a combination of object-oriented and functional programming concepts. The document outlines some of Scala's main features, such as its static typing, interoperability with Java, and support for modularity. It also provides examples of Scala's data types, operations, control structures, functions, and pattern matching capabilities. Overall, the summary provides a high-level introduction to Scala's origins, design philosophy, and programming paradigms.
Backing Data Silo Atack: Alfresco sharding, SOLR for non-flat objectsITD Systems
The document discusses a scheme for sharding Alfresco repositories to address scalability and storage limitations. Key points of the scheme include:
- Repositories are sharded across multiple independent servers, each storing a part of the content.
- A level 7 switch balances requests across repositories and provides a single API entry point.
- An external SOLR cloud indexes all repositories in a single index to allow federated queries.
- The scheme is benchmarked to scale to 15,000 concurrent users on commodity hardware. Additional considerations for production include auto-discovery, configuration management, and safety checks.
Presentation by Ian de Villiers at ZaCon 2 about exploiting java.
This presentation is about instrumenting java applications. it begins with an explanation of what a jar file is. The difficulties in attacking java, such as signing and obfuscation are discussed. How to overcome these difficulties is also discussed. The presentation ends with a walkthrough example of how to instrument a java application.
The Amazing and Elegant PL/SQL Function Result CacheSteven Feuerstein
The Function Result Cache, introduced in Oracle Database 11g, offers a very elegant way to cache cross-session data and make it available via PL/SQL functions. It can have a dramatic performance impact on fetching static data (even static for just a period of time) - and it's managed automatically by Oracle Database for you!
This document discusses the declining relevance of traditional Java application servers. It argues that application servers are no longer needed as containers for multiple applications due to limitations in isolation. Modern applications are better suited as individual JAR files with their own custom infrastructure and standard monitoring and deployment tools rather than relying on application server-specific approaches. Frameworks like Spring Boot and Dropwizard provide an alternative to application servers by allowing applications to be self-contained deployable units without dependency on external application server infrastructure.
Spring Roo Add-On Development & DistributionStefan Schmidt
This document provides an overview of creating and distributing Spring Roo add-ons. It discusses the architectural journey that led to Roo's design, including decisions to use Java and AspectJ rather than creating a new runtime. It also covers getting started with a new add-on using the Add-on Creator, implementation details like using common services and file monitoring, and how to develop add-ons that integrate with the Roo shell and OSGi container. The document concludes with pointers for starters, like reviewing example add-ons and Spring Roo source code.
Database Developers: the most important developers on earth?Steven Feuerstein
Looking for a truly quirky presentation on why database developers are so important, from a fellow who has no particular bias on this topic? (hah). These slides start with single-cell organisms and work all the way up to the modern age. You're not likely to have seen anything like it before!
System Integration with Akka and Apache Camelkrasserm
This document summarizes the Apache Camel integration framework and how it can be used with Akka actors. Camel provides a domain-specific language and components for integration patterns and protocols. Akka actors handle asynchronous message processing and can be used as Camel consumers and producers through Akka-Camel integration. Consumer actors receive messages from Camel endpoints, while producer actors send messages to endpoints. Actor components allow actors to be used directly in Camel routes.
The document discusses lessons learned from 4 years of simulating an innovative network processor, emphasizing the need to leverage computing resources through automated testing, intelligent test generation, and storing large numbers of test executions and results in databases to methodically close issues. It provides recommendations for planning verification efforts and creating balanced testing pipelines to efficiently debug problems and keep verification teams productive.
High Availability and Scalability: Too Expensive! Architectures for Future E...Eberhard Wolff
The document discusses high availability and scalability approaches for enterprise systems. Traditionally, enterprises rely on highly reliable hardware, small clusters, and standby data centers. However, this approach is expensive and systems can still fail. The document proposes using virtualization, stateless servers, and NoSQL databases to achieve high availability and scalability at lower cost. Servers are provisioned as "Phoenix servers" that can be easily recreated if failed, without relying on expensive reliable hardware. Data is distributed across servers for redundancy and fine-grained scaling. This software-based approach provides better performance and availability compared to traditional hardware-centric methods.
This document discusses Spring Boot, a framework for building Java applications. It makes building Java web applications easier by providing sensible defaults and automatic configuration. Spring Boot allows building applications that are easy to test, debug and deploy. It supports adding additional libraries and frameworks like Spring Data JPA with minimal configuration. The document demonstrates how to create a basic application with Spring Boot and Spring Data JPA with auto-configured infrastructure and shows how Spring Boot helps with development, operations and deployment of Java applications.
InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]David Buck
presentation video: https://www.youtube.com/watch?v=gIffIZnmYBM
The invokedynamic instruction (part of JSR-292) has been around since JDK 7. Since it's introduction 4 years ago, we have seen it's adoption by many of the JVM's most popular languages, including Java itself! Despite its importance to most languages that run on the JVM, many developers still do not understand how it is used or implemented. Most resources available about JSR-292 are aimed at language implementers who are experts in compiler theory and language design. This session will be different, and will offer an overview of JSR-292 for people who are curious about how things work, but do not necessarily spend all day working on java bytecode.
The document provides an overview of the Spring framework and instructions for setting up a simple Spring example project in Eclipse. It introduces the core concepts of Spring including dependency injection and inversion of control. It then demonstrates a simple example where two shape classes (Rectangle and Circle) implement a Shape interface and are configured as Spring beans in an XML file. A driver class loads the configuration file and retrieves the shape objects by name to loosely couple the code from the specific shape implementations.
This document provides an overview of key concepts in the Laravel PHP framework, including Lumen, middleware, dependency injection, filesystem/cloud storage, queues, task scheduling, databases, Eloquent ORM, and the LUCID architecture pattern. It discusses how Laravel supports middleware, dependency injection, filesystem abstraction, queueing, scheduling tasks, querying databases, migrations, seeding, and the Eloquent ORM. It also summarizes the LUCID architecture designed by Vinelab to improve code quality by defining features, jobs, services, and domains.
Spring Boot makes it easier to create Java web applications. It provides sensible defaults and infrastructure so developers don't need to spend time wiring applications together. Spring Boot applications are also easier to develop, test, and deploy. The document demonstrates how to create a basic web application with Spring Boot, add Spring Data JPA for database access, and use features for development and operations.
Software Design Patterns in Laravel by Phill SparksPhill Sparks
Laravel makes use of quite a few well-established design patterns that promote reusable object-oriented code. Together, we will investigate the design patterns used in the core of Laravel 4 and discuss how they encourage reusable software.
This document provides an overview and introduction to React basics including:
- Details about upcoming React lab series events on topics like routing, styles, testing, and Flux architecture
- Information on installing and using create-react-app for scaffolding React projects
- An explanation of core React concepts like components, JSX, properties, state, lifecycle methods, and the virtual DOM
- Examples of building a minimal React app with components, properties, and state
LSUG: How we (mostly) moved from Java to ScalaGraham Tackley
Presentation from talk done at the London Scala User Group on Wednesday 12th Jan 2011.
http://skillsmatter.com/podcast/java-jee/how-we-mostly-moved-from-java-to-scala
Solid and Sustainable Development in Scalascalaconfjp
Kazuhiro Sera introduced several of his Scala projects including ScalikeJDBC, Skinny Framework, and AWScala. He discussed some of his philosophies for solid and sustainable development in Scala including using simplified class-based OOP with immutable data structures, avoiding overkill abstraction, writing tests without question, keeping infrastructure lightweight, and ensuring projects have no surprises for newcomers. He welcomed questions during the upcoming AMA session.
This document provides an introduction and overview of the Scala programming language. It begins with a brief history of Scala's creation at EPFL by Martin Odersky in 2001. It then discusses some of the key reasons for using Scala, including its ability to scale with demands through a combination of object-oriented and functional programming concepts. The document outlines some of Scala's main features, such as its static typing, interoperability with Java, and support for modularity. It also provides examples of Scala's data types, operations, control structures, functions, and pattern matching capabilities. Overall, the summary provides a high-level introduction to Scala's origins, design philosophy, and programming paradigms.
Backing Data Silo Atack: Alfresco sharding, SOLR for non-flat objectsITD Systems
The document discusses a scheme for sharding Alfresco repositories to address scalability and storage limitations. Key points of the scheme include:
- Repositories are sharded across multiple independent servers, each storing a part of the content.
- A level 7 switch balances requests across repositories and provides a single API entry point.
- An external SOLR cloud indexes all repositories in a single index to allow federated queries.
- The scheme is benchmarked to scale to 15,000 concurrent users on commodity hardware. Additional considerations for production include auto-discovery, configuration management, and safety checks.
Presentation by Ian de Villiers at ZaCon 2 about exploiting java.
This presentation is about instrumenting java applications. it begins with an explanation of what a jar file is. The difficulties in attacking java, such as signing and obfuscation are discussed. How to overcome these difficulties is also discussed. The presentation ends with a walkthrough example of how to instrument a java application.
The Amazing and Elegant PL/SQL Function Result CacheSteven Feuerstein
The Function Result Cache, introduced in Oracle Database 11g, offers a very elegant way to cache cross-session data and make it available via PL/SQL functions. It can have a dramatic performance impact on fetching static data (even static for just a period of time) - and it's managed automatically by Oracle Database for you!
This document discusses the declining relevance of traditional Java application servers. It argues that application servers are no longer needed as containers for multiple applications due to limitations in isolation. Modern applications are better suited as individual JAR files with their own custom infrastructure and standard monitoring and deployment tools rather than relying on application server-specific approaches. Frameworks like Spring Boot and Dropwizard provide an alternative to application servers by allowing applications to be self-contained deployable units without dependency on external application server infrastructure.
Spring Roo Add-On Development & DistributionStefan Schmidt
This document provides an overview of creating and distributing Spring Roo add-ons. It discusses the architectural journey that led to Roo's design, including decisions to use Java and AspectJ rather than creating a new runtime. It also covers getting started with a new add-on using the Add-on Creator, implementation details like using common services and file monitoring, and how to develop add-ons that integrate with the Roo shell and OSGi container. The document concludes with pointers for starters, like reviewing example add-ons and Spring Roo source code.
Database Developers: the most important developers on earth?Steven Feuerstein
Looking for a truly quirky presentation on why database developers are so important, from a fellow who has no particular bias on this topic? (hah). These slides start with single-cell organisms and work all the way up to the modern age. You're not likely to have seen anything like it before!
System Integration with Akka and Apache Camelkrasserm
This document summarizes the Apache Camel integration framework and how it can be used with Akka actors. Camel provides a domain-specific language and components for integration patterns and protocols. Akka actors handle asynchronous message processing and can be used as Camel consumers and producers through Akka-Camel integration. Consumer actors receive messages from Camel endpoints, while producer actors send messages to endpoints. Actor components allow actors to be used directly in Camel routes.
The document discusses lessons learned from 4 years of simulating an innovative network processor, emphasizing the need to leverage computing resources through automated testing, intelligent test generation, and storing large numbers of test executions and results in databases to methodically close issues. It provides recommendations for planning verification efforts and creating balanced testing pipelines to efficiently debug problems and keep verification teams productive.
High Availability and Scalability: Too Expensive! Architectures for Future E...Eberhard Wolff
The document discusses high availability and scalability approaches for enterprise systems. Traditionally, enterprises rely on highly reliable hardware, small clusters, and standby data centers. However, this approach is expensive and systems can still fail. The document proposes using virtualization, stateless servers, and NoSQL databases to achieve high availability and scalability at lower cost. Servers are provisioned as "Phoenix servers" that can be easily recreated if failed, without relying on expensive reliable hardware. Data is distributed across servers for redundancy and fine-grained scaling. This software-based approach provides better performance and availability compared to traditional hardware-centric methods.
This document discusses Spring Boot, a framework for building Java applications. It makes building Java web applications easier by providing sensible defaults and automatic configuration. Spring Boot allows building applications that are easy to test, debug and deploy. It supports adding additional libraries and frameworks like Spring Data JPA with minimal configuration. The document demonstrates how to create a basic application with Spring Boot and Spring Data JPA with auto-configured infrastructure and shows how Spring Boot helps with development, operations and deployment of Java applications.
InvokeDynamic for Mere Mortals [JavaOne 2015 CON7682]David Buck
presentation video: https://www.youtube.com/watch?v=gIffIZnmYBM
The invokedynamic instruction (part of JSR-292) has been around since JDK 7. Since it's introduction 4 years ago, we have seen it's adoption by many of the JVM's most popular languages, including Java itself! Despite its importance to most languages that run on the JVM, many developers still do not understand how it is used or implemented. Most resources available about JSR-292 are aimed at language implementers who are experts in compiler theory and language design. This session will be different, and will offer an overview of JSR-292 for people who are curious about how things work, but do not necessarily spend all day working on java bytecode.
The document provides an overview of the Spring framework and instructions for setting up a simple Spring example project in Eclipse. It introduces the core concepts of Spring including dependency injection and inversion of control. It then demonstrates a simple example where two shape classes (Rectangle and Circle) implement a Shape interface and are configured as Spring beans in an XML file. A driver class loads the configuration file and retrieves the shape objects by name to loosely couple the code from the specific shape implementations.
This document provides an overview of key concepts in the Laravel PHP framework, including Lumen, middleware, dependency injection, filesystem/cloud storage, queues, task scheduling, databases, Eloquent ORM, and the LUCID architecture pattern. It discusses how Laravel supports middleware, dependency injection, filesystem abstraction, queueing, scheduling tasks, querying databases, migrations, seeding, and the Eloquent ORM. It also summarizes the LUCID architecture designed by Vinelab to improve code quality by defining features, jobs, services, and domains.
Spring Boot makes it easier to create Java web applications. It provides sensible defaults and infrastructure so developers don't need to spend time wiring applications together. Spring Boot applications are also easier to develop, test, and deploy. The document demonstrates how to create a basic web application with Spring Boot, add Spring Data JPA for database access, and use features for development and operations.
Software Design Patterns in Laravel by Phill SparksPhill Sparks
Laravel makes use of quite a few well-established design patterns that promote reusable object-oriented code. Together, we will investigate the design patterns used in the core of Laravel 4 and discuss how they encourage reusable software.
This document provides an overview and introduction to React basics including:
- Details about upcoming React lab series events on topics like routing, styles, testing, and Flux architecture
- Information on installing and using create-react-app for scaffolding React projects
- An explanation of core React concepts like components, JSX, properties, state, lifecycle methods, and the virtual DOM
- Examples of building a minimal React app with components, properties, and state
LSUG: How we (mostly) moved from Java to ScalaGraham Tackley
Presentation from talk done at the London Scala User Group on Wednesday 12th Jan 2011.
http://skillsmatter.com/podcast/java-jee/how-we-mostly-moved-from-java-to-scala
Solid and Sustainable Development in Scalascalaconfjp
Kazuhiro Sera introduced several of his Scala projects including ScalikeJDBC, Skinny Framework, and AWScala. He discussed some of his philosophies for solid and sustainable development in Scala including using simplified class-based OOP with immutable data structures, avoiding overkill abstraction, writing tests without question, keeping infrastructure lightweight, and ensuring projects have no surprises for newcomers. He welcomed questions during the upcoming AMA session.
This document discusses Eclipse 4.0 and the e4 project. It provides an overview of why e4 was created, including to innovate Eclipse and prepare it for the web. It describes the key aspects of e4, including the modeled workbench, dependency injection, declarative styling using CSS, and a compatibility layer for Eclipse 3.x plugins. The presentation concludes by discussing where to learn more about e4.
The Typesafe Stack includes Scala, Akka, and Play frameworks for building scalable applications. Scala is a statically typed, functional programming language that runs on the JVM and interoperates with Java. Akka is an event-driven middleware for building distributed, fault-tolerant applications using actors. Play is a web framework that enables fast development of RESTful APIs and web applications using Scala templates. Together, these frameworks provide tools for building scalable, distributed systems with easy development.
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...J V
Alfresco Summit 2014 (London)
Though best practice is to leverage Alfresco through the well defined API's, it can be useful to understand the internals of the repository so that your development efforts are the most effective. A deep understanding of the repository will help you to evaluate performance bottlenecks, look for bugs, or make contributions. This session provides an overview of the repository internals, including the major components, the key services, subsystems, and database. We then provide an example where we leverage the repository in a micro-service architecture while building Alfresco's future cloud products and show how the different parts of the repository interact to fulfill requests.
http://summit.alfresco.com/london/sessions/diving-deep-alfresco-repository
https://www.youtube.com/watch?v=TAE9UjC0xxc
Expanding beyond SPL -- More language support in IBM Streams V4.1lisanl
IBM Streams 4.1 expands support for building streaming applications to include Java and Scala. Developers can now create applications using these languages alongside existing support for SPL. The streamsx.topology project supports building topologies in Java and Scala, and applications can integrate data across languages. IBM Streams features like windowing, parallel regions, and checkpointing are supported for Java and Scala applications.
A presentation at Twitter's official developer conference, Chirp, about why we use the Scala programming language and how we build services in it. Provides a tour of a number of libraries and tools, both developed at Twitter and otherwise.
Java can be used to create both standalone applications and web applications like applets. It is compiled to bytecode that runs on any system with a Java Virtual Machine, making it cross-platform. The document discusses Java's usage, safety features, performance compared to C++, standard libraries and key packages like JDBC, RMI, Servlets, EJBs, and how to compile and run basic Java programs and applets.
why Java is so popular is the platform independence. Programs can run on several different types of computer; as long as the computer has a Java Runtime Environment (JRE) installed, a Java program can run on it.
Java is a strongly typed programming language because every variable must be declared with a data type. A variable cannot start off life without knowing the range of values it can hold, and once it is declared, the data type of the variable cannot change
The document is a presentation on Oracle's Project Avatar, which allows Node.js applications to run on the Java Virtual Machine (JVM). Some key points covered include:
- Avatar bridges Node.js and Java/Java EE so that Node.js apps can leverage Java libraries and infrastructure like application servers.
- It provides 95% Node.js compatibility and supports running popular Node.js packages/modules.
- Avatar 2.0 adds enterprise features like advanced multithreading, state sharing, persistence, and Java EE interoperability.
- The architecture allows Node.js code to run alongside Java code on the JVM with access to Java APIs.
The document discusses Scala.js, a compiler that converts Scala code into JavaScript. It covers why Scala.js is useful for developing web applications in Scala instead of JavaScript, how to set up projects using SBT, popular Scala.js libraries for tasks like making RPC calls and building user interfaces, tips for interfacing Scala code with JavaScript libraries, and React integration with Scala.js.
Scala.js is a compiler that compiles Scala source code to equivalent Javascript code. It can be seen as the start of a revolution in developing web application. In this talk, I'll present Scala.js project, common libraries for having a pleasure web development (such as scalatags, autowire and upickle) and integration with well known javascript libraries such as AngularJS and React.js.
Eclipse Hawk provides scalable querying of models by indexing them into graph databases. It addresses challenges of collaborative modeling on large systems by distributed teams. The Hawk API is designed for flexibility, performance, and scalability through features like multiple communication styles, efficient encodings, and paged results.
This document provides an overview of different types of software tests including unit tests, integration tests, functional tests, and acceptance tests. It also discusses test-driven development (TDD) and behavior-driven development (BDD). Some key points:
- Unit tests check specific functionality in isolation and use mocking. Integration tests check component integration using real dependencies. Functional tests use real data to test functionality. Acceptance tests are final tests performed by clients.
- TDD involves writing tests first as an interface/trait before implementation. BDD is similar but focuses on defining behavior.
- ScalaTest is a common Scala testing framework that supports different styles like FunSuite, WordSpec. It allows mocking,
This document provides an overview of different types of software tests including unit tests, integration tests, functional tests, and acceptance tests. It also discusses test-driven development (TDD) and behavior-driven development (BDD). Some key points:
- Unit tests check specific functionality in isolation and use mocking. Integration tests check component integration using real dependencies. Functional tests use real data to test functionality. Acceptance tests are final tests performed by clients.
- TDD involves writing tests first as an interface/trait before implementation. BDD is similar but focuses on defining behavior.
- ScalaTest is a common Scala testing framework that supports different styles like FunSuite, WordSpec. It allows mocking,
My Stackato presentation given to the CopenhagenJS user group. Basic examples were implemented in Node.
More information available at: https://logiclab.jira.com/wiki/display/OPEN/Stackato
This document provides an overview of end-to-end testing with Protractor by summarizing various terminology, demonstrating example tests, and discussing continuous integration practices. It defines key Angular and testing concepts like directives, dependency injection, Jasmine, and WebDriver. Example tests are shown for a calculator app and a mock Facebook app. Continuous integration is discussed in the context of running Protractor tests within Docker containers as part of the software delivery pipeline.
Java is an object-oriented programming language that is platform independent. It was developed by Sun Microsystems, now owned by Oracle. Java code is compiled into bytecode that runs on a Java Virtual Machine (JVM), allowing it to run on any device that supports a JVM. Java supports features like inheritance, polymorphism, and encapsulation. It is widely used for client-side applications like applets and server-side applications like servlets and Java Server Pages (JSP). The main Java editions are Java SE for desktop applications, Java EE for enterprise applications, and Java ME for mobile applications.
Dandelion Hashtable: beyond billion requests per second on a commodity serverAntonios Katsarakis
This slide deck presents DLHT, a concurrent in-memory hashtable. Despite efforts to optimize hashtables, that go as far as sacrificing core functionality, state-of-the-art designs still incur multiple memory accesses per request and block request processing in three cases. First, most hashtables block while waiting for data to be retrieved from memory. Second, open-addressing designs, which represent the current state-of-the-art, either cannot free index slots on deletes or must block all requests to do so. Third, index resizes block every request until all objects are copied to the new index. Defying folklore wisdom, DLHT forgoes open-addressing and adopts a fully-featured and memory-aware closed-addressing design based on bounded cache-line-chaining. This design offers lock-free index operations and deletes that free slots instantly, (2) completes most requests with a single memory access, (3) utilizes software prefetching to hide memory latencies, and (4) employs a novel non-blocking and parallel resizing. In a commodity server and a memory-resident workload, DLHT surpasses 1.6B requests per second and provides 3.5x (12x) the throughput of the state-of-the-art closed-addressing (open-addressing) resizable hashtable on Gets (Deletes).
Digital Banking in the Cloud: How Citizens Bank Unlocked Their MainframePrecisely
Inconsistent user experience and siloed data, high costs, and changing customer expectations – Citizens Bank was experiencing these challenges while it was attempting to deliver a superior digital banking experience for its clients. Its core banking applications run on the mainframe and Citizens was using legacy utilities to get the critical mainframe data to feed customer-facing channels, like call centers, web, and mobile. Ultimately, this led to higher operating costs (MIPS), delayed response times, and longer time to market.
Ever-changing customer expectations demand more modern digital experiences, and the bank needed to find a solution that could provide real-time data to its customer channels with low latency and operating costs. Join this session to learn how Citizens is leveraging Precisely to replicate mainframe data to its customer channels and deliver on their “modern digital bank” experiences.
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfChart Kalyan
A Mix Chart displays historical data of numbers in a graphical or tabular form. The Kalyan Rajdhani Mix Chart specifically shows the results of a sequence of numbers over different periods.
Generating privacy-protected synthetic data using Secludy and MilvusZilliz
During this demo, the founders of Secludy will demonstrate how their system utilizes Milvus to store and manipulate embeddings for generating privacy-protected synthetic data. Their approach not only maintains the confidentiality of the original data but also enhances the utility and scalability of LLMs under privacy constraints. Attendees, including machine learning engineers, data scientists, and data managers, will witness first-hand how Secludy's integration with Milvus empowers organizations to harness the power of LLMs securely and efficiently.
Discover top-tier mobile app development services, offering innovative solutions for iOS and Android. Enhance your business with custom, user-friendly mobile applications.
Monitoring and Managing Anomaly Detection on OpenShift.pdfTosin Akinosho
Monitoring and Managing Anomaly Detection on OpenShift
Overview
Dive into the world of anomaly detection on edge devices with our comprehensive hands-on tutorial. This SlideShare presentation will guide you through the entire process, from data collection and model training to edge deployment and real-time monitoring. Perfect for those looking to implement robust anomaly detection systems on resource-constrained IoT/edge devices.
Key Topics Covered
1. Introduction to Anomaly Detection
- Understand the fundamentals of anomaly detection and its importance in identifying unusual behavior or failures in systems.
2. Understanding Edge (IoT)
- Learn about edge computing and IoT, and how they enable real-time data processing and decision-making at the source.
3. What is ArgoCD?
- Discover ArgoCD, a declarative, GitOps continuous delivery tool for Kubernetes, and its role in deploying applications on edge devices.
4. Deployment Using ArgoCD for Edge Devices
- Step-by-step guide on deploying anomaly detection models on edge devices using ArgoCD.
5. Introduction to Apache Kafka and S3
- Explore Apache Kafka for real-time data streaming and Amazon S3 for scalable storage solutions.
6. Viewing Kafka Messages in the Data Lake
- Learn how to view and analyze Kafka messages stored in a data lake for better insights.
7. What is Prometheus?
- Get to know Prometheus, an open-source monitoring and alerting toolkit, and its application in monitoring edge devices.
8. Monitoring Application Metrics with Prometheus
- Detailed instructions on setting up Prometheus to monitor the performance and health of your anomaly detection system.
9. What is Camel K?
- Introduction to Camel K, a lightweight integration framework built on Apache Camel, designed for Kubernetes.
10. Configuring Camel K Integrations for Data Pipelines
- Learn how to configure Camel K for seamless data pipeline integrations in your anomaly detection workflow.
11. What is a Jupyter Notebook?
- Overview of Jupyter Notebooks, an open-source web application for creating and sharing documents with live code, equations, visualizations, and narrative text.
12. Jupyter Notebooks with Code Examples
- Hands-on examples and code snippets in Jupyter Notebooks to help you implement and test anomaly detection models.
Essentials of Automations: Exploring Attributes & Automation ParametersSafe Software
Building automations in FME Flow can save time, money, and help businesses scale by eliminating data silos and providing data to stakeholders in real-time. One essential component to orchestrating complex automations is the use of attributes & automation parameters (both formerly known as “keys”). In fact, it’s unlikely you’ll ever build an Automation without using these components, but what exactly are they?
Attributes & automation parameters enable the automation author to pass data values from one automation component to the next. During this webinar, our FME Flow Specialists will cover leveraging the three types of these output attributes & parameters in FME Flow: Event, Custom, and Automation. As a bonus, they’ll also be making use of the Split-Merge Block functionality.
You’ll leave this webinar with a better understanding of how to maximize the potential of automations by making use of attributes & automation parameters, with the ultimate goal of setting your enterprise integration workflows up on autopilot.
The Microsoft 365 Migration Tutorial For Beginner.pptxoperationspcvita
This presentation will help you understand the power of Microsoft 365. However, we have mentioned every productivity app included in Office 365. Additionally, we have suggested the migration situation related to Office 365 and how we can help you.
You can also read: https://www.systoolsgroup.com/updates/office-365-tenant-to-tenant-migration-step-by-step-complete-guide/
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsDianaGray10
Join us to learn how UiPath Apps can directly and easily interact with prebuilt connectors via Integration Service--including Salesforce, ServiceNow, Open GenAI, and more.
The best part is you can achieve this without building a custom workflow! Say goodbye to the hassle of using separate automations to call APIs. By seamlessly integrating within App Studio, you can now easily streamline your workflow, while gaining direct access to our Connector Catalog of popular applications.
We’ll discuss and demo the benefits of UiPath Apps and connectors including:
Creating a compelling user experience for any software, without the limitations of APIs.
Accelerating the app creation process, saving time and effort
Enjoying high-performance CRUD (create, read, update, delete) operations, for
seamless data management.
Speakers:
Russell Alfeche, Technology Leader, RPA at qBotic and UiPath MVP
Charlie Greenberg, host
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving
Manufacturing custom quality metal nameplates and badges involves several standard operations. Processes include sheet prep, lithography, screening, coating, punch press and inspection. All decoration is completed in the flat sheet with adhesive and tooling operations following. The possibilities for creating unique durable nameplates are endless. How will you create your brand identity? We can help!
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyScyllaDB
Freshworks creates AI-boosted business software that helps employees work more efficiently and effectively. Managing data across multiple RDBMS and NoSQL databases was already a challenge at their current scale. To prepare for 10X growth, they knew it was time to rethink their database strategy. Learn how they architected a solution that would simplify scaling while keeping costs under control.
Driving Business Innovation: Latest Generative AI Advancements & Success StorySafe Software
Are you ready to revolutionize how you handle data? Join us for a webinar where we’ll bring you up to speed with the latest advancements in Generative AI technology and discover how leveraging FME with tools from giants like Google Gemini, Amazon, and Microsoft OpenAI can supercharge your workflow efficiency.
During the hour, we’ll take you through:
Guest Speaker Segment with Hannah Barrington: Dive into the world of dynamic real estate marketing with Hannah, the Marketing Manager at Workspace Group. Hear firsthand how their team generates engaging descriptions for thousands of office units by integrating diverse data sources—from PDF floorplans to web pages—using FME transformers, like OpenAIVisionConnector and AnthropicVisionConnector. This use case will show you how GenAI can streamline content creation for marketing across the board.
Ollama Use Case: Learn how Scenario Specialist Dmitri Bagh has utilized Ollama within FME to input data, create custom models, and enhance security protocols. This segment will include demos to illustrate the full capabilities of FME in AI-driven processes.
Custom AI Models: Discover how to leverage FME to build personalized AI models using your data. Whether it’s populating a model with local data for added security or integrating public AI tools, find out how FME facilitates a versatile and secure approach to AI.
We’ll wrap up with a live Q&A session where you can engage with our experts on your specific use cases, and learn more about optimizing your data workflows with AI.
This webinar is ideal for professionals seeking to harness the power of AI within their data management systems while ensuring high levels of customization and security. Whether you're a novice or an expert, gain actionable insights and strategies to elevate your data processes. Join us to see how FME and AI can revolutionize how you work with data!
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-und-domino-lizenzkostenreduzierung-in-der-welt-von-dlau/
DLAU und die Lizenzen nach dem CCB- und CCX-Modell sind für viele in der HCL-Community seit letztem Jahr ein heißes Thema. Als Notes- oder Domino-Kunde haben Sie vielleicht mit unerwartet hohen Benutzerzahlen und Lizenzgebühren zu kämpfen. Sie fragen sich vielleicht, wie diese neue Art der Lizenzierung funktioniert und welchen Nutzen sie Ihnen bringt. Vor allem wollen Sie sicherlich Ihr Budget einhalten und Kosten sparen, wo immer möglich. Das verstehen wir und wir möchten Ihnen dabei helfen!
Wir erklären Ihnen, wie Sie häufige Konfigurationsprobleme lösen können, die dazu führen können, dass mehr Benutzer gezählt werden als nötig, und wie Sie überflüssige oder ungenutzte Konten identifizieren und entfernen können, um Geld zu sparen. Es gibt auch einige Ansätze, die zu unnötigen Ausgaben führen können, z. B. wenn ein Personendokument anstelle eines Mail-Ins für geteilte Mailboxen verwendet wird. Wir zeigen Ihnen solche Fälle und deren Lösungen. Und natürlich erklären wir Ihnen das neue Lizenzmodell.
Nehmen Sie an diesem Webinar teil, bei dem HCL-Ambassador Marc Thomas und Gastredner Franz Walder Ihnen diese neue Welt näherbringen. Es vermittelt Ihnen die Tools und das Know-how, um den Überblick zu bewahren. Sie werden in der Lage sein, Ihre Kosten durch eine optimierte Domino-Konfiguration zu reduzieren und auch in Zukunft gering zu halten.
Diese Themen werden behandelt
- Reduzierung der Lizenzkosten durch Auffinden und Beheben von Fehlkonfigurationen und überflüssigen Konten
- Wie funktionieren CCB- und CCX-Lizenzen wirklich?
- Verstehen des DLAU-Tools und wie man es am besten nutzt
- Tipps für häufige Problembereiche, wie z. B. Team-Postfächer, Funktions-/Testbenutzer usw.
- Praxisbeispiele und Best Practices zum sofortigen Umsetzen
What is an RPA CoE? Session 1 – CoE VisionDianaGray10
In the first session, we will review the organization's vision and how this has an impact on the COE Structure.
Topics covered:
• The role of a steering committee
• How do the organization’s priorities determine CoE Structure?
Speaker:
Chris Bolin, Senior Intelligent Automation Architect Anika Systems
Conversational agents, or chatbots, are increasingly used to access all sorts of services using natural language. While open-domain chatbots - like ChatGPT - can converse on any topic, task-oriented chatbots - the focus of this paper - are designed for specific tasks, like booking a flight, obtaining customer support, or setting an appointment. Like any other software, task-oriented chatbots need to be properly tested, usually by defining and executing test scenarios (i.e., sequences of user-chatbot interactions). However, there is currently a lack of methods to quantify the completeness and strength of such test scenarios, which can lead to low-quality tests, and hence to buggy chatbots.
To fill this gap, we propose adapting mutation testing (MuT) for task-oriented chatbots. To this end, we introduce a set of mutation operators that emulate faults in chatbot designs, an architecture that enables MuT on chatbots built using heterogeneous technologies, and a practical realisation as an Eclipse plugin. Moreover, we evaluate the applicability, effectiveness and efficiency of our approach on open-source chatbots, with promising results.
2. What is WALA?
! Java libraries for static and dynamic program
analysis
! Initially developed at IBM T.J. Watson Research
Center
! Open source release in 2006 under Eclipse
Public License
! Key design goals
• Robustness
• Efficiency
• Extensibility
3. (Some) Previous Uses of WALA
! Research
• over 40 publications from 2003-present
• Including one at PLDI’10 (MemSAT)
• http://wala.sf.net/wiki/index.php/Publications.php
! Products
• Rational Software Analyzer: NPEs (Loginov et al.
ISSTA’08), resource leak detection (Torlak and
Chandra, ICSE’10)
• Rational AppScan: taint analysis (Tripp et al.,
PLDI’09), string analysis (Geay et al., ICSE’09)
• Tivoli Storage Manager: Javascript analysis
• WebSphere: analysis of J2EE apps
4. WALA Features: Static Analysis
! Pointer analysis / call graph construction
• Several algorithms provided (RTA, variants of
Andersen’s analysis)
• Highly customizable (e.g., context sensitivity policy)
• Tuned for performance (time and space)
! Interprocedural dataflow analysis framework
• Tabulation solver (Reps-Horwitz-Sagiv POPL’95) with
extensions
• Also tuned for performance
! Context-sensitive slicing framework
• With customizable dependency tracking
5. Other Key WALA Features
! Multiple language front-ends
• Bytecode: Java, .NET (internal)
• Source (CAst): Java, Javascript, X10, PHP (partial,
internal), ABAP (internal)
• Add your own!
! Generic analysis utilities / data structures
• Graphs, sets, maps, constraint solvers, …
! Limited code transformation
• Java bytecode instrumentation via Shrike
• But, main WALA IR is immutable, and no code gen
provided
" designed primarily for computing analysis info
6. What We’ll Cover
! Overviews of main modules
• Important features
• Key class names
• How things fit together
• How to customize
! “Deep dives” into real code
• Interprocedural dataflow analysis example
• CAst Javascript front-end
7. How to get WALA
! Walkthrough on “Getting Started” page at wala.sf.net
! Code available in SVN repository
• Trunk or previous tagged releases
• Split into several Eclipse projects, e.g.,
com.ibm.wala.core, com.ibm.wala.core.tests
! Dependence on Eclipse
• Easiest to build / run from Eclipse, but command line
also supported
• Runtime dependence on some Eclipse plugins
(progress monitors, GUI functionality, etc.); must be
in classpath
39. Building a Call Graph
buildCG(String jarFile) {
// represents code to be analyzed
AnalyisScope scope = AnalysisScopeReader (1)
.makeJavaBinaryAnalysisScope(jarFile, null);
// a class hierarchy for name resolution, etc.
IClassHierarchy cha = ClassHierarchy.make(scope); (2)
// what are the call graph entrypoints?
Iterable<Entrypoint> e = (3)
Util.makeMainEntrypoints(scope, cha);
// encapsulates various analysis options
AnalysisOptions o = new AnalysisOptions(scope, e); (4)
// builds call graph via pointer analysis
CallGraphBuilder builder = (5)
Util.makeZeroCFABuilder(o, new AnalysisCache(),
cha, scope);
CallGraph cg = builder.makeCallGraph(o, null); (6)
}
40. AnalysisScope
! Represents a set of files to analyze
! To construct from classpath:
AnalysisScopeReader.makeJavaBinaryAnalysisScope()
! To read info from scope text file:
AnalysisScopeReader.readJavaScope()
• Each line of scope file gives loader, lang, type, val
" E.g., “Application,Java,jarFile,bcel-5.2.jar”
" Common types: classFile, sourceFile, binaryDir, jarFile
" Examples in com.ibm.wala.core.tests/dat
! Exclusions: exclude some classes from consideration
• Used to improve scalability of pointer analysis, etc.
• Also specified in text file; see, e.g.,
com.ibm.wala.core.tests/dat/GUIExclusions.txt
41. Background: Class Loaders
! In Java, a class is identified by name and class loader
• E.g., < Primordial, java.lang.Object >
! Class loaders form a tree, rooted at Primordial
! Name lookup first delegates to parent class loader
• So, can’t write an app class java.lang.Object
! User-defined class loaders can provide isolation
• Used by Eclipse for plugins, J2EE app servers
! WALA naming models class loaders
42. Multiple Names in Bytecode
// this is java.lang.Object
class Object {
public String toString() { … }
}
// no overriding of toString()
class B extends Object {}
class A extends B {}
Legal names in bytecode:
<Application, A, toString()>,
<Application, B, toString()>,
<Application, java.lang.Object, toString()>,
<Primordial, java.lang.Object, toString()>
Resolved entity:
<Primordial, java.lang.Object, toString()>
43. WALA Name Resolution
Entity Reference Type Resolved
Type
Resolver Method
class TypeReference IClass lookupClass()
method MethodReference IMethod resolveMethod()
Field FieldReference IField resolveField()
Entity references resolved via IClassHierarchy
44. More on class hierarchies
! For Java class hierarchy: ClassHierarchy.make(scope)
! Supports Java-style subtyping (single inheritance,
multiple interfaces)
! Necessary for constructing method IRs, since only
resolved IMethods have bytecode info
! Watch out for memory leaks!
• Resolved entities (IClass, IMethod, etc.) keep
pointers back to class hierarchy
• In general, use entity references in analysis results
46. Tabulation-Based Analysis
! “Functional approach” to context-sensitive analysis
(Sharir and Pnueli, 1981)
! Tabulates partial function summaries on demand
! Some enhancements in WALA’s implementation
• Multiple return sites for calls (for exceptions)
• Optional merge operators
• Handles partially balanced problems
• Customizable worklist orderings
(Reps, Horwitz, Sagiv, POPL95)
47. T
Tabulation Overview
TabulationSolver
IFlowFunctionMap
Edge flow functions for
supergraph
TabulationDomain
Provides numbering of
domain facts
TabulationResult
ISupergraph
Supergraph over
which analysis is
computed
Seeds
Initial path edges for
analysisTabulationProblem
48. Supergraph
! Collection of “procedure graphs,” connected by calls
• ICFGSupergraph: procedure graphs are CFGs
• SDGSupergraph: procedure graphs are PDGs
! Example call representation for ICFGSupergraph
• (For general supergraph , possibly many calls, returns, entries, exits)
EXC.
HANDLER
ENTRY
CALL
EXIT
RETURN
CALLER CALLEE
EXIT
Normal call-to-ret
Exc. call-to-ret
Normal call-to-entry
Normal ret-to-exit
Exc. ret-to-exit
49. Domain / Flow Functions / Seeds
! TabulationDomain
• Maintains mapping from facts to integers
• Controls worklist priorities (optional)
! IFlowFunctionMap
• Flow functions on supergraph edges
• All functions map int (or two ints) to IntSet
(via TabulationDomain)
• Function for each type of edge (normal, call->return,
call->entry, exit->return)
• Also, call->return function for “missing” calls
" For handling missing code, CG expansion (Snugglebug)
! Seeds (TabulationProblem.initialSeeds())
• Depends on problem / domain representation
50. Partially Balanced Problems
! For when flows can start / end in a non-entrypoint
• E.g., slice from non-entrypoint statement
! PartiallyBalancedTabulationProblem
• Additional “unbalanced” return flow function for
return without a call
• getFakeEntry(): source node for path edges of
partially balanced flows
! Compute with PartiallyBalancedTabulationSolver
! Examples: ContextSensitiveReachingDefs, Slicer
51. Debugging Your Analysis
! IFDSExplorer
• Gives GUI view of analysis result
• Needs paths to GraphViz dot executable and PDF
viewer
! Set VM property com.ibm.wala.fixedpoint.impl.verbose
to true for occasional lightweight info
! Increase TabulationSolver.DEBUG_LEVEL for detailed info
52. Deep Dive: Reaching Defs
! The classic dataflow analysis, for Java static fields
! Three implementations available in
com.ibm.wala.core.tests
• IntraprocReachingDefs
" Uses BitVectorSolver, a specialized DataflowSolver
• ContextInsensitiveReachingDefs
" Uses BitVectorSolver over interprocedural CFG
• ContextSensitiveReachingDefs
" Uses TabulationSolver
! We’ll focus on ContextSensitiveReachingDefs
53. Example
class StaticDataflow {
static int f, g;
static void m() { f = 2; }
static void testInterproc() {
f = 3;
m(); (1)
g = 4;
m(); (2)
}
}
Context-sensitive analysis should give different result
after (1) and (2)
54. The Domain and Supergraph
! Supergraph: ICFGSupergraph
• Procedures: call graph nodes (CGNode)
" In context-sensitive call graph, possibly many CGNodes for one
Imethod
• Nodes: BasicBlockInContext<IExplodedBasicBlock>
" “exploded” basic block has at most one instruction (eases
writing transfer functions)
" BasicBlockInContext pairs BB with enclosing CGNode
! Domain (static field writes): Pair<CGNode,Integer>
• Integer is index in IR instruction array; only valid way to
uniquely identify IR instruction
• ReachingDefsDomain extends MutableMapping to
maintain fact numbering
55. Flow Functions (1)
! Normal flow for non-putstatics is
IdentityFlowFunction.identity()
! Most call-related flow functions are also identity
• Since static fields are in global scope
! Call-to-return function is
KillEverything.singleton()
• Defs must survive callee to reach return
56. Flow Functions (2)
public IntSet getTargets(int d1) {
IntSet result = MutableSparseIntSet.makeEmpty();
// first, gen this statement
int factNum = domain.getMappedIndex(Pair.make(node, index));
result.add(factNum);
// if incoming statement defs the same static field, kill it;
// otherwise, keep it
if (d1 != factNum) { // must be different statement
IField sf = cha.resolveField(putInstr.getField());
Pair<CGNode, Integer> other = domain.getMappedObject(d1);
SSAPutInstruction otherPut = getPutInstr(other);
IField otherSF = cha.resolveField(otherPut.getField());
if (!sf.equals(otherSF)) { result.add(d1); }
}
return result;
}
Normal flow function for putstatic
(modified for formatting / clarity)
57. Seeds
! Standard tabulation approach: special ‘0’ fact
• Add ‘0 -> 0’ edge to all flow functions
• Seed with (main_entry, 0) -> (main_entry, 0)
! Our approach: partially balanced tabulation
• For field write numbered n in basic block b of method
m, add seed (m_entry, n) -> (b, n)
" (source fact doesn’t matter)
• Unbalanced flow function is just identity
• Advantage: keeps other flow functions cleaner
• See ReachingDefsProblem.collectInitialSeeds()
58. Putting it all Together
! ReachingDefsProblem collects domain, supergraph,
flow functions, seeds
! Running analysis (simplified):
PartiallyBalancedTabulationSolver solver =
new PartiallyBalancedTabulationSolver(
new ReachingDefsProblem());
TabulationResult result = solver.solve();
! In the real code:
• Lots of long generic type instantiations (sigh)
• Handling CancelException (enables cancelling
running analysis from GUI)
60. Call Graph Builder Overview
CallGraphBuilder
Context Selector
What context to use
when analyzing call to
some method?
Heap Model
How should
objects and
pointers be
abstracted?
CallGraph
AnalysisOptions
Specifies entrypoints,
how to handle reflection,
etc.
PointerAnalysis
61. Entrypoints
! What are entrypoint methods?
• main() method
" Util.makeMainEntrypoints()
• All application methods
" AllApplicationEntrypoints
• JavaEE Servlet methods, Eclipse plugin entries, …
! What types are passed to entrypoint arguments?
• Just declared parameter types (DefaultEntrypoint)
• Some concrete subtype (ArgumentTypeEntrypoint)
• All subtypes (SubtypesEntrypoint)
62. Heap Model
! Controls abstraction of pointers and object instances
! InstanceKey: abstraction of an object
• All objects of some type (ConcreteTypeKey)
• Objects allocated by some statement in some calling
context (AllocationSiteInNode)
• ZeroXInstanceKeys: customizable factory
! PointerKey: abstraction of a pointer
• Local variable in some calling context
(LocalPointerKey)
• Several merged vars (offline substitution), etc.
63. Context Selector
! Gives context to use for callee method at some call site
! Context examples
• The default context (Everywhere)
• A call string (CallStringContext)
• Receiver object (ReceiverInstanceContext)
! ContextSelector examples
• nCFAContextSelector: n-level call strings
• ContainerContextSelector: object sensitivity for
containers
64. Built-In Algorithms
Rapid Type Analysis (RTA)
0-CFA
context-insensitive, class-based heap
0-1-CFA
context-insensitive,
allocation-site-based heap
0-1-Container-CFA
0-1-CFA with object-sensitive containers
Increasingprecision
(Grove and Chambers, TOPLAS 2001)
For builders, see com.ibm.wala.ipa.callgraph.impl.Util
65. Performance Tips
! Use AnalyisScope exclusions
• Often, much of standard library (e.g., GUI libraries) is
irrelevant
! Analyze older libraries
• Java 1.4 libraries much smaller than Java 6
! Tune context-sensitivity policy
• E.g., more sensitivity just for containers
66. Code Modelling (Advanced)
! SSAContextInterpreter: builds SSA for a method
• Normally, based on bytecode
• Customized for reflection, Object.clone(), etc.
! MethodTargetSelector: determines method dispatch
• Normally, based on types / class hierarchy
• Customized for native methods, JavaEE, etc.
! ClassTargetSelector: determines types of allocated
objects
• Normally, type referenced in new expression
• Customized for adding synthetic fields, JavaEE, etc.
67. Refinement-Based Points-To
Analysis
! Refines analysis precision as requested by client
• Computes results on demand
• See Sridharan and Bodik, PLDI 2006
! Implemented in DemandRefinementPointsTo
• Baseline analysis is context insensitive
" Field sensitivity, on-the-fly call graph via refinement
• Context sensitivity (modulo recursion), other regular
properties via additional state machines
• Refinement policy can be easily customized
• Can also compute “flows to” on demand
! Usage fairly well documented on wiki
! See DemandCastChecker for an example client
70. Statement
! Identifies a node in the System Dependence Graph (SDG)
[Horwitz,Reps,Binkley,TOPLAS’90]
! Key statement types
• NormalStatement
" Normal SSA IR instruction
" Represented by CGNode and instruction index
• ParamCaller, ParamCallee
" Extra nodes for modeling parameter passing
" SDG edges from def -> ParamCaller -> ParamCallee -> use
• NormalReturnCaller, NormalReturnCallee
" Analogous to ParamCaller, ParamCallee
" Also ExceptionalReturnCaller/Callee
• HeapParamCaller, HeapParamCallee, etc.
" For modeling interprocedural heap-based data deps
" Edges via interprocedural mod-ref analysis
71. Dependence Options
! DataDependenceOptions
• FULL (all deps) and NONE (no deps)
• NO_BASE_PTRS: ignore dependencies for memory
access base pointers
" E.g., exclude forward deps from defs of x to y=x.f
• NO_HEAP: ignore dependencies to/from heap locs
• NO_EXCEPTIONS: ignore deps from throw to catch
• Various combinations (e.g., NO_BASE_NO_HEAP)
! ControlDependenceOptions
• FULL (all deps) and NONE (no deps)
• NO_EXCEPTIONAL_EDGES: ignore exceptional control
flow
72. Thin Slicing
! Just “top-level” data dependencies
(see [Sridharan-Fink-Bodik PLDI’07])
! For context-sensitive thin slicing, use Slicer with
DataDependenceOptions.NO_BASE_PTRS and
ControlDependenceOptions.NONE
! For efficient context-insensitive thin slicing, use the
CISlicer class
73. Performance Tips
! Some configs do not scale to large programs
• E.g., context-sensitive slicing with heap deps
• Discussion in [SFB07]
! Run with minimum dependencies needed
! Apply pointer analysis scalability tips
• Exclusions, earlier Java libraries
75. Key Shrike Features
! Patch-based instrumentation API
• Each instrumentation pass implemented as a patch
• Several patches can be applied simultaneously to original
bytecode
" No worries about instrumenting the instrumentation
• Branch targets / exc. handlers automatically updated
! Efficient
• Unmodified class methods copied without parsing
• Efficient bytecode representation / parsing
" Array of immutable instruction objects
" Constant instrs represented with single shared object
! Some ugliness hidden
• JSRs, exception handler ranges, 64k method limit
76. Key Shrike Classes
MethodEditor
Core class for
transforming
bytecodes via patches
ClassReader
Immutable view
of .class file info;
reads data lazily
ShrikeCT:
reading / writing
.class files
ShrikeBT:
instrumenting
bytecodes
MethodData
Mutable view of
method info
ClassInstrumenter
Utility for instrumenting an
existing class (mutable)
ClassWriter
Generates JVM
representation of a
class
CTCompiler
Compiles ShrikeBT method
into JVM bytecodes
77. Instrumenting A Method (1)
instrument(byte[] orig, int i) {
// mutable helper class
ClassInstrumenter ci = (1)
new ClassInstrumenter(orig);
// mutable representation of method data
MethodData md = ci.visitMethod(i); (2)
// see next slide; mutates md, ci
doInstrumentation(md); (3)
// output instrumented class in JVM format
ClassWriter w = ci.emitClass(); (4)
byte[] modified = w.makeBytes(); (5)
}
78. Instrumenting A Method (2)
doInstrumentation(MethodData md) {
// manages the patching process
MethodEditor me = new MethodEditor(md); (1)
me.beginPass(); (2)
// add patches
me.insertAtStart(new Patch() { … }); (3)
me.insertBefore(j, new Patch() { … }); (4)
…
// apply patches (simultaneously)
me.applyPatches(); me.endPass(); (5)
}
79. Shrike Clients
! Small example: see com.ibm.wala.shrike.bench.Bench
! Dila (com.ibm.wala.dila in incubator)
• Dynamic call graph construction
(CallGraphInstrumentation)
• Utilities for runtime instrumentation
" Instrumenting class loader
" Mechanisms for controlling what gets instrumented
• Work continues on better WALA integration / docs
80. Java Annotation Support
! Supported features
• Reading .class file attributes
• Parsing some annotation info from attributes
" E.g., generics (com.ibm.wala.types.generics)
• Manipulating JVM class attributes directly
" See ClassWriter.addClassAttribute()
! Missing features
• Higher-level APIs for modifying known annotations
• Automatic fixing of StackMapTable attribute after
instrumentation
" Speeds bytecode verification in Java 6
81. Eclipse Support
! WALA projects are Eclipse plug-ins
• Easy to invoke from other plug-in
! Various utilities in com.ibm.wala.ide project
• EclipseProjectPath: creates AnalysisScope for
Eclipse project
• JdtUtil: find all Java projects, code within projects,
etc.
! JDT CAst frontend for Java source analysis
! Prototype utils in com.ibm.wala.eclipse project
• E.g., display call graph for selected project