SlideShare a Scribd company logo
1 of 4
Download to read offline
ACEEE Int. J. on Information Technology, Vol. 01, No. 02, Sep 2011



                                            Fluent Interfaces
                                       Shushobhickae Singh, Chitrangada Nemani
                                            NMIMS-MPSTME, Mumbai, India
                                  Email: {shushobhickae, chitrangada.nmims}@gmail.com

Abstract— Modern Enterprise Software Systems entail many              and re-designing for using them. Consider the case of Java
challenges such as rapidly changing business scenario,                which has been there, for almost 15 years. Enterprises have
increase in complexity, and shorter time to market and                been extensively using it for almost a decade. This has
providing business agility without compromising on the                resulted in the creation of whole bunch of APIs, that instead
quality. Ensuring productivity, quality, consistency, cost            of leveraging existing APIs, we tend to create new ones to
effective, reduced cycle time have become a mandate for the
                                                                      avoid the pain of understanding them. This increase in
teams dealing with modern enterprise software systems.
Fluent Interfaces is a powerful technique, which help in              complexity, adds to the difficulties of developing software as
taming the programming complexities, reducing boilerplate             well as testing, maintaining and enhancing them. This overall
code, increasing the quality and thereby improving the                brings down the PQC factor viz. Productivity, Quality and
productivity and cycle time. In this paper we will describe           Consistency as well as increases the complexity, cost and
some of our explorations in Fluent Interfaces and why we feel         time to market / value. It therefore becomes difficult for
the notion of Fluent Interfaces is a useful technique for             enterprise software systems to sustain, evolve or innovate.
enterprise software system. We are currently focusing on two          Fluent Interfaces are a lighter version of Domain Specific
things – a technique for determining fluency of an API and            Languages which help in overcoming these problems. They
secondly a methodology for designing a fluent interface. We
                                                                      help in re-designing APIs to elevate the level of abstraction
will also share some of the benefits and limitations that we
observed during our experimentation. We conclude this paper           and making them succinct and easy to use.
with a note on the current work that we are doing and the
future directions.                                                                        II. FLUENT INTERFACES
                                                                          Fluent Interfaces (first coined by Martin Fowler and Eric
Key Words – Fluent Interfaces, Enterprise Software Systems,
Application Programmable Interface (API). Domain Specific             Evans) help in transforming an object oriented API to be
Languages.                                                            more readable, concise, easy to understand and easy to use.
                                                                      They help in developing software which hides the technical
      I. MODERN ENTERPRISE SOFTWARE SYSTEMS AND ITS                   complexities and is aligned to the domain. This makes it
                         CHALLENGES                                   feasible for non-programmers to understand the context.
                                                                      There has been a wide gap between problem domain and the
    The Modern Enterprise Software Systems are growing                solution domain as most of the time it is difficult to make out
beyond the boundaries of silo-ed enterprise applications to           the problem due to lengthy and complicated software. Thus
meet the requirements of rapidly changing markets. They are           this high level of abstraction helps in increase the
getting integrated within and across the enterprises thereby          productivity, maintainability by bridging the gap between
metamorphosing into huge ecosystems. This has resulted                business logic and its development. The cost of adding
into immense complexity, which seems to be ever                       fluency demands more effort, both in terms of developing
increasing.The complexity of Enterprise Software Systems              and refining it. Making a fluent API involves lot of thought
can be split in a two-dimensional way. The first aspect is the        process but the outcome of this investment is worthwhile.
domain in which the software is operating in. The other is the        Fluent Interface is also often called an internal DSL, since the
technology, using which we build the solution. Domain has             syntax resembles that of a DSL and it is implemented inside
to be treated as an essential complexity, which we cannot             the host language instead of being processed by a parser.
avoid. On the other hand, technical complexity is something           Fluent Interface allows us to develop software which is:
which we can look into. Today the need of the hour is to                      More readable and clean.
bring the technical complexity down there by improving the                    Can be written easily and in shorter period of time.
– productivity, quality, reduce complexity, lesser learning                   Is more concise and succinct for usage
curve, and reduced cycle time, which are the mandates for                     Easily understandable due to meaningful names
any enterprise software system. By saving efforts on the                      Avoids redundancies in code, thereby making the
technology side we can invest them into domain, there by                          code crisper.
addressing the business needs in a better and timely manner.             Thus, fluent interfaces provide mechanism to develop
Having a good camaraderie between domain and technology,              software where we can readily see the idiomatic patterns,
helps us to communicate better with different stake holders           which we may have earlier found it difficult to identify. They
which reduces the communication gap and helps in meeting              also force us to change our perspective on code - it should
the business demands. Application Programmable Interfaces             not be merely functional but also readable, especially if non
(APIs) seem to be common IT person’s technique for                    developers need to consume any aspect of it. Fluent interfaces
interacting with different components of a software system.           help in removing unnecessary noise from the software.
The usual APIs have lot of bloated code, need refactoring
                                                                 19
© 2011 ACEEE
DOI: 01.IJIT.01.02.186
ACEEE Int. J. on Information Technology, Vol. 01, No. 02, Sep 2011


             III.EXAMPLES OF FLUENT INTERFACES                           just an auxiliary code for converting and filtering a list of
                                                                         String dates and it has turned into a lot of complex and hard-
    In this section, with the help of an example we will see in
                                                                         to-understand code, probably bigger and uglier than the
detail the effectiveness of using Fluent Interfaces. Apart from
                                                                         application logic that might surround it. We use Op4j for the
this, we have also included a list of the prominent examples
                                                                         same scenario. It is a Java library aimed at improving quality,
which are utilizing Fluent Interfaces.
                                                                         semantics, cleanness and readability of Java code, especially
A. Using Op4j operation expression                                       auxiliary code like data conversion, structure iteration,
    Consider a scenario where we have to convert a list into             filtering, mapping, etc. It allows us to create chained
an ordered set. The list comprises of Strings which are dates            expressions which apply both predefined and user-defined
in the DD/MM/YYYY format. Following are the conditions                   functions to the objects in a fluid and readable way. This
that need to be added:                                                   improves the way the code looks and greatly reduces the
Convert them into java.util.calendar objects.                          complexity of executing auxiliary low-level tasks in the highly
As some of the strings can be null, so we need to remove               bureaucratic, statically -and strongly- typed language that
them before executing the conversion.                                    Java is.
Also we do not want to include dates in future.
Using “normal” Java code, we can implement the scenario
in the following manner:




                                                                         In the above code, “Op.on(list).toSet()”, converts the list
                                                                         into an ordered set. “map” operation helps the tasks to be
                                                                         executed in an iterative manner. “removeAllNullOrTrue”,
                                                                         removes the Strings which are null before they get processed.
                                                                         It also removes cases where the date is greated than the
                                                                         current calendar date by using the function
                                                                         “FnCalendar.after(now)”. Thus the above code is crisp,
                                                                         precise and clean as well as readable achieving the same
                                                                         functionality as the “normal” java code which was written
                                                                         earlier. The number of lines of codes look immensely reduced
                                                                         and thereby it becomes easy to manage. Like Op4J there are
                                                                         many more libraries which have Fluent Interface
                                                                         implementation.
                                                                         B. Some more examples
                                                                             Following table shows some examples in the field of Fluent
                                                                         Interfaces.




We first get the current calendar date in line (1). The data
format is set to DD/MM/YYYY format in line (2). The list is
converted to an ordered set in line (3). We then iterate through
the list of Strings. If the element i.e. the String is null we do
not do any operation and go for the next element. If the String
is not empty then we go ahead and parse the element as
shown in line (4). We then get the date in a calendar format as
shown in line (5). We compare this calendar date with the
current date. If it is not beyond the current date then we add
it to the set as shown in line (6). Overall, this code is less
readable, lengthy and takes more time for execution. This is
                                                                    20
© 2011 ACEEE
DOI: 01.IJIT.01.02.186
ACEEE Int. J. on Information Technology, Vol. 01, No. 02, Sep 2011


More and more frameworks, toolkits and libraries are using              Following are the standard methods for adding fluency to
Fluent Interfaces. The rush for fluent interfaces is not limited        an API are:
to Java, but is also getting widely spread across other                 1. Method Chaining – This is the most popular way of
technologies like C#, dotNet, php, JavaScript etc. Based on             implementing fluent interface. A function always returns some
the examples provided above, the sprawl of Fluent Interfaces            object that allows for further calls to be made. Example:
seems to be spreading across different areas of Enterprises
as well as different technologies. Currently we are engaged
in identifying some more examples of fluent interfaces to
understand their impact on enterprise software systems.

IV. METHODOLOGY FOR DETERMINING EXTENT OF FLUENCY AND
             DESIGNING FLUENT INTERFACES
    Fluent interfaces are a powerful technique to tame the              Here an object of class HardDrive is created by chaining
complexity of modern software systems. It can be applied to             methods: capacity, external, speed.
APIs which are being heavily used. Fluency can be                       2. Factory Classes - Provides methods to manufacture the
accomplished only after several polishing efforts of the API            instances required. It is used in cases where there is a need
in concern. Identifying the degree of fluency or designing a            to build up series of related objects. Example:
fluent interface is not a standard mechanical process but it
needs to evolve with usage. Currently, we are exploring some
more implementations of fluent interfaces to identify a generic
approach for determining the degree of fluency in an API.
Based on the explorations that we have done so far, we have
come up with a list of characteristics which will help us to
determine whether an API is fluent enough or not:
 The API needs to be verbose enough to depict the
functionality that is assigned.
 The software has to be clear enough so that even non-
programmers can understand the logic.
There should be no repeated patterns occurring across the
software else they will have to be segregated out.
 The software should have sufficient modularity so that
there is proper separation of concerns.
There should be no language restrictions or barriers for
using techniques like method chaining etc.                              Here, “fromCartesian(a,b)” and “fromPolar(a,b)” are factory
The software should be succinct enough and there should               methods of factory class “Complex”. Factory methods are
be no further ways of reducing the lines of code.                       used for disambiguation
If all these characteristics are taken care then the degree of
fluency should be high. In case if the APIs are not fluent they
can be made fluent using the following mechanisms:
Have thorough understanding of the API which needs to
be made fluent. The API should have been heavily used to
understand the problem areas.
Identify the gaps or areas in an API which can be good
candidates for applying fluency.
Select a method or combination of methods for making the
API fluent - Method Chaining, Named Parameters and Factory
Classes.                                                                3. Named Parameters - It clearly states the name of each
Provide meaningful names to functions and parameters so               parameter within the function call itself. It provides a way to
that they are in sync with the domain they are associated               include additional “syntax” in a method call thereby improv-
with.                                                                   ing the readability. Example:
 In order to make the code more readable and
comprehendible, define new functions with names like on,                                 V. BENEFITS AND LIMITATIONS
having, of, for, etc.
Decide the order in which each function will be called and                Fluent Interfaces, aim at bringing down the complexity in
the return parameters, so that it becomes a meaningful                  software making it more readable, manageable and economical
transaction.                                                            thus meeting the targets of PQC. It needs to be noted that
                                                                        Fluent Interfaces are not a silver bullet or panicky enough
                                                                        that it will work in all scenarios. It has been tried and tested
                                                                   21
© 2011 ACEEE
DOI: 01.IJIT.01.02.186
ACEEE Int. J. on Information Technology, Vol. 01, No. 02, Sep 2011


and works well in many cases. Thus we should make a                                           ACKNOWLEDGMENT
conscious decision while going for designing fluent interfaces.
                                                                            The work reported here was carried out under the aegis
Some of the key benefits of using Fluent Interfaces are:
                                                                        of Innovation Research Lab (IRL) at Patni Computer Systems,
It is more readable and easy to understand. It elevates the
                                                                        under the guidance of Sunil Joglekar, Senior Technical
level of abstraction and thereby hides the complexities from
                                                                        Architect and A.Nagalakshmi, Manager (Software).
the user, thus making it succinct to use.
 It ensures concise code and avoids redundancies. This
                                                                                                  REFERENCES
helps in saving efforts, which improves the productivity
figures and helps in achieving time to market.                          [1] DSL by Martin Fowler (http://www.martinfowler.com/bliki/
 Focuses on making the language ubiquitous from non-                  DomainSpecificLanguage.html).
programmer’s point of view. This helps in avoiding too many             [2]DSL        wiki      (http://en.wikipedia.org/wiki/Domain-
feedback sessions with different stakeholders thus narrowing            specific_language)
                                                                        [3]Method       Chaining      (http://martinfowler.com/dslwip/
the communication gaps.
                                                                        MethodChaining.html).
Ease of usage and understanding helps in bringing down                [4]Method Chaining (http://stackoverflow.com/questions/293353/
the efforts involved in development, testing, maintenance               fluent-interfaces-method-chaining)
and enhancement which in all lowers the overall cost of the             [5]Factory       Pattern          (http://en.wikipedia.org/wiki/
enterprise software system.                                             Factory_method_pattern)
Though the benefits of Fluent Interfaces are high but making            [6]Named         Parameters       (http://en.wikipedia.org/wiki/
an API fluent is a difficult and time taking exercise. Following        Named_parameter).
are some of the limitations of developing Fluent Interfaces.            [7]Lamdaj (http://code.google.com/p/lambdaj/)
Identifying the exact problem areas and gaps in an API.               [8]Op4j (http://www.op4j.org/basics.html)
                                                                        [9]Joda-Time (http://joda-time.sourceforge.net/)
In order to make an API Fluent, we need to have lots of
                                                                        [10]JMock (http://www.jmock.org/)
iterations to ensure the solution is proper and effective.              [11]Fluent nHibernate (http://wiki.fluentnhibernate.org/
Having lots of iterations needs additional efforts and time,          Getting_started)
which increases the overall cost.                                       [12]Java Persistent API (http://en.wikipedia.org/wiki/
 Coming up with domain flavor for naming convention                   Java_Persistence_API)
requires good understanding of the domain itself.
                                                                                             ABOUT THE AUTHORS
                      VI. FURTHER WORK
    Given the observation that Fluent Interfaces are spreading                         Shushobhickae Singh is a student of B.E
rapidly in enterprise software systems, we are planning to                             (Computer Science) final year from NMIMS-
explore some more Fluent APIs. As a part of our early                                  MPSTME, Mumbai. She has carried out the work
                                                                                       on Fluent Interfaces in Patni Computer Systems,
experiments, we have designed fluent interfaces using Dasein
                                                                                       as a part of the partial fulfillment of Bachelor of
Cloud API. The sprawl of Fluent Interfaces can be seen from                            Engineering degree.
their usage in areas as common as collections to emerging
technologies like cloud APIs. Implementing Fluent Interfaces                           Chitrangada Nemani is a student of B.E (Infor-
demands heavy usage of API and lot of iterations for finding                           mation Technology) final year from NMIMS-
the right fluency. Thus it requires a systematic approach for                          MPSTME, Mumbai. She has carried out the work
determining whether a given API is fluent enough or not and                            on Fluent Interfaces in Patni Computer Systems,
also for designing Fluent Interfaces. By method of induction,                          as a part of the partial fulfillment of Bachelor of
                                                                                       Engineering degree.
we intent to develop a generic process for determining the
fluency of an API and design a methodology for implementing
Fluent Interface. Though Fluent Interfaces may be an unstated
deliverable but the representative numbers that can be
achieved in improving the productivity mandates us to explore
this technique further. Fluency can be applied to some of the
latest and emerging technologies like Cloud API, Mobile API,
Collective intelligence API, REST Interfaces etc. which are
becoming very popular. Though our current scope of work is
limited to Fluent APIs, but the notion of fluency is creating
waves in different programming languages too e.g. FluentJava.
The power of fluency seems to be engulfing enterprise
software systems and it may not be long when fluent interfaces
may become an inherent standard design technique.




                                                                   22
© 2011 ACEEE
DOI: 01.IJIT.01.02.186

More Related Content

What's hot

Research platform architecture
Research platform architectureResearch platform architecture
Research platform architecturePierre Menard
 
Eclipse Summit 2008 - Thales - SolFa
Eclipse Summit 2008 - Thales - SolFaEclipse Summit 2008 - Thales - SolFa
Eclipse Summit 2008 - Thales - SolFaBENOIT_LANGLOIS
 
AD for i in modern world
AD for i in modern worldAD for i in modern world
AD for i in modern worldCOMMON Europe
 
Bayapa_Tibco_Mule_Resume
Bayapa_Tibco_Mule_ResumeBayapa_Tibco_Mule_Resume
Bayapa_Tibco_Mule_ResumeCsb Reddy
 
Dossier corporativo en inglés
Dossier corporativo en inglésDossier corporativo en inglés
Dossier corporativo en inglésGrupo Arelance
 
Smalltalk in Large-scale Enterprise Architectures
Smalltalk in Large-scale Enterprise ArchitecturesSmalltalk in Large-scale Enterprise Architectures
Smalltalk in Large-scale Enterprise ArchitecturesESUG
 
Eclipse BPEL Designer
Eclipse BPEL DesignerEclipse BPEL Designer
Eclipse BPEL Designermilliger
 
G2iX CIO Forum - Updated CIO Innovation Toolkit
G2iX CIO Forum - Updated CIO Innovation ToolkitG2iX CIO Forum - Updated CIO Innovation Toolkit
G2iX CIO Forum - Updated CIO Innovation Toolkitg2ix
 
Spagic 3: OSGi Universal Middleware for an effective SOA solution
Spagic 3: OSGi Universal Middleware for an effective SOA solution Spagic 3: OSGi Universal Middleware for an effective SOA solution
Spagic 3: OSGi Universal Middleware for an effective SOA solution SpagoWorld
 
Presentationer ipt uc mobilitet 2010
Presentationer ipt uc mobilitet 2010Presentationer ipt uc mobilitet 2010
Presentationer ipt uc mobilitet 2010midfieldmedia
 
Fusion apps security_con8714_pdf_8714_0001
Fusion apps security_con8714_pdf_8714_0001Fusion apps security_con8714_pdf_8714_0001
Fusion apps security_con8714_pdf_8714_0001jucaab
 
Process & Conceptual Modeling | Business Architect
Process & Conceptual Modeling | Business ArchitectProcess & Conceptual Modeling | Business Architect
Process & Conceptual Modeling | Business ArchitectEmbarcadero Technologies
 

What's hot (19)

Embarcadero Product Overview
Embarcadero Product OverviewEmbarcadero Product Overview
Embarcadero Product Overview
 
Document
DocumentDocument
Document
 
Research platform architecture
Research platform architectureResearch platform architecture
Research platform architecture
 
Eclipse Summit 2008 - Thales - SolFa
Eclipse Summit 2008 - Thales - SolFaEclipse Summit 2008 - Thales - SolFa
Eclipse Summit 2008 - Thales - SolFa
 
AD for i in modern world
AD for i in modern worldAD for i in modern world
AD for i in modern world
 
Bayapa_Tibco_Mule_Resume
Bayapa_Tibco_Mule_ResumeBayapa_Tibco_Mule_Resume
Bayapa_Tibco_Mule_Resume
 
Dossier corporativo en inglés
Dossier corporativo en inglésDossier corporativo en inglés
Dossier corporativo en inglés
 
Smalltalk in Large-scale Enterprise Architectures
Smalltalk in Large-scale Enterprise ArchitecturesSmalltalk in Large-scale Enterprise Architectures
Smalltalk in Large-scale Enterprise Architectures
 
Blue Ruby SDN Webinar
Blue Ruby SDN WebinarBlue Ruby SDN Webinar
Blue Ruby SDN Webinar
 
About Straker
About StrakerAbout Straker
About Straker
 
Eclipse BPEL Designer
Eclipse BPEL DesignerEclipse BPEL Designer
Eclipse BPEL Designer
 
BPM and SOA for CA Plex
BPM and SOA for CA PlexBPM and SOA for CA Plex
BPM and SOA for CA Plex
 
G2iX CIO Forum - Updated CIO Innovation Toolkit
G2iX CIO Forum - Updated CIO Innovation ToolkitG2iX CIO Forum - Updated CIO Innovation Toolkit
G2iX CIO Forum - Updated CIO Innovation Toolkit
 
Spagic 3: OSGi Universal Middleware for an effective SOA solution
Spagic 3: OSGi Universal Middleware for an effective SOA solution Spagic 3: OSGi Universal Middleware for an effective SOA solution
Spagic 3: OSGi Universal Middleware for an effective SOA solution
 
Ops cockpit sitnl
Ops cockpit sitnlOps cockpit sitnl
Ops cockpit sitnl
 
Introduction inbox v2.0
Introduction inbox v2.0Introduction inbox v2.0
Introduction inbox v2.0
 
Presentationer ipt uc mobilitet 2010
Presentationer ipt uc mobilitet 2010Presentationer ipt uc mobilitet 2010
Presentationer ipt uc mobilitet 2010
 
Fusion apps security_con8714_pdf_8714_0001
Fusion apps security_con8714_pdf_8714_0001Fusion apps security_con8714_pdf_8714_0001
Fusion apps security_con8714_pdf_8714_0001
 
Process & Conceptual Modeling | Business Architect
Process & Conceptual Modeling | Business ArchitectProcess & Conceptual Modeling | Business Architect
Process & Conceptual Modeling | Business Architect
 

Viewers also liked

Coupling Aware Explicit Delay Metric for On- Chip RLC Interconnect for Ramp i...
Coupling Aware Explicit Delay Metric for On- Chip RLC Interconnect for Ramp i...Coupling Aware Explicit Delay Metric for On- Chip RLC Interconnect for Ramp i...
Coupling Aware Explicit Delay Metric for On- Chip RLC Interconnect for Ramp i...IDES Editor
 
Incremental Difference as Feature for Lipreading
Incremental Difference as Feature for LipreadingIncremental Difference as Feature for Lipreading
Incremental Difference as Feature for LipreadingIDES Editor
 
An Optimized Transform for ECG Signal Compression
An Optimized Transform for ECG Signal CompressionAn Optimized Transform for ECG Signal Compression
An Optimized Transform for ECG Signal CompressionIDES Editor
 
Dynamic Concept Drift Detection for Spam Email Filtering
Dynamic Concept Drift Detection for Spam Email FilteringDynamic Concept Drift Detection for Spam Email Filtering
Dynamic Concept Drift Detection for Spam Email FilteringIDES Editor
 
3D Visual Integration of Spatio-Temporal Gene Expression Patterns on Digital ...
3D Visual Integration of Spatio-Temporal Gene Expression Patterns on Digital ...3D Visual Integration of Spatio-Temporal Gene Expression Patterns on Digital ...
3D Visual Integration of Spatio-Temporal Gene Expression Patterns on Digital ...IDES Editor
 
Two Different Approaches for NGOSS Process Modeling and Simulation
Two Different Approaches for NGOSS Process Modeling and SimulationTwo Different Approaches for NGOSS Process Modeling and Simulation
Two Different Approaches for NGOSS Process Modeling and SimulationIDES Editor
 
Cross Lingual Information Retrieval Using Search Engine and Data Mining
Cross Lingual Information Retrieval Using Search Engine and Data MiningCross Lingual Information Retrieval Using Search Engine and Data Mining
Cross Lingual Information Retrieval Using Search Engine and Data MiningIDES Editor
 
A Novel Scheme for Mutual Authentication and Cheating Prevention in Visual Cr...
A Novel Scheme for Mutual Authentication and Cheating Prevention in Visual Cr...A Novel Scheme for Mutual Authentication and Cheating Prevention in Visual Cr...
A Novel Scheme for Mutual Authentication and Cheating Prevention in Visual Cr...IDES Editor
 
Marathi Isolated Word Recognition System using MFCC and DTW Features
Marathi Isolated Word Recognition System using MFCC and DTW FeaturesMarathi Isolated Word Recognition System using MFCC and DTW Features
Marathi Isolated Word Recognition System using MFCC and DTW FeaturesIDES Editor
 
Hierarchical prediction and context adaptive coding for lossless color image ...
Hierarchical prediction and context adaptive coding for lossless color image ...Hierarchical prediction and context adaptive coding for lossless color image ...
Hierarchical prediction and context adaptive coding for lossless color image ...LeMeniz Infotech
 

Viewers also liked (10)

Coupling Aware Explicit Delay Metric for On- Chip RLC Interconnect for Ramp i...
Coupling Aware Explicit Delay Metric for On- Chip RLC Interconnect for Ramp i...Coupling Aware Explicit Delay Metric for On- Chip RLC Interconnect for Ramp i...
Coupling Aware Explicit Delay Metric for On- Chip RLC Interconnect for Ramp i...
 
Incremental Difference as Feature for Lipreading
Incremental Difference as Feature for LipreadingIncremental Difference as Feature for Lipreading
Incremental Difference as Feature for Lipreading
 
An Optimized Transform for ECG Signal Compression
An Optimized Transform for ECG Signal CompressionAn Optimized Transform for ECG Signal Compression
An Optimized Transform for ECG Signal Compression
 
Dynamic Concept Drift Detection for Spam Email Filtering
Dynamic Concept Drift Detection for Spam Email FilteringDynamic Concept Drift Detection for Spam Email Filtering
Dynamic Concept Drift Detection for Spam Email Filtering
 
3D Visual Integration of Spatio-Temporal Gene Expression Patterns on Digital ...
3D Visual Integration of Spatio-Temporal Gene Expression Patterns on Digital ...3D Visual Integration of Spatio-Temporal Gene Expression Patterns on Digital ...
3D Visual Integration of Spatio-Temporal Gene Expression Patterns on Digital ...
 
Two Different Approaches for NGOSS Process Modeling and Simulation
Two Different Approaches for NGOSS Process Modeling and SimulationTwo Different Approaches for NGOSS Process Modeling and Simulation
Two Different Approaches for NGOSS Process Modeling and Simulation
 
Cross Lingual Information Retrieval Using Search Engine and Data Mining
Cross Lingual Information Retrieval Using Search Engine and Data MiningCross Lingual Information Retrieval Using Search Engine and Data Mining
Cross Lingual Information Retrieval Using Search Engine and Data Mining
 
A Novel Scheme for Mutual Authentication and Cheating Prevention in Visual Cr...
A Novel Scheme for Mutual Authentication and Cheating Prevention in Visual Cr...A Novel Scheme for Mutual Authentication and Cheating Prevention in Visual Cr...
A Novel Scheme for Mutual Authentication and Cheating Prevention in Visual Cr...
 
Marathi Isolated Word Recognition System using MFCC and DTW Features
Marathi Isolated Word Recognition System using MFCC and DTW FeaturesMarathi Isolated Word Recognition System using MFCC and DTW Features
Marathi Isolated Word Recognition System using MFCC and DTW Features
 
Hierarchical prediction and context adaptive coding for lossless color image ...
Hierarchical prediction and context adaptive coding for lossless color image ...Hierarchical prediction and context adaptive coding for lossless color image ...
Hierarchical prediction and context adaptive coding for lossless color image ...
 

Similar to Fluent Interfaces

IRJET- Deep Web Searching (DWS)
IRJET- Deep Web Searching (DWS)IRJET- Deep Web Searching (DWS)
IRJET- Deep Web Searching (DWS)IRJET Journal
 
Architecting for Change: An Agile Approach
Architecting for Change: An Agile ApproachArchitecting for Change: An Agile Approach
Architecting for Change: An Agile ApproachBen Stopford
 
REST-style Actionscript programming interface for message distribution using ...
REST-style Actionscript programming interface for message distribution using ...REST-style Actionscript programming interface for message distribution using ...
REST-style Actionscript programming interface for message distribution using ...Kresimir Popovic
 
How to choose the right software
How to choose the right softwareHow to choose the right software
How to choose the right softwareRüdiger Gros
 
miniprojectreport
miniprojectreportminiprojectreport
miniprojectreportsilpa mohan
 
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"GlobalLogic Ukraine
 
From Components To Services
From Components To ServicesFrom Components To Services
From Components To ServicesJames Phillips
 
IRJET- Voice to Code Editor using Speech Recognition
IRJET- Voice to Code Editor using Speech RecognitionIRJET- Voice to Code Editor using Speech Recognition
IRJET- Voice to Code Editor using Speech RecognitionIRJET Journal
 
The Architecture Of Software Defined Radios Essay
The Architecture Of Software Defined Radios EssayThe Architecture Of Software Defined Radios Essay
The Architecture Of Software Defined Radios EssayDivya Watson
 
Product! - The road to production deployment
Product! - The road to production deploymentProduct! - The road to production deployment
Product! - The road to production deploymentFilippo Zanella
 
netsuite-integration-whitepaper
netsuite-integration-whitepapernetsuite-integration-whitepaper
netsuite-integration-whitepaperOlivier Gagnon
 
01. mulesoft basics
01. mulesoft basics01. mulesoft basics
01. mulesoft basicsvenkata20k
 
Automated Java Code Generation (ICDIM 2006)
Automated Java Code Generation (ICDIM 2006)Automated Java Code Generation (ICDIM 2006)
Automated Java Code Generation (ICDIM 2006)IT Industry
 
Enterprise Application integration (middleware) concepts
Enterprise Application integration (middleware) conceptsEnterprise Application integration (middleware) concepts
Enterprise Application integration (middleware) conceptsShantanu Thakre
 
Exploring MERN Stack and Tech Stacks: A Comparative Analysis
Exploring MERN Stack and Tech Stacks: A Comparative AnalysisExploring MERN Stack and Tech Stacks: A Comparative Analysis
Exploring MERN Stack and Tech Stacks: A Comparative AnalysisIRJET Journal
 

Similar to Fluent Interfaces (20)

IRJET- Deep Web Searching (DWS)
IRJET- Deep Web Searching (DWS)IRJET- Deep Web Searching (DWS)
IRJET- Deep Web Searching (DWS)
 
Architecting for Change: An Agile Approach
Architecting for Change: An Agile ApproachArchitecting for Change: An Agile Approach
Architecting for Change: An Agile Approach
 
REST-style Actionscript programming interface for message distribution using ...
REST-style Actionscript programming interface for message distribution using ...REST-style Actionscript programming interface for message distribution using ...
REST-style Actionscript programming interface for message distribution using ...
 
How to choose the right software
How to choose the right softwareHow to choose the right software
How to choose the right software
 
miniprojectreport
miniprojectreportminiprojectreport
miniprojectreport
 
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
 
Middleware Technologies ppt
Middleware Technologies pptMiddleware Technologies ppt
Middleware Technologies ppt
 
Aq4301224227
Aq4301224227Aq4301224227
Aq4301224227
 
From Components To Services
From Components To ServicesFrom Components To Services
From Components To Services
 
DDD
DDDDDD
DDD
 
IRJET- Voice to Code Editor using Speech Recognition
IRJET- Voice to Code Editor using Speech RecognitionIRJET- Voice to Code Editor using Speech Recognition
IRJET- Voice to Code Editor using Speech Recognition
 
The Architecture Of Software Defined Radios Essay
The Architecture Of Software Defined Radios EssayThe Architecture Of Software Defined Radios Essay
The Architecture Of Software Defined Radios Essay
 
Product! - The road to production deployment
Product! - The road to production deploymentProduct! - The road to production deployment
Product! - The road to production deployment
 
netsuite-integration-whitepaper
netsuite-integration-whitepapernetsuite-integration-whitepaper
netsuite-integration-whitepaper
 
Open Digital Framework from TMFORUM
Open Digital Framework from TMFORUMOpen Digital Framework from TMFORUM
Open Digital Framework from TMFORUM
 
01. mulesoft basics
01. mulesoft basics01. mulesoft basics
01. mulesoft basics
 
Automated Java Code Generation (ICDIM 2006)
Automated Java Code Generation (ICDIM 2006)Automated Java Code Generation (ICDIM 2006)
Automated Java Code Generation (ICDIM 2006)
 
Teamwork Presentation
Teamwork PresentationTeamwork Presentation
Teamwork Presentation
 
Enterprise Application integration (middleware) concepts
Enterprise Application integration (middleware) conceptsEnterprise Application integration (middleware) concepts
Enterprise Application integration (middleware) concepts
 
Exploring MERN Stack and Tech Stacks: A Comparative Analysis
Exploring MERN Stack and Tech Stacks: A Comparative AnalysisExploring MERN Stack and Tech Stacks: A Comparative Analysis
Exploring MERN Stack and Tech Stacks: A Comparative Analysis
 

More from IDES Editor

Power System State Estimation - A Review
Power System State Estimation - A ReviewPower System State Estimation - A Review
Power System State Estimation - A ReviewIDES Editor
 
Artificial Intelligence Technique based Reactive Power Planning Incorporating...
Artificial Intelligence Technique based Reactive Power Planning Incorporating...Artificial Intelligence Technique based Reactive Power Planning Incorporating...
Artificial Intelligence Technique based Reactive Power Planning Incorporating...IDES Editor
 
Design and Performance Analysis of Genetic based PID-PSS with SVC in a Multi-...
Design and Performance Analysis of Genetic based PID-PSS with SVC in a Multi-...Design and Performance Analysis of Genetic based PID-PSS with SVC in a Multi-...
Design and Performance Analysis of Genetic based PID-PSS with SVC in a Multi-...IDES Editor
 
Optimal Placement of DG for Loss Reduction and Voltage Sag Mitigation in Radi...
Optimal Placement of DG for Loss Reduction and Voltage Sag Mitigation in Radi...Optimal Placement of DG for Loss Reduction and Voltage Sag Mitigation in Radi...
Optimal Placement of DG for Loss Reduction and Voltage Sag Mitigation in Radi...IDES Editor
 
Line Losses in the 14-Bus Power System Network using UPFC
Line Losses in the 14-Bus Power System Network using UPFCLine Losses in the 14-Bus Power System Network using UPFC
Line Losses in the 14-Bus Power System Network using UPFCIDES Editor
 
Study of Structural Behaviour of Gravity Dam with Various Features of Gallery...
Study of Structural Behaviour of Gravity Dam with Various Features of Gallery...Study of Structural Behaviour of Gravity Dam with Various Features of Gallery...
Study of Structural Behaviour of Gravity Dam with Various Features of Gallery...IDES Editor
 
Assessing Uncertainty of Pushover Analysis to Geometric Modeling
Assessing Uncertainty of Pushover Analysis to Geometric ModelingAssessing Uncertainty of Pushover Analysis to Geometric Modeling
Assessing Uncertainty of Pushover Analysis to Geometric ModelingIDES Editor
 
Secure Multi-Party Negotiation: An Analysis for Electronic Payments in Mobile...
Secure Multi-Party Negotiation: An Analysis for Electronic Payments in Mobile...Secure Multi-Party Negotiation: An Analysis for Electronic Payments in Mobile...
Secure Multi-Party Negotiation: An Analysis for Electronic Payments in Mobile...IDES Editor
 
Selfish Node Isolation & Incentivation using Progressive Thresholds
Selfish Node Isolation & Incentivation using Progressive ThresholdsSelfish Node Isolation & Incentivation using Progressive Thresholds
Selfish Node Isolation & Incentivation using Progressive ThresholdsIDES Editor
 
Various OSI Layer Attacks and Countermeasure to Enhance the Performance of WS...
Various OSI Layer Attacks and Countermeasure to Enhance the Performance of WS...Various OSI Layer Attacks and Countermeasure to Enhance the Performance of WS...
Various OSI Layer Attacks and Countermeasure to Enhance the Performance of WS...IDES Editor
 
Responsive Parameter based an AntiWorm Approach to Prevent Wormhole Attack in...
Responsive Parameter based an AntiWorm Approach to Prevent Wormhole Attack in...Responsive Parameter based an AntiWorm Approach to Prevent Wormhole Attack in...
Responsive Parameter based an AntiWorm Approach to Prevent Wormhole Attack in...IDES Editor
 
Cloud Security and Data Integrity with Client Accountability Framework
Cloud Security and Data Integrity with Client Accountability FrameworkCloud Security and Data Integrity with Client Accountability Framework
Cloud Security and Data Integrity with Client Accountability FrameworkIDES Editor
 
Genetic Algorithm based Layered Detection and Defense of HTTP Botnet
Genetic Algorithm based Layered Detection and Defense of HTTP BotnetGenetic Algorithm based Layered Detection and Defense of HTTP Botnet
Genetic Algorithm based Layered Detection and Defense of HTTP BotnetIDES Editor
 
Enhancing Data Storage Security in Cloud Computing Through Steganography
Enhancing Data Storage Security in Cloud Computing Through SteganographyEnhancing Data Storage Security in Cloud Computing Through Steganography
Enhancing Data Storage Security in Cloud Computing Through SteganographyIDES Editor
 
Low Energy Routing for WSN’s
Low Energy Routing for WSN’sLow Energy Routing for WSN’s
Low Energy Routing for WSN’sIDES Editor
 
Permutation of Pixels within the Shares of Visual Cryptography using KBRP for...
Permutation of Pixels within the Shares of Visual Cryptography using KBRP for...Permutation of Pixels within the Shares of Visual Cryptography using KBRP for...
Permutation of Pixels within the Shares of Visual Cryptography using KBRP for...IDES Editor
 
Rotman Lens Performance Analysis
Rotman Lens Performance AnalysisRotman Lens Performance Analysis
Rotman Lens Performance AnalysisIDES Editor
 
Band Clustering for the Lossless Compression of AVIRIS Hyperspectral Images
Band Clustering for the Lossless Compression of AVIRIS Hyperspectral ImagesBand Clustering for the Lossless Compression of AVIRIS Hyperspectral Images
Band Clustering for the Lossless Compression of AVIRIS Hyperspectral ImagesIDES Editor
 
Microelectronic Circuit Analogous to Hydrogen Bonding Network in Active Site ...
Microelectronic Circuit Analogous to Hydrogen Bonding Network in Active Site ...Microelectronic Circuit Analogous to Hydrogen Bonding Network in Active Site ...
Microelectronic Circuit Analogous to Hydrogen Bonding Network in Active Site ...IDES Editor
 
Texture Unit based Monocular Real-world Scene Classification using SOM and KN...
Texture Unit based Monocular Real-world Scene Classification using SOM and KN...Texture Unit based Monocular Real-world Scene Classification using SOM and KN...
Texture Unit based Monocular Real-world Scene Classification using SOM and KN...IDES Editor
 

More from IDES Editor (20)

Power System State Estimation - A Review
Power System State Estimation - A ReviewPower System State Estimation - A Review
Power System State Estimation - A Review
 
Artificial Intelligence Technique based Reactive Power Planning Incorporating...
Artificial Intelligence Technique based Reactive Power Planning Incorporating...Artificial Intelligence Technique based Reactive Power Planning Incorporating...
Artificial Intelligence Technique based Reactive Power Planning Incorporating...
 
Design and Performance Analysis of Genetic based PID-PSS with SVC in a Multi-...
Design and Performance Analysis of Genetic based PID-PSS with SVC in a Multi-...Design and Performance Analysis of Genetic based PID-PSS with SVC in a Multi-...
Design and Performance Analysis of Genetic based PID-PSS with SVC in a Multi-...
 
Optimal Placement of DG for Loss Reduction and Voltage Sag Mitigation in Radi...
Optimal Placement of DG for Loss Reduction and Voltage Sag Mitigation in Radi...Optimal Placement of DG for Loss Reduction and Voltage Sag Mitigation in Radi...
Optimal Placement of DG for Loss Reduction and Voltage Sag Mitigation in Radi...
 
Line Losses in the 14-Bus Power System Network using UPFC
Line Losses in the 14-Bus Power System Network using UPFCLine Losses in the 14-Bus Power System Network using UPFC
Line Losses in the 14-Bus Power System Network using UPFC
 
Study of Structural Behaviour of Gravity Dam with Various Features of Gallery...
Study of Structural Behaviour of Gravity Dam with Various Features of Gallery...Study of Structural Behaviour of Gravity Dam with Various Features of Gallery...
Study of Structural Behaviour of Gravity Dam with Various Features of Gallery...
 
Assessing Uncertainty of Pushover Analysis to Geometric Modeling
Assessing Uncertainty of Pushover Analysis to Geometric ModelingAssessing Uncertainty of Pushover Analysis to Geometric Modeling
Assessing Uncertainty of Pushover Analysis to Geometric Modeling
 
Secure Multi-Party Negotiation: An Analysis for Electronic Payments in Mobile...
Secure Multi-Party Negotiation: An Analysis for Electronic Payments in Mobile...Secure Multi-Party Negotiation: An Analysis for Electronic Payments in Mobile...
Secure Multi-Party Negotiation: An Analysis for Electronic Payments in Mobile...
 
Selfish Node Isolation & Incentivation using Progressive Thresholds
Selfish Node Isolation & Incentivation using Progressive ThresholdsSelfish Node Isolation & Incentivation using Progressive Thresholds
Selfish Node Isolation & Incentivation using Progressive Thresholds
 
Various OSI Layer Attacks and Countermeasure to Enhance the Performance of WS...
Various OSI Layer Attacks and Countermeasure to Enhance the Performance of WS...Various OSI Layer Attacks and Countermeasure to Enhance the Performance of WS...
Various OSI Layer Attacks and Countermeasure to Enhance the Performance of WS...
 
Responsive Parameter based an AntiWorm Approach to Prevent Wormhole Attack in...
Responsive Parameter based an AntiWorm Approach to Prevent Wormhole Attack in...Responsive Parameter based an AntiWorm Approach to Prevent Wormhole Attack in...
Responsive Parameter based an AntiWorm Approach to Prevent Wormhole Attack in...
 
Cloud Security and Data Integrity with Client Accountability Framework
Cloud Security and Data Integrity with Client Accountability FrameworkCloud Security and Data Integrity with Client Accountability Framework
Cloud Security and Data Integrity with Client Accountability Framework
 
Genetic Algorithm based Layered Detection and Defense of HTTP Botnet
Genetic Algorithm based Layered Detection and Defense of HTTP BotnetGenetic Algorithm based Layered Detection and Defense of HTTP Botnet
Genetic Algorithm based Layered Detection and Defense of HTTP Botnet
 
Enhancing Data Storage Security in Cloud Computing Through Steganography
Enhancing Data Storage Security in Cloud Computing Through SteganographyEnhancing Data Storage Security in Cloud Computing Through Steganography
Enhancing Data Storage Security in Cloud Computing Through Steganography
 
Low Energy Routing for WSN’s
Low Energy Routing for WSN’sLow Energy Routing for WSN’s
Low Energy Routing for WSN’s
 
Permutation of Pixels within the Shares of Visual Cryptography using KBRP for...
Permutation of Pixels within the Shares of Visual Cryptography using KBRP for...Permutation of Pixels within the Shares of Visual Cryptography using KBRP for...
Permutation of Pixels within the Shares of Visual Cryptography using KBRP for...
 
Rotman Lens Performance Analysis
Rotman Lens Performance AnalysisRotman Lens Performance Analysis
Rotman Lens Performance Analysis
 
Band Clustering for the Lossless Compression of AVIRIS Hyperspectral Images
Band Clustering for the Lossless Compression of AVIRIS Hyperspectral ImagesBand Clustering for the Lossless Compression of AVIRIS Hyperspectral Images
Band Clustering for the Lossless Compression of AVIRIS Hyperspectral Images
 
Microelectronic Circuit Analogous to Hydrogen Bonding Network in Active Site ...
Microelectronic Circuit Analogous to Hydrogen Bonding Network in Active Site ...Microelectronic Circuit Analogous to Hydrogen Bonding Network in Active Site ...
Microelectronic Circuit Analogous to Hydrogen Bonding Network in Active Site ...
 
Texture Unit based Monocular Real-world Scene Classification using SOM and KN...
Texture Unit based Monocular Real-world Scene Classification using SOM and KN...Texture Unit based Monocular Real-world Scene Classification using SOM and KN...
Texture Unit based Monocular Real-world Scene Classification using SOM and KN...
 

Recently uploaded

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 

Recently uploaded (20)

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 

Fluent Interfaces

  • 1. ACEEE Int. J. on Information Technology, Vol. 01, No. 02, Sep 2011 Fluent Interfaces Shushobhickae Singh, Chitrangada Nemani NMIMS-MPSTME, Mumbai, India Email: {shushobhickae, chitrangada.nmims}@gmail.com Abstract— Modern Enterprise Software Systems entail many and re-designing for using them. Consider the case of Java challenges such as rapidly changing business scenario, which has been there, for almost 15 years. Enterprises have increase in complexity, and shorter time to market and been extensively using it for almost a decade. This has providing business agility without compromising on the resulted in the creation of whole bunch of APIs, that instead quality. Ensuring productivity, quality, consistency, cost of leveraging existing APIs, we tend to create new ones to effective, reduced cycle time have become a mandate for the avoid the pain of understanding them. This increase in teams dealing with modern enterprise software systems. Fluent Interfaces is a powerful technique, which help in complexity, adds to the difficulties of developing software as taming the programming complexities, reducing boilerplate well as testing, maintaining and enhancing them. This overall code, increasing the quality and thereby improving the brings down the PQC factor viz. Productivity, Quality and productivity and cycle time. In this paper we will describe Consistency as well as increases the complexity, cost and some of our explorations in Fluent Interfaces and why we feel time to market / value. It therefore becomes difficult for the notion of Fluent Interfaces is a useful technique for enterprise software systems to sustain, evolve or innovate. enterprise software system. We are currently focusing on two Fluent Interfaces are a lighter version of Domain Specific things – a technique for determining fluency of an API and Languages which help in overcoming these problems. They secondly a methodology for designing a fluent interface. We help in re-designing APIs to elevate the level of abstraction will also share some of the benefits and limitations that we observed during our experimentation. We conclude this paper and making them succinct and easy to use. with a note on the current work that we are doing and the future directions. II. FLUENT INTERFACES Fluent Interfaces (first coined by Martin Fowler and Eric Key Words – Fluent Interfaces, Enterprise Software Systems, Application Programmable Interface (API). Domain Specific Evans) help in transforming an object oriented API to be Languages. more readable, concise, easy to understand and easy to use. They help in developing software which hides the technical I. MODERN ENTERPRISE SOFTWARE SYSTEMS AND ITS complexities and is aligned to the domain. This makes it CHALLENGES feasible for non-programmers to understand the context. There has been a wide gap between problem domain and the The Modern Enterprise Software Systems are growing solution domain as most of the time it is difficult to make out beyond the boundaries of silo-ed enterprise applications to the problem due to lengthy and complicated software. Thus meet the requirements of rapidly changing markets. They are this high level of abstraction helps in increase the getting integrated within and across the enterprises thereby productivity, maintainability by bridging the gap between metamorphosing into huge ecosystems. This has resulted business logic and its development. The cost of adding into immense complexity, which seems to be ever fluency demands more effort, both in terms of developing increasing.The complexity of Enterprise Software Systems and refining it. Making a fluent API involves lot of thought can be split in a two-dimensional way. The first aspect is the process but the outcome of this investment is worthwhile. domain in which the software is operating in. The other is the Fluent Interface is also often called an internal DSL, since the technology, using which we build the solution. Domain has syntax resembles that of a DSL and it is implemented inside to be treated as an essential complexity, which we cannot the host language instead of being processed by a parser. avoid. On the other hand, technical complexity is something Fluent Interface allows us to develop software which is: which we can look into. Today the need of the hour is to  More readable and clean. bring the technical complexity down there by improving the  Can be written easily and in shorter period of time. – productivity, quality, reduce complexity, lesser learning  Is more concise and succinct for usage curve, and reduced cycle time, which are the mandates for  Easily understandable due to meaningful names any enterprise software system. By saving efforts on the  Avoids redundancies in code, thereby making the technology side we can invest them into domain, there by code crisper. addressing the business needs in a better and timely manner. Thus, fluent interfaces provide mechanism to develop Having a good camaraderie between domain and technology, software where we can readily see the idiomatic patterns, helps us to communicate better with different stake holders which we may have earlier found it difficult to identify. They which reduces the communication gap and helps in meeting also force us to change our perspective on code - it should the business demands. Application Programmable Interfaces not be merely functional but also readable, especially if non (APIs) seem to be common IT person’s technique for developers need to consume any aspect of it. Fluent interfaces interacting with different components of a software system. help in removing unnecessary noise from the software. The usual APIs have lot of bloated code, need refactoring 19 © 2011 ACEEE DOI: 01.IJIT.01.02.186
  • 2. ACEEE Int. J. on Information Technology, Vol. 01, No. 02, Sep 2011 III.EXAMPLES OF FLUENT INTERFACES just an auxiliary code for converting and filtering a list of String dates and it has turned into a lot of complex and hard- In this section, with the help of an example we will see in to-understand code, probably bigger and uglier than the detail the effectiveness of using Fluent Interfaces. Apart from application logic that might surround it. We use Op4j for the this, we have also included a list of the prominent examples same scenario. It is a Java library aimed at improving quality, which are utilizing Fluent Interfaces. semantics, cleanness and readability of Java code, especially A. Using Op4j operation expression auxiliary code like data conversion, structure iteration, Consider a scenario where we have to convert a list into filtering, mapping, etc. It allows us to create chained an ordered set. The list comprises of Strings which are dates expressions which apply both predefined and user-defined in the DD/MM/YYYY format. Following are the conditions functions to the objects in a fluid and readable way. This that need to be added: improves the way the code looks and greatly reduces the Convert them into java.util.calendar objects. complexity of executing auxiliary low-level tasks in the highly As some of the strings can be null, so we need to remove bureaucratic, statically -and strongly- typed language that them before executing the conversion. Java is. Also we do not want to include dates in future. Using “normal” Java code, we can implement the scenario in the following manner: In the above code, “Op.on(list).toSet()”, converts the list into an ordered set. “map” operation helps the tasks to be executed in an iterative manner. “removeAllNullOrTrue”, removes the Strings which are null before they get processed. It also removes cases where the date is greated than the current calendar date by using the function “FnCalendar.after(now)”. Thus the above code is crisp, precise and clean as well as readable achieving the same functionality as the “normal” java code which was written earlier. The number of lines of codes look immensely reduced and thereby it becomes easy to manage. Like Op4J there are many more libraries which have Fluent Interface implementation. B. Some more examples Following table shows some examples in the field of Fluent Interfaces. We first get the current calendar date in line (1). The data format is set to DD/MM/YYYY format in line (2). The list is converted to an ordered set in line (3). We then iterate through the list of Strings. If the element i.e. the String is null we do not do any operation and go for the next element. If the String is not empty then we go ahead and parse the element as shown in line (4). We then get the date in a calendar format as shown in line (5). We compare this calendar date with the current date. If it is not beyond the current date then we add it to the set as shown in line (6). Overall, this code is less readable, lengthy and takes more time for execution. This is 20 © 2011 ACEEE DOI: 01.IJIT.01.02.186
  • 3. ACEEE Int. J. on Information Technology, Vol. 01, No. 02, Sep 2011 More and more frameworks, toolkits and libraries are using Following are the standard methods for adding fluency to Fluent Interfaces. The rush for fluent interfaces is not limited an API are: to Java, but is also getting widely spread across other 1. Method Chaining – This is the most popular way of technologies like C#, dotNet, php, JavaScript etc. Based on implementing fluent interface. A function always returns some the examples provided above, the sprawl of Fluent Interfaces object that allows for further calls to be made. Example: seems to be spreading across different areas of Enterprises as well as different technologies. Currently we are engaged in identifying some more examples of fluent interfaces to understand their impact on enterprise software systems. IV. METHODOLOGY FOR DETERMINING EXTENT OF FLUENCY AND DESIGNING FLUENT INTERFACES Fluent interfaces are a powerful technique to tame the Here an object of class HardDrive is created by chaining complexity of modern software systems. It can be applied to methods: capacity, external, speed. APIs which are being heavily used. Fluency can be 2. Factory Classes - Provides methods to manufacture the accomplished only after several polishing efforts of the API instances required. It is used in cases where there is a need in concern. Identifying the degree of fluency or designing a to build up series of related objects. Example: fluent interface is not a standard mechanical process but it needs to evolve with usage. Currently, we are exploring some more implementations of fluent interfaces to identify a generic approach for determining the degree of fluency in an API. Based on the explorations that we have done so far, we have come up with a list of characteristics which will help us to determine whether an API is fluent enough or not:  The API needs to be verbose enough to depict the functionality that is assigned.  The software has to be clear enough so that even non- programmers can understand the logic. There should be no repeated patterns occurring across the software else they will have to be segregated out.  The software should have sufficient modularity so that there is proper separation of concerns. There should be no language restrictions or barriers for using techniques like method chaining etc. Here, “fromCartesian(a,b)” and “fromPolar(a,b)” are factory The software should be succinct enough and there should methods of factory class “Complex”. Factory methods are be no further ways of reducing the lines of code. used for disambiguation If all these characteristics are taken care then the degree of fluency should be high. In case if the APIs are not fluent they can be made fluent using the following mechanisms: Have thorough understanding of the API which needs to be made fluent. The API should have been heavily used to understand the problem areas. Identify the gaps or areas in an API which can be good candidates for applying fluency. Select a method or combination of methods for making the API fluent - Method Chaining, Named Parameters and Factory Classes. 3. Named Parameters - It clearly states the name of each Provide meaningful names to functions and parameters so parameter within the function call itself. It provides a way to that they are in sync with the domain they are associated include additional “syntax” in a method call thereby improv- with. ing the readability. Example:  In order to make the code more readable and comprehendible, define new functions with names like on, V. BENEFITS AND LIMITATIONS having, of, for, etc. Decide the order in which each function will be called and Fluent Interfaces, aim at bringing down the complexity in the return parameters, so that it becomes a meaningful software making it more readable, manageable and economical transaction. thus meeting the targets of PQC. It needs to be noted that Fluent Interfaces are not a silver bullet or panicky enough that it will work in all scenarios. It has been tried and tested 21 © 2011 ACEEE DOI: 01.IJIT.01.02.186
  • 4. ACEEE Int. J. on Information Technology, Vol. 01, No. 02, Sep 2011 and works well in many cases. Thus we should make a ACKNOWLEDGMENT conscious decision while going for designing fluent interfaces. The work reported here was carried out under the aegis Some of the key benefits of using Fluent Interfaces are: of Innovation Research Lab (IRL) at Patni Computer Systems, It is more readable and easy to understand. It elevates the under the guidance of Sunil Joglekar, Senior Technical level of abstraction and thereby hides the complexities from Architect and A.Nagalakshmi, Manager (Software). the user, thus making it succinct to use.  It ensures concise code and avoids redundancies. This REFERENCES helps in saving efforts, which improves the productivity figures and helps in achieving time to market. [1] DSL by Martin Fowler (http://www.martinfowler.com/bliki/  Focuses on making the language ubiquitous from non- DomainSpecificLanguage.html). programmer’s point of view. This helps in avoiding too many [2]DSL wiki (http://en.wikipedia.org/wiki/Domain- feedback sessions with different stakeholders thus narrowing specific_language) [3]Method Chaining (http://martinfowler.com/dslwip/ the communication gaps. MethodChaining.html). Ease of usage and understanding helps in bringing down [4]Method Chaining (http://stackoverflow.com/questions/293353/ the efforts involved in development, testing, maintenance fluent-interfaces-method-chaining) and enhancement which in all lowers the overall cost of the [5]Factory Pattern (http://en.wikipedia.org/wiki/ enterprise software system. Factory_method_pattern) Though the benefits of Fluent Interfaces are high but making [6]Named Parameters (http://en.wikipedia.org/wiki/ an API fluent is a difficult and time taking exercise. Following Named_parameter). are some of the limitations of developing Fluent Interfaces. [7]Lamdaj (http://code.google.com/p/lambdaj/) Identifying the exact problem areas and gaps in an API. [8]Op4j (http://www.op4j.org/basics.html) [9]Joda-Time (http://joda-time.sourceforge.net/) In order to make an API Fluent, we need to have lots of [10]JMock (http://www.jmock.org/) iterations to ensure the solution is proper and effective. [11]Fluent nHibernate (http://wiki.fluentnhibernate.org/ Having lots of iterations needs additional efforts and time, Getting_started) which increases the overall cost. [12]Java Persistent API (http://en.wikipedia.org/wiki/  Coming up with domain flavor for naming convention Java_Persistence_API) requires good understanding of the domain itself. ABOUT THE AUTHORS VI. FURTHER WORK Given the observation that Fluent Interfaces are spreading Shushobhickae Singh is a student of B.E rapidly in enterprise software systems, we are planning to (Computer Science) final year from NMIMS- explore some more Fluent APIs. As a part of our early MPSTME, Mumbai. She has carried out the work on Fluent Interfaces in Patni Computer Systems, experiments, we have designed fluent interfaces using Dasein as a part of the partial fulfillment of Bachelor of Cloud API. The sprawl of Fluent Interfaces can be seen from Engineering degree. their usage in areas as common as collections to emerging technologies like cloud APIs. Implementing Fluent Interfaces Chitrangada Nemani is a student of B.E (Infor- demands heavy usage of API and lot of iterations for finding mation Technology) final year from NMIMS- the right fluency. Thus it requires a systematic approach for MPSTME, Mumbai. She has carried out the work determining whether a given API is fluent enough or not and on Fluent Interfaces in Patni Computer Systems, also for designing Fluent Interfaces. By method of induction, as a part of the partial fulfillment of Bachelor of Engineering degree. we intent to develop a generic process for determining the fluency of an API and design a methodology for implementing Fluent Interface. Though Fluent Interfaces may be an unstated deliverable but the representative numbers that can be achieved in improving the productivity mandates us to explore this technique further. Fluency can be applied to some of the latest and emerging technologies like Cloud API, Mobile API, Collective intelligence API, REST Interfaces etc. which are becoming very popular. Though our current scope of work is limited to Fluent APIs, but the notion of fluency is creating waves in different programming languages too e.g. FluentJava. The power of fluency seems to be engulfing enterprise software systems and it may not be long when fluent interfaces may become an inherent standard design technique. 22 © 2011 ACEEE DOI: 01.IJIT.01.02.186