Presented at the 21st IEEE International Conference on Program Comprehension (ICPC 2013), San Francisco (USA). Website of the paper: http://softlang.uni-koblenz.de/explore-API-usage/
A Recommender System for Refining Ekeko/X TransformationCoen De Roover
ย
This document discusses an automated recommender system for refining Ekeko/X transformations. It begins by introducing logic meta-programming and how it allows querying a "database" of program information using logic relations. Templates with meta-variables and directives are used to specify transformations, and formal operators define ways to mutate templates. A genetic search evaluates templates based on precision, recall, partial matches, and directive usage to recommend refinements for better specifying transformations.
A recommender system for generalizing and refining code templatesCoen De Roover
ย
Presentation at the 2014 Benevol seminar (http://benevol.cwi.nl/2014/program.html) about the use of genetic search to refine code templates.
Ekeko Technology Showdown at SoTeSoLa 2012Coen De Roover
ย
This document describes Ekeko, an applicative logic meta-programming library for Clojure's core.logic that allows specifying code characteristics and querying code bases declaratively. Ekeko provides relations that can represent syntactic, structural, control flow and data flow properties of code derived from the Eclipse JDT and SOOT analyses. For example, it contains a relation to find expressions that may alias at runtime. Ekeko allows incrementally building up logic queries to identify code idioms. Queries are composed of goals that core.logic searches over to return substitutions. This provides a way to programmatically query and transform code bases using logic programming.
A Logic Meta-Programming Foundation for Example-Driven Pattern Detection in O...Coen De Roover
ย
Presentation at the Postdoctoral symposium of the 2011 International Conference on Software Maintenance, accompanying the paper
http://soft.vub.ac.be/Publications/2011/vub-soft-tr-11-11.pdf
The document provides definitions and explanations of key concepts in C++ like encapsulation, inheritance, polymorphism, overriding, multiple inheritance, constructors, destructors, virtual functions, storage qualifiers, functions, pointers, and name mangling. It discusses these concepts over multiple sections in detail with examples.
Generating Assertion Code from OCL: A Transformational Approach Based on Simi...Institute of Science Tokyo
ย
This document presents an approach for generating assertion code from the Object Constraint Language (OCL) using model transformations. The approach constructs a hierarchy of programming languages based on their structural similarities. This allows rules for translating OCL to be reused across multiple implementation languages, saving approximately 50% of the effort compared to creating individual translators. An evaluation implemented the approach in Maude and demonstrated its ability to generate code for Java, Python, Haskell and O'Haskell from a single OCL specification.
This document provides 50 interview questions on C programming language organized into 5 chapters: Variables & Control Flow, Operators, Constants & Structures, Functions, Pointers, and Programs. It aims to help both freshers and experienced programmers quickly brush up on basic C concepts commonly asked during job interviews at top companies. Each question is accompanied by a detailed answer along with code examples where applicable. Feedback is welcomed to be sent to the publisher.
C++ provides classes as templates to define common data structures and algorithms. Classes like vector and list define containers that store and retrieve objects through iterators. Iterators allow traversing container elements without knowing details of the underlying data structure. The Standard Template Library contains many useful container and algorithm classes that take advantage of templates and iterators to provide powerful and flexible generic programming capabilities in C++.
This document provides solutions to exercises from Chapters 1 through 14 of a Java textbook. It presents solutions for 28 different exercises involving Java concepts like classes, objects, inheritance, polymorphism, and interfaces. Each solution is a code listing or brief explanation.
This document discusses key concepts of object-oriented programming in C++ including abstraction, encapsulation, polymorphism, inheritance, and runtime polymorphism. It explains that abstraction allows hiding details behind well-defined interfaces, encapsulation provides guarantees that abstractions are used correctly, and polymorphism simplifies code by providing a common interface for different implementations. Inheritance enables composing new abstractions from existing ones, and runtime polymorphism provides runtime binding. Coexistence with other languages and systems is also important.
Qcon2011 functions rockpresentation_f_sharpMichael Stal
ย
This document provides an overview of functional programming concepts and introduces the F# programming language. It discusses core FP topics like immutable values, recursion, and higher-order functions. It then presents an introduction to F#, explaining that it combines object-oriented and functional programming. The document provides examples of basic F# syntax like functions, pattern matching, and the type system. It also illustrates concepts like currying, lazy evaluation, and the pipeline operator.
This document provides an introduction to C++ and covers 10 topics: 1) Object-oriented programming principles, 2) Classes and objects, 3) Functions, 4) Constructors and destructors, 5) Operator overloading and type conversion, 6) Inheritance, 7) Pointers, virtual functions and polymorphism, 8) Working with files, 9) Templates, and 10) Exception handling. Each topic is briefly described in 1-2 paragraphs with examples provided for some concepts like encapsulation, inheritance, polymorphism, and exception handling. The document serves as a high-level overview of key C++ concepts and features.
Qcon2011 functions rockpresentation_scalaMichael Stal
ย
Scala functions provide powerful ways to decompose problems and harness the benefits of functional programming. The presentation introduces core concepts of functional programming using Scala as an example language, highlighting how Scala combines object-oriented and functional programming. It presents benefits like immutability, higher-order functions, and improved concurrency while avoiding past performance issues through modern virtual machines and libraries.
This PPT File helps IT freshers with the Basic Interview Questions, which will boost there confidence before going to the Interview. For more details and Interview Questions please log in www.rekruitin.com and click on Job Seeker tools. Also register on the and get employed.
By ReKruiTIn.com
The document provides an overview of key concepts in C++, including:
1) C++ adds object-oriented programming capabilities to C while maintaining C's power and flexibility. It was created in 1979 to provide object-oriented programming features to C.
2) Object-oriented programming encourages breaking problems into constituent parts called objects that contain related instructions and data. The three main traits of OOP are encapsulation, polymorphism, and inheritance.
3) C++ supports both traditional and modern styles, with newer headers placed in the std namespace. Keywords like class, public, and virtual allow defining classes and controlling access to members. Functions can be overloaded if their signatures differ.
This presentation introduces the main features of Scala, an object oriented and functional programming language. The main focus of the slides is to show how the language implements natively some of the patterns and best practices that are no present in other programming languages, such as Java, C++ and so on.
In detail, the presentation spans these concepts:
- Language's main syntax
- Classes, abstract classes, objects and traits (mixin)
- The Option class
- An introduction to generics
- Implicit classes
- Functions
- Recursion (simple and tail)
- Currying
- Call by value / name
The presentation is took from the Software Engineering course I run in the bachelor-level informatics curriculum at the University of Padova.
This presentation introduces some advanced concepts of generics in Java. These slides introduce the following concepts:
- Generic classes and methods
- Type variable bounds
- Type erasure process
- Generics and inheritance
- Wildcard types
The presentation is took from the Java course I run in the bachelor-level informatics curriculum at the University of Padova.
Java annotations allow metadata to be added to Java code elements like classes, methods, and fields. This metadata can be read by tools and libraries to affect how the code is processed. Common built-in annotations include @Deprecated, @Override, and @SuppressWarnings. Annotations can also be applied to other annotations to specify how they function, such as their retention policy or valid targets. As an example, the document describes how to build a simple annotation-based test framework using the @Test annotation to mark test methods.
This document provides an overview of C++ programming concepts including:
1. C++ programs consist of functions, with every program containing a main() function. Functions contain declarations, statements, comments, and can call libraries.
2. Variables must be declared with a type and can be used to store values. C++ supports integer, floating point, character, and other variable types.
3. C++ allows selection and decision making using if/else statements, switch statements, logical operators, and loops like while and for. Operators allow comparisons and boolean evaluations.
Generics and Collections
The document discusses generics and collections in Java. It defines generics as a style of programming that allows algorithms to operate on objects of different types while providing compile-time type safety. The Java collections framework supports generics to specify the type of objects stored in a collection. Common collection classes like ArrayList, LinkedList, and HashMap are discussed along with their key characteristics.
This document provides an overview of new features being introduced in Java 8, with a focus on lambda expressions, default methods, and bulk data operations. It discusses the syntax and usage of lambda expressions, how they are represented at runtime using functional interfaces, and how variable capturing works. New functional interfaces being added to Java 8 are presented, including examples like Consumer and Function. The document also explores how lambda expressions are compiled, showing how invokedynamic bytecode instructions are used to dispatch lambda calls at runtime. In summary, the document serves as an introduction to key new language features in Java 8 that improve support for functional programming and parallel operations.
This document provides an agenda for a Java 8 training session that covers Lambdas and functional interfaces, the Stream API, default and static methods in interfaces, Optional, the new Date/Time API, and Nashorn JavaScript engine. It includes sections on Lambda expressions and method references syntax, functional interfaces, built-in functional interfaces, streams versus collections, using Optional to avoid null checks, extending interfaces with default methods, and key concepts of the new Date/Time and Nashorn JavaScript APIs.
This document describes the Restful API Modeling Language (RAML), which allows for the definition of RESTful APIs in a human- and machine-readable format. RAML aims to improve API specifications by providing a format that serves as a contract between providers and consumers. The document outlines the structure and components of a RAML definition, including describing resources, methods, data types, security, and more. It also explains how RAML supports concepts like reusable resource types and traits to promote consistency.
We present a novel code search approach for answering queries focused on
API-usage with code showing how the API should be used.
To construct a search index, we develop new techniques for statically mining
and consolidating temporal API specifications from code snippets. In
contrast to existing semantic-based techniques, our approach handles partial
programs in the form of code snippets. Handling snippets allows us to consume
code from various sources such as parts of open source projects,
educational resources (e.g. tutorials), and expert code sites. To handle code
snippets, our approach (i) extracts a possibly \emph{partial} temporal
specification from each snippet using a relatively precise static analysis
tracking a generalized notion of typestate, and (ii) consolidates the
partial temporal specifications, combining consistent partial information to
yield consolidated temporal specifications, each of which captures a full(er)
usage scenario.
To answer a search query, we define a notion of relaxed inclusion
matching a query against temporal specifications and their corresponding code
snippets.
We have implemented our approach in a tool called PRIME and applied it to
search for API usage of several challenging APIs. PRIME was able to analyze
and consolidate thousands of snippets per tested API, and our results
indicate that the combination of a relatively precise analysis and
consolidation allowed PRIME to answer challenging queries effectively.
Generating Assertion Code from OCL: A Transformational Approach Based on Simi...Institute of Science Tokyo
ย
This document presents an approach for generating assertion code from the Object Constraint Language (OCL) using model transformations. The approach constructs a hierarchy of programming languages based on their structural similarities. This allows rules for translating OCL to be reused across multiple implementation languages, saving approximately 50% of the effort compared to creating individual translators. An evaluation implemented the approach in Maude and demonstrated its ability to generate code for Java, Python, Haskell and O'Haskell from a single OCL specification.
This document provides 50 interview questions on C programming language organized into 5 chapters: Variables & Control Flow, Operators, Constants & Structures, Functions, Pointers, and Programs. It aims to help both freshers and experienced programmers quickly brush up on basic C concepts commonly asked during job interviews at top companies. Each question is accompanied by a detailed answer along with code examples where applicable. Feedback is welcomed to be sent to the publisher.
C++ provides classes as templates to define common data structures and algorithms. Classes like vector and list define containers that store and retrieve objects through iterators. Iterators allow traversing container elements without knowing details of the underlying data structure. The Standard Template Library contains many useful container and algorithm classes that take advantage of templates and iterators to provide powerful and flexible generic programming capabilities in C++.
This document provides solutions to exercises from Chapters 1 through 14 of a Java textbook. It presents solutions for 28 different exercises involving Java concepts like classes, objects, inheritance, polymorphism, and interfaces. Each solution is a code listing or brief explanation.
This document discusses key concepts of object-oriented programming in C++ including abstraction, encapsulation, polymorphism, inheritance, and runtime polymorphism. It explains that abstraction allows hiding details behind well-defined interfaces, encapsulation provides guarantees that abstractions are used correctly, and polymorphism simplifies code by providing a common interface for different implementations. Inheritance enables composing new abstractions from existing ones, and runtime polymorphism provides runtime binding. Coexistence with other languages and systems is also important.
Qcon2011 functions rockpresentation_f_sharpMichael Stal
ย
This document provides an overview of functional programming concepts and introduces the F# programming language. It discusses core FP topics like immutable values, recursion, and higher-order functions. It then presents an introduction to F#, explaining that it combines object-oriented and functional programming. The document provides examples of basic F# syntax like functions, pattern matching, and the type system. It also illustrates concepts like currying, lazy evaluation, and the pipeline operator.
This document provides an introduction to C++ and covers 10 topics: 1) Object-oriented programming principles, 2) Classes and objects, 3) Functions, 4) Constructors and destructors, 5) Operator overloading and type conversion, 6) Inheritance, 7) Pointers, virtual functions and polymorphism, 8) Working with files, 9) Templates, and 10) Exception handling. Each topic is briefly described in 1-2 paragraphs with examples provided for some concepts like encapsulation, inheritance, polymorphism, and exception handling. The document serves as a high-level overview of key C++ concepts and features.
Qcon2011 functions rockpresentation_scalaMichael Stal
ย
Scala functions provide powerful ways to decompose problems and harness the benefits of functional programming. The presentation introduces core concepts of functional programming using Scala as an example language, highlighting how Scala combines object-oriented and functional programming. It presents benefits like immutability, higher-order functions, and improved concurrency while avoiding past performance issues through modern virtual machines and libraries.
This PPT File helps IT freshers with the Basic Interview Questions, which will boost there confidence before going to the Interview. For more details and Interview Questions please log in www.rekruitin.com and click on Job Seeker tools. Also register on the and get employed.
By ReKruiTIn.com
The document provides an overview of key concepts in C++, including:
1) C++ adds object-oriented programming capabilities to C while maintaining C's power and flexibility. It was created in 1979 to provide object-oriented programming features to C.
2) Object-oriented programming encourages breaking problems into constituent parts called objects that contain related instructions and data. The three main traits of OOP are encapsulation, polymorphism, and inheritance.
3) C++ supports both traditional and modern styles, with newer headers placed in the std namespace. Keywords like class, public, and virtual allow defining classes and controlling access to members. Functions can be overloaded if their signatures differ.
This presentation introduces the main features of Scala, an object oriented and functional programming language. The main focus of the slides is to show how the language implements natively some of the patterns and best practices that are no present in other programming languages, such as Java, C++ and so on.
In detail, the presentation spans these concepts:
- Language's main syntax
- Classes, abstract classes, objects and traits (mixin)
- The Option class
- An introduction to generics
- Implicit classes
- Functions
- Recursion (simple and tail)
- Currying
- Call by value / name
The presentation is took from the Software Engineering course I run in the bachelor-level informatics curriculum at the University of Padova.
This presentation introduces some advanced concepts of generics in Java. These slides introduce the following concepts:
- Generic classes and methods
- Type variable bounds
- Type erasure process
- Generics and inheritance
- Wildcard types
The presentation is took from the Java course I run in the bachelor-level informatics curriculum at the University of Padova.
Java annotations allow metadata to be added to Java code elements like classes, methods, and fields. This metadata can be read by tools and libraries to affect how the code is processed. Common built-in annotations include @Deprecated, @Override, and @SuppressWarnings. Annotations can also be applied to other annotations to specify how they function, such as their retention policy or valid targets. As an example, the document describes how to build a simple annotation-based test framework using the @Test annotation to mark test methods.
This document provides an overview of C++ programming concepts including:
1. C++ programs consist of functions, with every program containing a main() function. Functions contain declarations, statements, comments, and can call libraries.
2. Variables must be declared with a type and can be used to store values. C++ supports integer, floating point, character, and other variable types.
3. C++ allows selection and decision making using if/else statements, switch statements, logical operators, and loops like while and for. Operators allow comparisons and boolean evaluations.
Generics and Collections
The document discusses generics and collections in Java. It defines generics as a style of programming that allows algorithms to operate on objects of different types while providing compile-time type safety. The Java collections framework supports generics to specify the type of objects stored in a collection. Common collection classes like ArrayList, LinkedList, and HashMap are discussed along with their key characteristics.
This document provides an overview of new features being introduced in Java 8, with a focus on lambda expressions, default methods, and bulk data operations. It discusses the syntax and usage of lambda expressions, how they are represented at runtime using functional interfaces, and how variable capturing works. New functional interfaces being added to Java 8 are presented, including examples like Consumer and Function. The document also explores how lambda expressions are compiled, showing how invokedynamic bytecode instructions are used to dispatch lambda calls at runtime. In summary, the document serves as an introduction to key new language features in Java 8 that improve support for functional programming and parallel operations.
This document provides an agenda for a Java 8 training session that covers Lambdas and functional interfaces, the Stream API, default and static methods in interfaces, Optional, the new Date/Time API, and Nashorn JavaScript engine. It includes sections on Lambda expressions and method references syntax, functional interfaces, built-in functional interfaces, streams versus collections, using Optional to avoid null checks, extending interfaces with default methods, and key concepts of the new Date/Time and Nashorn JavaScript APIs.
This document describes the Restful API Modeling Language (RAML), which allows for the definition of RESTful APIs in a human- and machine-readable format. RAML aims to improve API specifications by providing a format that serves as a contract between providers and consumers. The document outlines the structure and components of a RAML definition, including describing resources, methods, data types, security, and more. It also explains how RAML supports concepts like reusable resource types and traits to promote consistency.
We present a novel code search approach for answering queries focused on
API-usage with code showing how the API should be used.
To construct a search index, we develop new techniques for statically mining
and consolidating temporal API specifications from code snippets. In
contrast to existing semantic-based techniques, our approach handles partial
programs in the form of code snippets. Handling snippets allows us to consume
code from various sources such as parts of open source projects,
educational resources (e.g. tutorials), and expert code sites. To handle code
snippets, our approach (i) extracts a possibly \emph{partial} temporal
specification from each snippet using a relatively precise static analysis
tracking a generalized notion of typestate, and (ii) consolidates the
partial temporal specifications, combining consistent partial information to
yield consolidated temporal specifications, each of which captures a full(er)
usage scenario.
To answer a search query, we define a notion of relaxed inclusion
matching a query against temporal specifications and their corresponding code
snippets.
We have implemented our approach in a tool called PRIME and applied it to
search for API usage of several challenging APIs. PRIME was able to analyze
and consolidate thousands of snippets per tested API, and our results
indicate that the combination of a relatively precise analysis and
consolidation allowed PRIME to answer challenging queries effectively.
The document discusses REST (Representational State Transfer) architectural styles and best practices for designing web services. It covers topics like RESTful principles of using URIs and HTTP methods to manipulate resources, statelessness, hypermedia as the engine of application state, and JSON and XML media types for representing resources. It also discusses REST maturity levels, security, versioning, and error handling in RESTful web services.
The document discusses modularizing APIs using RAML fragments. It introduces different fragment types like data types, libraries, resource types and traits that can be used to break up large RAML specifications. Examples are provided on how to create fragments in API Designer and reference them in the main RAML file to organize the API definition into reusable modules.
API workshop: Introduction to APIs (TC Camp)Tom Johnson
ย
This is the introduction to API documentation that I gave at the TC Camp unconference. See http://idratherbewriting.com for more details.
The document provides guidelines for designing APIs. Some key points include:
1) Each API should clearly explain what the user can achieve and how to use it. Documentation is important.
2) Consider using annotations to mark APIs as deprecated or to specify thread safety and other implementation details.
3) Use factory methods instead of constructors when possible to increase flexibility and avoid tight coupling.
4) Make implementation classes immutable to avoid side effects and threading issues.
5) Provide consistent exceptions at the appropriate level of abstraction.
Yet Another Fog Simulator (YAFS) - user guidewisaaco
ย
YAFS (Yet Another Fog Simulator) is a simulator tool based on Python of architectures such as Fog Computing ecosystems for analysis regarding the placement of resources, cost deployment, network design,... IoT environments are the most evident fact of this type of architecture.
The Schema-first API design approach advocates for writing your API definition first in one of many API Specification languages before writing any code. This talk introduces you to the realm of Schema-First API design and how to get started with the OpenAPI ecosystem.
Introduction Java Web Framework and Web Server.suranisaunak
ย
The document discusses Java 2 Enterprise Edition (J2EE) and frameworks. It defines J2EE as a set of standard specifications for building large distributed applications using components like Java servlets, JavaServer Pages, and Enterprise JavaBeans. Frameworks provide reusable code and APIs that help develop applications faster by handling common tasks. The document lists several Java persistence and web service frameworks and describes features that distinguish frameworks from normal libraries like inversion of control.
The document provides an overview of API tooling features in Eclipse. It discusses the need for tooling to define, document, and enforce API contracts. The tooling can detect binary incompatibilities, illegal API usage, missing documentation, and inconsistent version numbers. It generates reports and provides integrated IDE support to help developers design, use and evolve APIs while avoiding breaking changes. The tooling enforces rules for public APIs through configurable descriptions and checks APIs are used as intended.
apidays LIVE New York - API Code First vs Design First by Phil Sturgeonapidays
ย
apidays LIVE New York - API for Legacy Industries: Banking, Insurance, Healthcare and Retail
API Code First vs Design First
Phil Sturgeon, Author of "APIs you won't hate" & Developer Advocate at Stoplight
An API is a specification that allows software components to communicate with each other. APIs can be classified based on the abstraction they describe, such as operating systems, programming languages, applications, and infrastructure services. REST architecture uses nouns and verbs for readability and less bandwidth than SOAP. When building APIs on AWS, developers can use services like Elastic Beanstalk for deployment, CloudWatch for monitoring, and IAM for security. It is important to focus on security at all stages of developing and deploying APIs.
This document discusses practices and tools for building better APIs. It outlines some key aspects of API quality, including value, usability, and stability. For usability, it discusses factors like learnability, efficiency, and errors based on a generic usability model. It also provides examples of API release notes to demonstrate concerns around stability and backward compatibility. The overall goal is to provide developers with perspectives and considerations for designing APIs that are easy to use and integrate with existing code.
Practices and tools for building better API (JFall 2013)Peter Hendriks
ย
Een belangrijke voorwaarde om goede en leesbare Java code te schrijven is om gebruik te maken van een goede API. Een goede API helpt ontwikkelaars om sneller hoogwaardige code te schrijven. Het ontwerp van een API is daarom belangrijk, zeker als er grotere systemen worden gerealiseerd in teamverband. Moderne ontwikkeltools als Eclipse, IntelliJ IDEA en FindBugs helpen met het schrijven van goede API, en het detecteren van slecht gebruik. Deze sessie gaat in op de laatste ontwikkelingen en mogelijkheden, inclusief nieuwe taalmogelijkheden in Java 8. Er wordt hierbij gebruik gemaakt van praktische situaties en concrete codevoorbeelden, gebaseerd op echte ervaringen in grote codebases. Met praktische tips en toegankelijke tools kan al een grote stap gemaakt worden om in de praktijk beter met API ontwerp om te gaan!
This document provides an overview of a presentation on designing modern APIs using MuleSoft Anypoint Platform. The presentation agenda includes introducing MuleSoft Anypoint Platform and the API lifecycle, demonstrating how to use API Designer to create API specifications with RAML, defining resources, methods, parameters and responses, modularizing and simulating an API, engaging users in the design phase, publishing an API in Anypoint Exchange, and includes examples of APIs. The speaker and organizer are both experienced with MuleSoft and certified in API design. The presentation is for learning purposes only and not meant for promotion. A trivia quiz will be held with prizes for winners.
Java 8 introduced many new features including lambda expressions for functional programming, default methods and static methods in interfaces, method references, repeating annotations, improved type inference, the Optional class, streams API for functional-style collections processing, and Base64 encoding support in the standard library. It was a major update to the Java programming language and development kit.
The Cha-Q Meta-Model: A Comprehensive, Change-Centric Software RepresentationCoen De Roover
ย
The Cha-Q Meta-Model provides a comprehensive representation of software systems that interconnects 1) the state and evolution of system entities, 2) individual changes to entities, and 3) system snapshots under version control. It defines classes to represent concepts like entities, states, changes, and snapshots. The meta-model is object-oriented and memory efficient through identifier-based state tracking. It underlies upcoming tools for analyzing, repeating, and tracing changes to software systems.
CrimeSPOT: Language Support for Programming Interactions among Wireless Senso...Coen De Roover
ย
CrimeSPOT is a domain-specific language for programming active wireless sensor network (WSN) applications using an event-based middleware. It aims to minimize accidental complexity so developers can focus on the essential complexity. CrimeSPOT allows specifying node interactions declaratively through rules and specifying which rules govern which nodes to enable reuse within and among WSN apps. It is tailored towards active WSN applications to handle issues like sensor readings expiration and subsumption as well as tracking reactions so they can be compensated if no longer warranted.
The STADiUM language framework for capturing domain-specific interaction patt...Coen De Roover
ย
1. The STADiUM language framework captures domain-specific interaction patterns through CrimeSPOT, a domain-specific language for programming wireless sensor network interactions.
2. CrimeSPOT specifies interactions declaratively using distributed interaction rules to publish facts on the network and invoke application logic.
3. An example wireless sensor network application written in CrimeSPOT for monitoring tent comfort levels is implemented in 73 lines of code through the use of macros, mappings, and other CrimeSPOT features.
UbiLab@SOFT: A tale of ubiquitous bears, flyswatters โจand punching bags in ed...Coen De Roover
ย
Slides of my presentation at the 2010 open day of the Software Languages Lab in which I outlined the lab's educational activities that involve ubiquitous or physical computing using microcontrollers and the Scheme programming language.
Logic-based program transformation in symbiosis with EclipseCoen De Roover
ย
"Logic-based program transformation in symbiosis with Eclipse" as presented at the 2011 Seminar Series on Advanced Techniques & Tools for Software Evolution in Koblenz.
This is the keynote of the Into the Box conference, highlighting the release of the BoxLang JVM language, its key enhancements, and its vision for the future.
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...SOFTTECHHUB
ย
I started my online journey with several hosting services before stumbling upon Ai EngineHost. At first, the idea of paying one fee and getting lifetime access seemed too good to pass up. The platform is built on reliable US-based servers, ensuring your projects run at high speeds and remain safe. Let me take you step by step through its benefits and features as I explain why this hosting solution is a perfect fit for digital entrepreneurs.
Technology Trends in 2025: AI and Big Data AnalyticsInData Labs
ย
At InData Labs, we have been keeping an ear to the ground, looking out for AI-enabled digital transformation trends coming our way in 2025. Our report will provide a look into the technology landscape of the future, including:
-Artificial Intelligence Market Overview
-Strategies for AI Adoption in 2025
-Anticipated drivers of AI adoption and transformative technologies
-Benefits of AI and Big data for your business
-Tips on how to prepare your business for innovation
-AI and data privacy: Strategies for securing data privacy in AI models, etc.
Download your free copy nowand implement the key findings to improve your business.
Book industry standards are evolving rapidly. In the first part of this session, weโll share an overview of key developments from 2024 and the early months of 2025. Then, BookNetโs resident standards expert, Tom Richardson, and CEO, Lauren Stewart, have a forward-looking conversation about whatโs next.
Link to recording, presentation slides, and accompanying resource: https://bnctechforum.ca/sessions/standardsgoals-for-2025-standards-certification-roundup/
Presented by BookNet Canada on May 6, 2025 with support from the Department of Canadian Heritage.
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPathCommunity
ย
Join this UiPath Community Berlin meetup to explore the Orchestrator API, Swagger interface, and the Test Manager API. Learn how to leverage these tools to streamline automation, enhance testing, and integrate more efficiently with UiPath. Perfect for developers, testers, and automation enthusiasts!
๐ Agenda
Welcome & Introductions
Orchestrator API Overview
Exploring the Swagger Interface
Test Manager API Highlights
Streamlining Automation & Testing with APIs (Demo)
Q&A and Open Discussion
Perfect for developers, testers, and automation enthusiasts!
๐ Join our UiPath Community Berlin chapter: https://community.uipath.com/berlin/
This session streamed live on April 29, 2025, 18:00 CET.
Check out all our upcoming UiPath Community sessions at https://community.uipath.com/events/.
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxJustin Reock
ย
Building 10x Organizations with Modern Productivity Metrics
10x developers may be a myth, but 10x organizations are very real, as proven by the influential study performed in the 1980s, โThe Coding War Games.โ
Right now, here in early 2025, we seem to be experiencing YAPP (Yet Another Productivity Philosophy), and that philosophy is converging on developer experience. It seems that with every new method we invent for the delivery of products, whether physical or virtual, we reinvent productivity philosophies to go alongside them.
But which of these approaches actually work? DORA? SPACE? DevEx? What should we invest in and create urgency behind today, so that we donโt find ourselves having the same discussion again in a decade?
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025BookNet Canada
ย
Book industry standards are evolving rapidly. In the first part of this session, weโll share an overview of key developments from 2024 and the early months of 2025. Then, BookNetโs resident standards expert, Tom Richardson, and CEO, Lauren Stewart, have a forward-looking conversation about whatโs next.
Link to recording, transcript, and accompanying resource: https://bnctechforum.ca/sessions/standardsgoals-for-2025-standards-certification-roundup/
Presented by BookNet Canada on May 6, 2025 with support from the Department of Canadian Heritage.
Procurement Insights Cost To Value Guide.pptxJon Hansen
ย
Procurement Insights integrated Historic Procurement Industry Archives, serves as a powerful complement โ not a competitor โ to other procurement industry firms. It fills critical gaps in depth, agility, and contextual insight that most traditional analyst and association models overlook.
Learn more about this value- driven proprietary service offering here.
AI Changes Everything โ Talk at Cardiff Metropolitan University, 29th April 2...Alan Dix
ย
Talk at the final event of Data Fusion Dynamics: A Collaborative UK-Saudi Initiative in Cybersecurity and Artificial Intelligence funded by the British Council UK-Saudi Challenge Fund 2024, Cardiff Metropolitan University, 29th April 2025
https://alandix.com/academic/talks/CMet2025-AI-Changes-Everything/
Is AI just another technology, or does it fundamentally change the way we live and think?
Every technology has a direct impact with micro-ethical consequences, some good, some bad. However more profound are the ways in which some technologies reshape the very fabric of society with macro-ethical impacts. The invention of the stirrup revolutionised mounted combat, but as a side effect gave rise to the feudal system, which still shapes politics today. The internal combustion engine offers personal freedom and creates pollution, but has also transformed the nature of urban planning and international trade. When we look at AI the micro-ethical issues, such as bias, are most obvious, but the macro-ethical challenges may be greater.
At a micro-ethical level AI has the potential to deepen social, ethnic and gender bias, issues I have warned about since the early 1990s! It is also being used increasingly on the battlefield. However, it also offers amazing opportunities in health and educations, as the recent Nobel prizes for the developers of AlphaFold illustrate. More radically, the need to encode ethics acts as a mirror to surface essential ethical problems and conflicts.
At the macro-ethical level, by the early 2000s digital technology had already begun to undermine sovereignty (e.g. gambling), market economics (through network effects and emergent monopolies), and the very meaning of money. Modern AI is the child of big data, big computation and ultimately big business, intensifying the inherent tendency of digital technology to concentrate power. AI is already unravelling the fundamentals of the social, political and economic world around us, but this is a world that needs radical reimagining to overcome the global environmental and human challenges that confront us. Our challenge is whether to let the threads fall as they may, or to use them to weave a better future.
How Can I use the AI Hype in my Business Context?Daniel Lehner
ย
๐๐จ ๐ผ๐ ๐๐ช๐จ๐ฉ ๐๐ฎ๐ฅ๐? ๐๐ง ๐๐จ ๐๐ฉ ๐ฉ๐๐ ๐๐๐ข๐ ๐๐๐๐ฃ๐๐๐ง ๐ฎ๐ค๐ช๐ง ๐๐ช๐จ๐๐ฃ๐๐จ๐จ ๐ฃ๐๐๐๐จ?
Everyoneโs talking about AI but is anyone really using it to create real value?
Most companies want to leverage AI. Few know ๐ต๐ผ๐.
โ What exactly should you ask to find real AI opportunities?
โ Which AI techniques actually fit your business?
โ Is your data even ready for AI?
If youโre not sure, youโre not alone. This is a condensed version of the slides I presented at a Linkedin webinar for Tecnovy on 28.04.2025.
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxshyamraj55
ย
Weโre bringing the TDX energy to our community with 2 power-packed sessions:
๐ ๏ธ Workshop: MuleSoft for Agentforce
Explore the new version of our hands-on workshop featuring the latest Topic Center and API Catalog updates.
๐ Talk: Power Up Document Processing
Dive into smart automation with MuleSoft IDP, NLP, and Einstein AI for intelligent document workflows.
Semantic Cultivators : The Critical Future Role to Enable AIartmondano
ย
By 2026, AI agents will consume 10x more enterprise data than humans, but with none of the contextual understanding that prevents catastrophic misinterpretations.
Role of Data Annotation Services in AI-Powered ManufacturingAndrew Leo
ย
From predictive maintenance to robotic automation, AI is driving the future of manufacturing. But without high-quality annotated data, even the smartest models fall short.
Discover how data annotation services are powering accuracy, safety, and efficiency in AI-driven manufacturing systems.
Precision in data labeling = Precision on the production floor.
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfSoftware Company
ย
Explore the benefits and features of advanced logistics management software for businesses in Riyadh. This guide delves into the latest technologies, from real-time tracking and route optimization to warehouse management and inventory control, helping businesses streamline their logistics operations and reduce costs. Learn how implementing the right software solution can enhance efficiency, improve customer satisfaction, and provide a competitive edge in the growing logistics sector of Riyadh.
Andrew Marnell: Transforming Business Strategy Through Data-Driven InsightsAndrew Marnell
ย
With expertise in data architecture, performance tracking, and revenue forecasting, Andrew Marnell plays a vital role in aligning business strategies with data insights. Andrew Marnellโs ability to lead cross-functional teams ensures businesses achieve sustainable growth and operational excellence.
Linux Professional Institute LPIC-1 Exam.pdfRHCSA Guru
ย
Multi-dimensional exploration of API usage - ICPC13 - 21-05-13
1. Multi-dimensional
Exploration of API Usage
Coen De Roover1, Ralf Lรคmmel2, Ekaterina Pek3
1 Software Languages Lab, Vrije Universiteit Brussel, Belgium
2 Software Languages Team, University of Koblenz-Landau, Germany
3 ADAPT Lab, University of Koblenz-Landau, Germany
2. Exploration Story: JHotDraw
โ relatively few references to SAX and DOM
what XML APIs are used and how extensively?
Swing!!java.lang!!JavaBeans!!java.io!!AWT!!java.util
Package org.jhotdraw.undo
AWT!!Swing!!java.io java.lang java.util
JavaBeans java.text java.lang.re๏ฌect!!DOM!!java.net
java.util.regex!!Java Print Service!!java.util.zip!!java.lang.annotation
java.math java.lang.ref java.util.concurrent Java security!!javax.imageio!!SAX
JHotDrawโs API Cocktail
Fig. 8. The API Cocktail of JHotDraw (cloud of API tags).
View โ A list as in the case of the API Footprint insight, except
that it is narrowed down to a sub-API of interest.
GUI
IO!!For
XML!!D
JH
GUI
APIs
for the
API cloud
cept
for
th a
tory
ents.
heck
API
GUI!!Data!!Basics!!
IO!!Format!!Component!!Meta!!
XML!!Distribution!!Parsing!!Control!!Math!!Output!!Security!!Concurrency
JHotDrawโs API Domain Cocktail
GUI!!Basics!!Component!!IO
Package org.jhotdraw.undo
Project jhotdraw
Fig. 9. Cocktail of domains for JHotDraw.
java.lang!!java.net!!Swing!!JavaBeans!!java.io!!
APIs
API domains
Coupling in JHotDraw
for the interface org.jhotdraw.app.View
Fig. 10. API Coupling for JHotDrawโs interface org.jhotdraw.app.View.
software concepts. Consider Fig. 9 for illustration. It shows
API domains for all of JHotDraw and also for its undo
package. Thus, it presents the API cocktails of Fig. 8 in a
API domain cloud
?
Let me start by making the concept of exploring API usage more concrete.
Imagine you are a developer tasked with migrating JH from XML to JSON for persistency.
The ๏ฌrst thing you would like to know is what APIs for manipulating XML are used, and how extensively these APIs are used.
You could gain these insights through the two tag clouds shown on the slide. The top one contains the domains of the APIs used by JH, the bottom one the actual APIs. The
size of a tag corresponds to the amount of references to the API or the domain. So we can conclude that XML apis are used by JH, more concretely DOM and SAX, but not
extensively. There are a lot more references to the AWT and SWING APIs from the GUI programming domain, for instance.
3. Exploration Story: JHotDraw
โ footprint of DOM in JHotDraw is but 94 refs to 19 distinct elements
what elements of DOM are actually used?
table of referenced API elements (i.e., DOM slice)
?
The next insight to gain is whether the project uses the complete DOM API, or just a small subset. Given a table of referenced API elements, the latter seems to be the case.
There are only 94 references to 19 distinct types and methods.
Even better news, no exotic API elements are used.
4. Exploration Story: JHotDraw
Slice of JHotDraw
with DOM usage
โ local to 1/13 top-level packages
How is DOM usage distributed across JHotDraw?
table of referencing project elements (i.e., JHotDraw slice)
?
in the view of hundreds of API elements declared by the
publicย voidย applyStylesTo(Elementย elem)ย {forย (CSSRuleย ruleย :ย rules)ย {if (rule.matches(elem))ย {rule.apply(elem);}
}
}
usage.
All good news so far, but it could still be the case that the API is used all over the project. Luckily, given a table of referencing project elements, the use of DOM is local to 4
classes in the org.jhotdraw.xml package.
Our exploration therefore shows that migrating from XML to JSON is feasible.
5. Exploring API Usage: Quaatlas API Atlas
API metadata
API named collection of elements (98)
API domain named collection of APIs addressing the same domain (27)
API facet named collection of API elements addressing a particular concern
basic
d API
erface
ot pay
works.
faces,
n soft-
vokes
e๏ฌxes,
APIs.
ssibly
GUI
g as a
ckage
types
kages
APIs.
cause
Javaโs
mmon
ubsets
which
hould
ysis is
given
y sort
rectly
ojects,
tions of projects or APIs as well as speci๏ฌc packages, types,
or methods thereof. For instance, we may be interested in #api
for a speci๏ฌc project. Also, we may be interested in #ref for
some part of an API.
Further, these metrics can be con๏ฌgured to count only
speci๏ฌc patterns. It is easy to see now that the given metrics
are not even orthogonal because, for example, #derive can be
obtained from #ref by only counting patterns for โextendsโ and
โimplementsโ relationships.
API Domains: We assume that each API addresses some
programming domain such as XML processing or GUI pro-
gramming. We are not aware of any general, widely adopted
attempt to associate APIs with domains, but the idea appears
to merit further research. We have begun collecting program-
ming domains (or in fact, API domains) and tagging APIs
appropriately. Let us list a few API domains and associate
them with well-known Java APIs:
GUI: GUI programming, e.g., Swing and AWT.
XML: XML processing, e.g., DOM, JDOM, and SAX.
Data: Data structures incl. containers, e.g., java.util.
IO: File- and stream-based I/O, e.g., java.io and java.nio.
Component: Component-oriented programming, e.g., JavaBeans.
Meta: Meta-programming incl. re๏ฌection, e.g., java.lang.re๏ฌect.
Basics: Basic language support, e.g., java.lang.String.
API domains are helpful in reporting API usage and quan-
tifying API usage of interest in more abstract terms than the
names of individual APIs, as will be illustrated in ยงVI.
API Facets: An API may contain dozens or hundreds
of types each of which has many method members in turn.
Some APIs use sub-packages to organize such API complexity,
but those sub-packages are typically concerned with advanced
API usage whereas the core facets of API usage are not
distinguished in any operational manner. This makes it hard
to understand API usage at a somewhat abstract level.
2. output : corpus
3. for each name in candidateList :
4. (psrc, pbin ) = obtainProject(name);
5. patches = exploratoryBuild(psrc, pbin );
6. timestamp = build(psrc, patches);
7. (java, classes, jars) = collectStats(psrc);
8. java0
= filter(java);
9. (jarsbuilt , jarslib) = detectJars(timestamp, java0
, jars);
10. java0
compiled = detectJava(timestamp, java0
, classes, jarsbuilt );
11. p0
src = (java0
compiled , jarslib);
12. p0
bin = jarsbuilt ;
13. p0
= (p0
src, p0
bin );
14. if validate(p0
) : corpus = corpus + p0
;
Fig. 4. Pseudocode describing the corpus (re)-engineering method.
Accordingly, we propose leveraging a notion of API facets
in the sense of aspects or concerns supported by the API.
In this paper, we assume that facets are represented as named
collections of speci๏ฌc API types or methods. As an illustration,
we name a few API facets of the typical DOM-like API such
as DOM itself, JDOM, or dom4j:
Input / Output: De-/serialization for DOM trees.
Observation: Getter-like access and other โread onlyโ forms.
Addition: Addition of nodes et al. as part also of construction.
Removal: Removal of nodes et al. as a form of mutation.
Namespaces: XML namespace manipulation.
Nontrivial XML: Use of CDATA, PI, and other XML idiosyncrasies.
Nontrivial API: Usage of types and methods that are beyond normal
API usage. For instance, XML APIs may provide some framework
for node factories or adapters for API integration.
API facets are helpful in communicating API usage to the
user at a more abstract level than the level of individual
types and methods, as will be illustrated in ยงVI. We leverage
knowledge of the APIs to identify (to name) API facets and to
tag APIs appropriately. The idea of grouping API members,
e.g., by their functional roles, has also been studied in related
work on code completion; see ยงIII.
V. THE QUAATLAS CORPUS FOR API-USAGE ANALYSIS
Our study requires a suitable corpus of mature, well-
developed projects coming from different application domains.
Arguably, such projects show suf๏ฌcient and advanced API
usage. We decided to restrict ourselves to open-source Java
projects; in order to increase quality and reproducibility of our
research, we decided to use an existing, established and cu-
rated, collection of Java projectsโthe QUALITAS corpus [27],
release 20101126r. As we discuss in ยงIV, API usage entails
the ability to resolve types. However, QUALITAS does not
guarantee the availability of a projectโs library types. The
collection consists of source and binary forms as they are
provided by the project developers.
be exten
be added
projects.
Line 4
source a
project w
nature o
The exp
occur du
stage, w
in the b
set is sm
build scr
or invoc
to push
explorato
build the
After
modi๏ฌca
Java ๏ฌle
types, fo
we explo
containe
On lin
that we
line 9, w
informat
classify
or as bui
and the
compiled
source c
types tog
the binar
The r
rebuildin
making s
the meth
and libra
we add t
This p
the proc
per proje
coverage
somethin
10 as an
it on reg
gathered by studying API usage in a corpus of projects
re-engineered Qualitas corpus to Eclipse projects that compile (79)
dependencies resolved and separated from project files
In the paper, we present a similar exploration-based approach for understanding API usage. This approach relies on a lot of meta-data about APIs that we have made
available in an API atlas.
For 98 APIs, this atlas describes the individual packages/types/methods the API consists of. A ๏ฌne-grained description is necessary as libraries such as Google Guava or
even java.util group different APIs together.
We also associated a domain with each API. This resulted in 27 API domains. Finally, we have started describing groups of elements within an API that address a particular
concern.
We gathered this meta-data by studying the APIs used in a corpus of 79 mature projects. We re-engineered the projects from the Qualitas corpus such that all their
dependencies are resolved and separated from project ๏ฌles. This enables extracting precise API usage facts.
6. linked to 101
Note that the entire API atlas is available on the paperโs website.
There, we also present the meta-data in a human-readable format. One nice feature there is that each API is linked to its description on the 101companies wiki where you
can also browse through small example programs that use the API etc.
7. Exploring API Usage: Exapus Platform
scaled and ordered by usage metrics: #ref, #elem, #derive, #proj, #api, ...
computes exploration views on usage facts
selection of API references
organized as project or API slice
project members + outgoing refs within their scope
API members + incoming refs within their scope
rendered as graph, table or cloud
by referenced elements: API name, element, meta-data ...
by referencing elements: project name, element, syntactic pattern, ...
gathers API usage facts for a given corpus
referenced element, referencing scope, syntactic pattern (e.g., super call)
The actual exploration-based approach to understanding API usage is supported by a tool that extracts references to API elements from a single project or a corpus of
projects. During an AST visit, the tool records for each reference it discovers the referenced element, the project scope in which this reference resides, and the syntactic
form of the reference. This could be a method return type, a super call, or a type parameter, ..
The tool presents exploration views on the extracted facts, which can be con๏ฌgured along several dimensions. First of all, you can con๏ฌgure what API references to include
in a view using conditions on the referenced element and the referencing element. For instance, only the exceptions de๏ฌned by an API from the XML domain that are caught
in the JH project. Next, you can choose to organize these references as a slice of project members with outgoing refs or as a slice of API members with incoming refs.
Finally, you can have these slices rendered as a graph/table/cloud scaled by a usage metric. For instance, a tag cloud scaled by the amount of subclassing along the border
between a project and an API.
8. What follows are some screenshots of the tool in action. At the far left, there is a list of prede๏ฌned views. Their con๏ฌguration can be edited in the top-right corner. Shown
here is the con๏ฌguration of a view that results in the tag cloud we saw earlier. At the top, you can select what referenced elements to include. Here, we include all of them
using a wildcard pattern. At the bottom, you can select what referencing elements to include in a view. Here, we only include references from the JH project.
Note that even though the tool has a dynamic IDE-like feel, it is actually completely web-based. We hope this will encourage others to explore and augment our API meta-
data.
9. Here you see a project-centric table of outgoing references from JH to the Java collections API and DOM. We see for instance that the method add of StyleManager invokes
method add of java.util.List. At the bottom-left, you see a tag cloud for the currently selected project element. We see that there are more references to data APIs than to
XML apis in the StyleManager class.
The source code for this class is shown at the bottom-right. API references are highlighted within the source code.
10. Finally, here you see an API-centric graph of references from JH to the APIs known to us. Nodes are APIs. Borders of the nodes are scaled by the relative amount of
referenced elements. So this is basically another rendering of the tag cloud you saw earlier. You could also choose to scale the borders of the nodes using a different
metric, such as the amount of derivation that happens.
11. And of course, we also made this tool publicly available.
12. Insight: API Dispersion
intent
stakeholder
view
intelligence
understand and compare dispersion of an API across the corpus
API developer
project-centric table
usage metrics for quantitative comparison
API facets for qualitative comparison
Fig. 5. JDOMโs API Dispersion in QUAATLAS (project-centric table).
B. The API Dispersion Insight
choose compliance tests for API evolution
So, what insights about API usage can one hope to gain through such a tool? And how should you con๏ฌgure the tool such that it produces the right view for each insight?
In the paper, we discuss this in a structured manner for several API usage insights.
The one shown here is concerned with how dispersed or widespread an API is across a corpus of projects. It can be gained by con๏ฌguring the tool to produce a table of
referencing project elements, together with some usage metrics. Here, we see JDOMโs dispersion in the corpus. The table is sorted by the amount of references each
project contains. We see that the informa project has the most references, but that jspwiki references the most distinct API elements. We also see that this project is one of
the few that contain subtypes of API elements. So who could bene๏ฌt from this insight? This would be the developer of an API that needs to choose easy and difficult
projects for compliance testing after an API evolution.
13. Insight: API Footprint
intent
stakeholder
view
intelligence
understand what API elements are
actually used in a corpus
or in specific project scopes
API or project developer
API-centric table or tree
ordered or scaled by #ref
Fig. 6. JDOMโs API Footprint in QUAATLAS (API-centric table).
Nontrivial JDOM API usage in velocity
org.apache.velocity.anakia.AnakiaJDOMFactory
Scope Tags incl. facets #proj
...
API migration by project developer:
target effort
API evolution by API developer:
minimize breaking changes
The API footprint insight is dual to the API dispersion insight in the sense that it is gained through a slice of referenced API elements rather than through a table of
referencing project elements. API developers might want to gain this insight for an entire corpus of projects to minimize the impact of breaking API changes. A project
developer might want to gain this insight for a single project to decide whether a wrapper-based migration, where a wrapper of the new API has to be produced for each
referenced element, is feasible.
14. Insight: API Coupling
intent
stakeholder
view
intelligence
understand what APIs or API domains are
used in smaller project scopes
project developer
API-centric cloud, usage metrics applied
reveals potential code smell: too many APIs in small scope
on org.jhotdraw.app.AbstractView:
Basics!!Distribution!!GUI!!IO!!Component
java.lang!!java.net!!Swing!!JavaBeans!!java.io!!
APIs
API domains
Coupling in JHotDraw
for the interface org.jhotdraw.app.View
string
manipulation
view
saving
view
painting
change
notification
exceptions
during saving
helps understand design and motivation for API dependencies
Shown here is an insight that is targeted more towards project developers who would like to understand what APIs are used together in a small project scope. This insight
can be gained by con๏ฌguring the tool to produce an API tag cloud for the currently selected project scope.
The one on the slide is for the AbstractView class of JH, which seems to be referencing quite a lot of different APIs.
For small project scopes, such as a method, this could be the sign of a code smell. For larger scopes, API tag clouds can also help understand the motivation behind API
dependencies. Here for instance, java.lang is referenced for string manipulation, java.net for saving a view to a URI, Swing for painting views, JavaBeans for change
noti๏ฌcations, and java.io for handling exceptions during the saving of a view.
15. Insight: API Profile
intent
stakeholder
view
intelligence
understand what API facets are used in varying project scopes
project developer
API-centric cloud of API facets, usage metrics applied
project scope: reveals API asbestos
smaller scope: API usage scenarios
Observation!!Input!!Exception!!
Package de.nava.informa.parsers
Observation!!Input!!
Nontrivial XML!!Manipulation Exception!!Renaming
Addition Namespaces!!Nontrivial API!!Output!!
Project informa
JDOMโs API Pro๏ฌle for informa
e.g., JDOMโs profile in informa
The API pro๏ฌle insight is similar, but is gained through a cloud of the facets of a single API used within a project scope rather than complete APIs. At the top, we see the
JDOM facets used within the entire informa project. Here, seldomly used non-trivial parts of an API reveal that the project might be difficult to change.
At the bottom, we see the JDOM facets used within a smaller scope of the project. Here, the displayed facets correspond to API usage scenarios: the parsers package reads
XML ๏ฌles and observes XML nodes.
16. Conclusion
described several insights to be gained about API usage
http://softlang.uni-koblenz.de/explore-API-usage
provided Quaatlas API atlas
re-engineered Qualitas projects for precise extraction of API usage
added meta-data concerning APIs, API domains, API facets
presented multi-dimensional exploration model
supported by IDE-like web-based platform Exapus
configurable views on API usage
cocktail, dispersion, distribution, footprint, coupling, profile
future work
empirical research on understanding API usage through exploration
support flow analyses in views