• Skip to main content
  • Skip to footer

INT

Empowering Visualization

CONTACT US SUPPORT
MENUMENU
  • Products
    • Overview
    • IVAAP™
    • INTViewer™
    • GeoToolkit™
    • Product Overview
  • Demos
    • GeoToolkit Demos
    • IVAAP Demos
  • Success Stories
  • Solutions
    • Overview
    • For E&P
    • For OSDU Visualization
    • For Cloud Partners
    • For Machine Learning
    • For CCUS
    • For Geothermal Energy
    • For Wind Energy
    • For Enterprise
    • Tools for Developers
    • Services Overview
  • Resources
    • Blog
    • Developer Community
    • FAQ
    • INT Resources Library
  • About
    • Overview
    • News
    • Events
    • Careers
    • Meet Our Team
    • About INT

ivaap

Apr 15 2019

TotalEnergies to Use INT’s Data Visualization and Analysis Platform and Libraries Software for the Next Five Years

TotalEnergies and INT have recently announced a long-term corporate agreement that will give TotalEnergies access to INT’s GeoToolkit, the most widely adopted JavaScript-based data visualization technology software in Oil and Gas.

TotalEnergies will also be able to take advantage of IVAAP, one of the leading Data Visualization software platforms for digital subsurface projects deployed in the web or private cloud.

“With the growth of Big Data and IoT, the E&P industry needed a solution that would empower companies to combine and utilize vast amounts of incredibly useful, yet disparate domain data easily, in one powerful software,” said Dr. Olivier Lhemann, founder and CEO, Interactive Network Technologies.

“Fortunately, our unique expertise and position in the industry allowed us to recognize and respond to this need quickly, so we developed IVAAP. Now, we’re proud to partner with TotalEnergies to empower domain experts with the right digital tools they need to gain valuable, timely insights from their data.”

With this agreement, TotalEnergies Exploration & Production will gain access to GeoToolkit and IVAAP’s fully extensible platform, cloud-based architecture, and comprehensive set of data connectors to current systems such as WITSML, PPDM, OSIsoft, PI, and many others.

For more information on INT’s products and services, visit our products page or email us to discuss how we can help you visualize your upstream data.

View the press release

Learn more about INT’s products

 

Filed Under: GeoToolkit, Uncategorized Tagged With: geotoolkit, ivaap, TotalEnergies

Apr 05 2019

A Brief Demo of Machine Learning Applied to Subsurface Data in the Cloud

Over the last few months, there have been a lot of activities and discussions with upstream majors on how to make subsurface data easier to search and discover and how to automate some of the geophysical and/or petrophysical workflows.

This process has typically been very challenging. From a user experience perspective, the ideal scenario would be to do this from one system versus doing this very manually from current siloed applications. We’ve been able to do this successfully here at INT.

Since a picture is worth a thousand words, in this case, we went even further and created a short demo video to better illustrate how this works. In this demo, IVAAP (Enterprise Upstream Data Visualization platform) has been deployed in AWS, and we used a model we applied to existing wells. IVAAP is seamlessly integrated with SageMaker using a standard API. The demo shows how you can easily interact with well data, select a well, apply a model, and visualize the results.

Want to know how to Liberate Your Upstream Exploration Data in the Cloud? Download our latest white paper:

AWS-INT-exploration-data-whitepaper

If you want to learn more about the reference architecture that can be used to deploy IVAAP in an AWS environment, feel free to contact us at intinfo@int.com.

Filed Under: IVAAP Tagged With: Amazon, AWS, ivaap, SageMaker

Feb 27 2019

How to Empower Developers with à la Carte Deployment in IVAAP Upstream Data Visualization Platform

When you get started with IVAAP’s backend SDK, the first API that you will probably encounter is its “Lookup” system. A lookup system is a basic component of a pluggable architecture. Within such architecture, when a program needs to perform an action, it is not aware of the specifics of this action’s implementation, it just knows how to find this implementation and execute it. There are many benefits to separating service definition from implementation. A program might have one default implementation that is overridden by a plugin. Clients can customize an application’s behavior without having access to the code of this application. “Looking up” the concrete implementation of a service is an effective way to propose options without cluttering the code with “if” statements that you need to change each time a new option is offered. IVAAP was not just meant to be a web application “built for purpose”—we wanted it to be a platform that customers can extend on their own. With this goal is mind, the first component that we picked for IVAAP’s architecture was a “lookup” system.

The Java language has a standard way of performing such dependency injections. Java’s ServiceLoader class is central to this mechanism but it is a bit outdated and maintenance-heavy. To plug classes for a ServiceLoader, you need to edit a separate META-INF/services text file. This file contains the name of the class you want to plug. It doesn’t offer protections against typos and if a class name changes, the injection breaks unless you remember to update this service file. This design violates the concept that “what changes together should belong together.”

Unlike the ServiceLoader, IVAAP uses Java annotations to register classes into its lookup. These annotations belong in same class they register and they don’t break when that class name changes. For example, here is how the built-in entitlements controller is registered:

@SelfRegistration(lookupClass = AbstractEntitlementsController.class, position = 50)
public class DefaultEntitlementsController extends AbstractEntitlementsController {

The IVAAP SDK also has the option to perform this registration programmatically. This is the equivalent registration using code instead of annotations:

Lookup.Factory.getInstance().register(AbstractEntitlementsController.class, new DefaultEntitlementsController(), 50);

In many ways, this registration is very similar to what ServiceLoaders require. You can unregister classes, too. For example, here is how a customer would override how IVAAP controls entitlements:

@ClassUnregistration(lookupClass = AbstractEntitlementsController.class, registeredClass = DefaultEntitlementsController.class)
@SelfRegistration(lookupClass = AbstractEntitlementsController.class, position = 100)
public class MyEntitlementsController extends AbstractEntitlementsController {

This is the equivalent registration using code instead of annotations:

Lookup.Factory.getInstance().unregisterClass(AbstractEntitlementsController.class, DefaultEntitlementsController.class);
Lookup.Factory.getInstance().register(AbstractEntitlementsController.class, new MyEntitlementsController(), 100);

Each registration has a position. This is mostly useful when several classes of the same type need to be registered in the lookup. By setting the position attribute, you can customize which class will be found first when the content of the lookup is inspected. In other words, the position controls the order in which all “if” statements will be executed. It also has performance tuning use cases. For example, there are many service handler classes registered, each one representing a microservice. You can decide the order in which they will be matched to a URL, optimizing for the most frequently used ones.

When annotations became part of the Java ecosystem, they were widely adopted as an alternative to XML configuration files. This approach has sometimes been overused, resulting in multiple types of annotations, carrying numerous attributes, becoming just as indecipherable as the XML configuration files they were attempting to replace. The IVAAP backend avoids this pitfall by using the same annotation across all option types, which means is only one set of annotations to learn for a programmer extending the platform.

Another nice feature of IVAAP’s lookup system occurs at startup. When the classpath is inspected for lookup annotations, the classes found are logged. There are 300 modules in IVAAP, and no two customers pick the same options. When troubleshooting is needed, these logs make an unambiguous way to learn which options are actually in play for a specific deployment.

Inspecting jar files for lookup registrations at startup takes time. For performance reasons, you might elect to ignore jars that are known to be registration-free. You typically exclude external libraries by adding lookup.ignore configuration files along with your jars. These files use regex expressions to exclude jars by name. You also have the option to set environment variables to achieve the same result. The later method is actually quite useful in the context of Docker deployments. This gives devops the option to create one Docker instance with all jars of the platform and customize how this instance behaves just by setting environment variables—you can reuse the same Docker image in multiple deployment contexts.

The Java ecosystem has many dependency injection libraries available. They tend to require configuration and many keystrokes, essentially interrupting the developer while coding is underway. IVAAP’s backend doesn’t just propose an easy way to customize how it behaves, it also proposes an unobtrusive way to create pluggable behaviors while developers are working. Actually, the simplicity of the lookup system is the reason why so many aspects of IVAAP are pluggable. When this system is introduced to new developers, they enjoy that it’s easy to learn, yet versatile. Devops appreciate that they can leverage it when a fast turnaround is needed.

Visit our products page for more information about IVAAP or contact us for a demo.

Filed Under: Uncategorized Tagged With: ivaap, lookup, pluggable

Jan 04 2019

What We Learned about the Future of NetBeans from the Last 2 Years

It’s been two years since Oracle announced the donation of the NetBeans source code to the Apache software foundation. This move was much more than a licensing change — it was a bit of a new beginning for NetBeans.

The NetBeans IDE is well liked at INT. In fact, INTViewer is built on top of the NetBeans platform, and the IVAAP backend was entirely written with the NetBeans IDE. With the release of NetBeans 10, now is a good time to look back and recognize the changes that this transition to Apache brought.

Better Licensing
Under Oracle’s stewardship, the NetBeans source code was available under two licenses: a Common Development and Distribution License (CDDL) and a GNU General Public License (GPL). The CDDL is not well known, and the GPL sometimes carries stigma. The license move is a clear win for the platform as Apache is appreciated in the Java community for its business-friendly license and ubiquitous libraries.

Open Governance
The Apache NetBeans project is still “incubating.” The incubation process allows the foundation to assess whether the donated code complies with legal standards and how the community adheres to Apache’s guiding principles. These principles are centered around openness and collaboration. You can see it at work on NetBeans’ own website: all communications are recorded and shared. This is actually a requirement from the Apache foundation to use mailing lists. No conversations behind closed doors. No secret agenda. When decisions are made, you can see how the consensus was built. The NetBeans project didn’t just get a “new home,” it inherited a renewed philosophy, a new process, moving from “open source” to “open governance.”

Ongoing Support
Oracle has been a significant contributor to NetBeans in the past. Despite the spin off, Oracle’s contributions continue to this day — the NetBeans project received in June a second code donation from Oracle, a donation that will enable JakartaEE projects. Two years ago, observers were worried that Oracle might be “abandoning” NetBeans to Apache. However, the last two years have proved that Oracle still intends to spend resources on NetBeans.

The move to Apache was also a good opportunity to modernize the community tools: Bugzilla was retired, making room for JIRA, and self-hosted Mercurial was replaced by Git, hosted on GitHub. These changes make contributions from developers easier to make, giving the community much more freedom to control its future.

The timing of this transition wasn’t the best. Effort that would have normally been spent by the NetBeans community to support Java 9, 10, and 11 was spent instead meeting Apache’s legal requirements. The release of NetBeans 10 officially closes this chapter. The NetBeans developers need to be recognized for their efforts during these two years. As all Java developers can attest, the transition to Java 11 of any code base is a challenge. This was certainly even more true for a large code base such as NetBeans’.

What’s Next for NetBeans?
This chapter has yet to be written. Discussions point to frequent updates, maybe every 6 months. Meanwhile, INT is working actively to integrate the NetBeans 10 platform to INTViewer. Personally, I feel that the NetBeans project is likely to attract a new crowd of developers. Developers who have an itch to scratch. Since the users of the NetBeans IDE are developers themselves, there is a definite sense that filing bug reports or proposing new features won’t be enough to get things done. Pull requests make it easier than ever to submit changes and I plan to scratch long-time itches myself — maybe INTViewer would benefit from some tweaks to the NetBeans window system. It’s time for all of us to use these newfound abilities.

Visit our products page for more information about INTViewer or IVAAP or contact us for a demo.


Filed Under: INTViewer, IVAAP Tagged With: INTViewer, ivaap, NetBeans

Nov 13 2018

Using Scopes in IVAAP: Smart Caching and Other Benefits for Developers

With the release of IVAAP 2.2 coming up, there are lots of new features to explore. Since more data sources have being added, the Software Development Kit (SDK) of IVAAP’s backend has also grown. As developers get acquainted with IVAAP’s Application Programming Interface (API), one often-asked question concerns the presence of a scopeUUID parameter in several method declarations: What is this scope, and why is it useful?

Smart Caching

The purpose of IVAAP’s backend is to access the data from many data sources and present this data in a unified manner to the IVAAP HTML5 client. This backend is written in Java and accesses SQL databases, web services, basically any type of data store. Performance is key, and some data stores are faster to access than others. For example, web services tend to have much higher latency than SQL databases. In a web service configuration, a smart caching strategy is required so that the same web/HTTP calls are not made to the same data store twice while a service request is being fulfilled, regardless of its complexity. This is where the concept of scope comes in.

A scope is defined as a short-lived execution, and within this short lifetime, it’s generally OK to assume that two identical calls to the same data store will return the same result. The scopeUUID is a unique identifier of a scope. A scope is created automatically when an HTTP request is sent to a backend service, and disposed of when that entire request has been fulfilled. Depending of the performance characteristics of a data source, developers working on a data connector have the option to reuse cached information across the time span of a scope.

Scopes are needed because of the asynchronous nature of IVAAP’s execution architecture. Asynchronous code is not as common as synchronous code; it’s more complex to write, but tends to withstand higher workloads, which is a key requirement for IVAAP. If service executions were performed synchronously, the scope would be strongly associated with the current thread, and developers would typically cache the same information in a ThreadLocal variable instead.

Identifying the Source of a Method Call

While the most common use of scopes is for caching, being able to identify the source of a method call can be quite useful when running your application. In a synchronous world, the Java call stack provides this information. But in an asynchronous world where messages are being passed between actors, this call stack provides very little useful information. The IVAAP API allows you to build a useful call stack while developing. For example, if your backend code makes a call to an external web service, but you’re not sure why, you can plug your own AbstractScopesController class to control when this scope is created, then plug your own AbstractActorsController class to track how actors spawn other actors within that scope.

Managing Transactions

A third typical usage of scopes is to help with the management of transactions. When you retrieve a connection from a SQL connection pool, knowing the scope allows you to decide whether to reuse the same connection instead of the first one from the pool. Transactions are tightly associated with connections, and, without a scope, you’d need to pass connections around while a transaction is in play. Passing a scopeUUID instead avoids this code clutter, allowing you to easily implement APIs that are truly data-source agnostic.

Scope: Just More Code Clutter?

This brings me to the main objection to scopes: “Isn’t passing a scopeUUID a code clutter of its own?” The answer lies in how a developer plans to use the IVAAP backend SDK. If you use this API to write synchronous code, the scopeUUID will appear to get in the way. If you use the same API to write asynchronous code, you’ll find that the internal maintenance of scopes doesn’t affect the implementation of your actors. The scopeUUID of a service request is passed automatically from one actor to the next, without the developer’s intervention. If your data source is fast enough that it doesn’t require caching, if you do not make use of transactions, your asynchronous code will not need to be aware of scopes. It’s only when you will have to troubleshoot the relationships between actors at runtime that you might come to appreciate its usefulness.

Visit our products page for more information about IVAAP or contact us for a demo.


Filed Under: IVAAP Tagged With: ivaap, SDK

  • « Go to Previous Page
  • Go to page 1
  • Interim pages omitted …
  • Go to page 6
  • Go to page 7
  • Go to page 8
  • Go to page 9
  • Go to Next Page »

Footer

Solutions

  • For E&P
  • For OSDU Visualization
  • For Cloud Partners
  • For Machine Learning
  • For CCUS
  • For Geothermal Energy
  • For Wind Energy
  • For Enterprise
  • Tools for Developers
  • Customer Success Stories

Products

  • IVAAP
  • GeoToolkit
  • INTViewer
  • IVAAP Demos
  • GeoToolkit Demos

About

  • News
  • Events
  • Careers
  • Management Team

Resources

  • Blog
  • FAQ

Support

  • JIRA
  • Developer Community

Contact

INT logo
© 1989–2023 Interactive Network Technologies, Inc.
Privacy Policy
  • Careers
  • Contact Us
  • Search

COPYRIGHT © 2023 INTERACTIVE NETWORK TECHNOLOGIES, Inc