Welcome to Inqwell

Who are Inqwell?

Inqwell is a software consultancy that offers bespoke new system development and integration of existing disparate systems. Inqwell differs from similar companies in its ethos of empowering the client to take control of its own projects where required and the genuinely innovative approach we take to solving systems development problems.

Inqwell has produced a new language called InqTM in which we perform all of our development. Inq is a scripting language written entirely in JavaTM.

What Is Inq?

Inq is more than just a language - it is also an execution environment that runs as either a client or a server and handles many of the areas developers of complex distributed systems face time and again. Some of the issues Inq addresses are:

Transaction Handling
The Inq server automatically enters server-side objects into a transaction context as they are modified by user code. Objects are then locked, preventing mutation by competing threads.
Object Persistence
If a transaction successfully commits, all modified objects are written to their persistent storage medium.
Database Independence
Inq completely separates the application code from the SQL required to read and write objects. Such SQL is often specific to the database vendor, however because of this separation Inq applications can run on multiple databases simultaneously.
Object Events and Client Synchronisation
As part of its transaction processing, the Inq server raises events on objects as instances are created, modified and destroyed. These events can be processed by application code, however in many cases the default handlers of the Inq environment are sufficient. The Inq server automatically propagates such events to connected clients in order that their loaded copies of objects are always up to date.
Threads and Locks
Inq supports locks and wait-for conditions, which together with its process abstraction help to simplify the problems encountered in multi-threaded applications.
Rapid GUI Building
Inq succinctly creates and lays out GUIs, supporting modular construction of reusable component groups.
Implicit Binding of Models to Views
By associating data items with the GUI components that are viewing them, Inq automatically updates graphical displays as events are received. No user code is required to do this.

Whether writing and running client or server code, much of what the programmer wants to happen is handled automatically by the Inq runtime. Inq has been written to allow the developers of complex applications to concentrate entirely on exactly that - only the application. Inq removes two major facets of application development that are often traumatic:

  • The engraining of the chosen view of the "real world" in the code. Inq is not an OO language. It has user-defined types but its simple functional approach means that application areas are not tightly coupled to each other. Maintenance for anything unanticipated is unlikely to cause major rework or result in duplicated or spaghetti code.
  • There are no multiple layers of software to integrate and write against the API of. So no JDBC, no endless classes implementing this or that interface, no transaction calls to make. No table models to continually implement and to adapters to write. Inq is RAD in the extreme.

Inq Protects Your Investment in Legacy Systems

A "big bang" approach to upgrading your systems to the latest technologies is rarely an option. Because Inq cleanly separates database schemas from the application code, clients are able to migrate their existing systems in discrete sections of whatever size they choose.

Inq will tolerate database schema changes much more readily than code whose dependency on the SQL is engrained. As larger sections are migrated, so the schema can be updated as required and the legacy code retired. The pace and size of the migration is entirely at the discretion of the client.

The preferred method of implementing server-side application logic is by expressing it as Inq code. However, legacy processing held as database stored-procedures can be maintained as long as required. Inq can be notified that a class or defined set of objects have been modified externally, upon which it will resynchronise with the external data source, raising events about what has happened as required.

Inq Instantly Distributes Your Application

Inq is a scripted language - it needs no compilation. The source files are maintained centrally and downloaded to connected clients by the Inq server.

Inq clients are indistinguishable from their traditionally coded Java counterparts. Once parsed, the source is not needed again. With the runtime available locally, Inq combines the instant distribution of browser-based solutions with the rich functionality of desktop applications.

Inq Efficiently Distributes Your Data

Inq propagates events between server and client according to whether the client is observing the data raising the event. By only notifying clients of the data they are interested in, Inq makes efficient use of network bandwidth.

When retrieving large datasets, Inq can use compression to reduce its network usage by up to seven times. Inq solutions solve the problems of centrally managed applications often suffering from network bottlenecks.

The Inq server caches objects it has read from a database. Together with the efficiency of its own client-server protocol, Inq operates effectively when client, server and database are coupled over a wide-area network.

Inq Brings Users and Developers Together

The speed and simplicity of Inq development means that users and developers can work much more closely together. Developers can rapidly produce and refine prototypes that users can see and try for themselves.

This highly iterative process becomes the de facto methodology of development. The users and developers have confidence in each other, leading to much better project management and a more assured delivery schedule.