SlideShare une entreprise Scribd logo
1  sur  67
Télécharger pour lire hors ligne
Guava Overview. Part 1
  Andrei Savu / Bucharest JUG #1
       asavu @ apache.org
About Me
Owner / Engineer @ Axemblr
Apache Whirr PMC Member
jclouds committer

Worked at Facebook & Adobe
Connect with me on LinkedIn
@ Axemblr
Building a tool and a platform for managing
Apache Hadoop clusters on cloud infrastructure

Think Amazon EMR but for your cloud.

Do you want to join? hello@axemblr.com
Plan
●   Introduction
●   Basic utilities
●   Collections
●   Strings
●   Primitives
●   Next & Questions
Introduction
Open-source version of Google's core Java
libraries

[...] carefully designed, tested, optimized and
used in production at Google

You don't need to write them, test them, or
optimize them: you can just use them.
Introduction (cont)
Battle-tested in production at Google

Staggering numbers of unit tests. >110.000 as
of January 2012 (generated)

Lives near the bottom of the stack, right on top
of the JDK itself
Plan
● Introduction
● Basic utilities
   1.Using and avoiding null
   2.Preconditions
   3.Common object utilities
   4.Ordering
   5.
Using and avoiding null
● careless use of null can cause bugs
● most collections should not contain null
  values (95% @ Google)
● null is ambiguous (e.g. Map.get)

Avoid null by using:
● "null object" pattern (e.g. empty collection)
● null Map entries stored as a Set of null keys
● Guava Optional<T>
Optional<T>
As a replacement for null when used to indicate
some sort of absence

Optional<T> may either contain a non-null
reference to a T instance or nothing.

Optional<Integer> possible = Optional.of(5);
possible.isPresent(); // returns true
possible.get(); // returns 5
Making an Optional
Optional.of(T) - make optional of given non-null
value or fail fast on null

Optional.absent() - return an absent optional of
some type

Optional.fromNullable(T) - turn value in
Optional and treat null as absent
Query methods
boolean isPresent() - true if non-null instance

T get() - instance or IllegalStateException

T or(T) - present value or specified default

T orNull() - inverse fromNullable

Set<T> asSet() - set with single value or empty
Convenience methods
Objects.firstNonNull(T, T) or
NullPointerException if both are null

Strings.emptyToNull(String)
Strings.isNullOrEmpty(String)
Strings.nullToEmpty(String)

" these methods are primarily for interfacing
with unpleasant APIs that equate null strings
and empty strings "
What's the point?
" It forces you to actively think about the absent
case if you want your program to compile at all,
since you have to actively unwrap the Optional
and address that case. "

https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained
Plan
● Introduction
● Basic utilities
   1.Using and avoiding null
   2.Preconditions
   3.Common object utilities
   4.Ordering
   5.
Preconditions
● useful for validation
● recommended to be used as static imports

Each method has three variants:
  ● no extra arguments
  ● an extra object. Exception is obj.toString()
  ● an extra String & Objects. String.format
    like but only allows %s (GWT compat)
checkArgument(boolean)
Throws IllegalArgumentException if false
  Used to validate method arguments
checkNotNull(T)
 Throws NullPointerException if null
Returns the value. Can be used inline.

field = checkNotNull(input, "Message")
checkState(boolean)
Throws IllegalStateException if false
    Used to check object state
checkElementIndex(index,
         size)
Throws IndexOutOfBoundsException
    Interval [0, size) (exclusive)
checkPositionIndex(index,
          size)
Throws IndexOutOfBoundsException
    Interval [0, size] (inclusive)
checkPositionIndexes(start, end, size)
   Throws IndexOutOfBoundsException
 [start, end) is valid sub-range of [0, size]
Plan
● Introduction
● Basic utilities
   1.Using and avoiding null
   2.Preconditions
   3.Common object utilities
   4.Ordering
   5.
Objects.equal(X, Y)
     "a", "a" => true
    null, "a" => false
    "a", null => false
    null, null => true
Objects.hashCode(Object...)
Easy to use, order-sensitive hash function
Objects.toStringHelper
  // Returns "ClassName{x=1}"
   Objects.toStringHelper(this)
           .add("X",1)
            .toString();
ComparisonChain
Helper when implementing Comparator or the
Comparable interface.

return ComparisonChain.start()
         .compare(this.aString, that.aString)
         .compare(this.anInt, that.anInt)
         .compare(this.anEnum, that.anEnum,
                    Ordering.natural().nullsLast())
         .result();

Has a lazy behaviour.
Plan
● Introduction
● Basic utilities
   1.Using and avoiding null
   2.Preconditions
   3.Common object utilities
   4.Ordering
   5.
Ordering Overview
Guava's "fluent" Comparator class.

Quick example:
Ordering: Creation
Using static factory methods:
● natural()
● usingToString()
● arbitrary() (constant for the life of the VM)
● from(Comparator)
Ordering: Creation (cont)
Or by extending the abstract class:
Ordering: Manipulation
" A given Ordering can be modified to obtain
many other useful derived orderings "

Common: reverse(), nullsFirst(), nullsLast(),
lexicographical(), onResultOf(Function)
Ordering: Application
or how to apply to values and collections.

Common: greatestOf(it, k), leastOf(...),
isOrdered(it), isStrictlyOrdered(it), sortedCopy
(it), min(E... or iterable), max(E... or iterable)
Plan
● Introduction
● Basic utilities
● Collections
     Immutable Collections
     New types
     Collection Utilities
     Extension Utilities
Example
Why immutable?
●   safe for use by untrusted libraries
●   thread-safe
●   more efficient, time & space (analysis)
●   can be used as a constant
How?
Immutable** can be created in several ways:
● copyOf(T) e.g. ImmutableSet.copyOf(set)
● of(elements) e.g. ImmutableMap.of("a", "b")
● using a Builder




All collections support asList (const. time view)
Plan
● Introduction
● Basic utilities
● Collections
     Immutable Collections
     New types
     Collection Utilities
     Extension Utilities
Multiset
Multiset Operations
count(E), add(E, int), remove(E, int), setCount
(E, int), size()

elementSet() - distinct elements as set
entrySet() - similar to Map.entrySet() returns
Set<Multiset.Entry<E>>, supports getElement()
and getCount()
Multiset Implementations
HashMultiset
TreeMultiset
LinkedHashMultiset
ConcurrentHashMultiset
ImmutableMultiset
SortedMultiset
Variation of Multiset that supports efficiently
taking sub-multisets on specified ranges.

latencies.subMultiset(0, BoundType.CLOSED,
100, BoundType.OPEN).size()
Multimap
ListMultimap & SetMultimap

Map<String, List<T>> & Map<String, Set<T>>

Operations: put(K, V), putAll(K, Iterable<V>),
remove(K, V), removeAll(K, Iterable<V>),
replaceValues(K, Iterable<V>)
Multimap Implementations
BiMap
BiMap<K, V> is Map<K,V> with unique values

Operations: all Map, inverse(), values() as Set

Throws an IllegalArgumentException if you
attempt to map a key to an already-present
value
BiMap Implementations
Table
Plan
● Introduction
● Basic utilities
● Collections
     Immutable Collections
     New types
     Collection Utilities
     Extension Utilities
Iterables & FluentIterable (Guava 12)




http://docs.guava-libraries.googlecode.com/git-
history/release12/javadoc/com/google/common/collect/FluentIterable.html

http://docs.guava-libraries.googlecode.com/git-
history/release/javadoc/com/google/common/collect/Iterables.html
Plan
● Introduction
● Basic utilities
● Collections
     Immutable Collections
     New types
     Collection Utilities
     Extension Utilities
       as ways of extending the collections framework
Forwarding Decorators
Peeking Iterator
as an iterator that supports peek()

Remove consecutive duplicates:
Abstract Iterator
Plan
●   Introduction
●   Basic utilities
●   Collections
●   Strings
Joiner




     thread-safe & immutable
Splitter
CharMatcher
Types of CharMatchers
Charsets
"Charsets provides constant references to the
six standard Charset implementations
guaranteed to be supported by all Java
platform implementations."

bytes = string.getBytes(Charsets.UTF_8);
CaseFormat
Plan
●   Introduction
●   Basic utilities
●   Collections
●   Strings
●   Primitives
Array Utilities
List<Wrapper> asList(prim... backingArray)
prim[] toArray(Collection<Wrapper> collection)
prim[] concat(prim[]... arrays)
boolean contains(prim[] array, prim target)
int indexOf(prim[] array, prim target)
int lastIndexOf(prim[] array, prim target)
prim min(prim... array)
prim max(prim... array)
String join(String separator, prim... array)
Next edition?
Caches
Functional Idioms
Concurrency
Ranges
I/O
Hashing
EventBus
Math
Reflection
Thanks! Questions?
Andrei Savu / asavu @ apache.org

Contenu connexe

Tendances

Lecture11 standard template-library
Lecture11 standard template-libraryLecture11 standard template-library
Lecture11 standard template-library
Hariz Mustafa
 

Tendances (20)

Effective Java - Generics
Effective Java - GenericsEffective Java - Generics
Effective Java - Generics
 
On Parameterised Types and Java Generics
On Parameterised Types and Java GenericsOn Parameterised Types and Java Generics
On Parameterised Types and Java Generics
 
Rethink programming: a functional approach
Rethink programming: a functional approachRethink programming: a functional approach
Rethink programming: a functional approach
 
Java Generics
Java GenericsJava Generics
Java Generics
 
Functional programming ii
Functional programming iiFunctional programming ii
Functional programming ii
 
5-minute intro to property-based testing in Python with hypothesis
5-minute intro to property-based testing in Python with hypothesis5-minute intro to property-based testing in Python with hypothesis
5-minute intro to property-based testing in Python with hypothesis
 
Java Script Workshop
Java Script WorkshopJava Script Workshop
Java Script Workshop
 
Twins: Object Oriented Programming and Functional Programming
Twins: Object Oriented Programming and Functional ProgrammingTwins: Object Oriented Programming and Functional Programming
Twins: Object Oriented Programming and Functional Programming
 
O caml2014 leroy-slides
O caml2014 leroy-slidesO caml2014 leroy-slides
O caml2014 leroy-slides
 
Scala Collections : Java 8 on Steroids
Scala Collections : Java 8 on SteroidsScala Collections : Java 8 on Steroids
Scala Collections : Java 8 on Steroids
 
Functional programming
Functional programmingFunctional programming
Functional programming
 
Nalinee java
Nalinee javaNalinee java
Nalinee java
 
Generic Programming
Generic ProgrammingGeneric Programming
Generic Programming
 
Refactoring to Immutability
Refactoring to ImmutabilityRefactoring to Immutability
Refactoring to Immutability
 
Lecture11 standard template-library
Lecture11 standard template-libraryLecture11 standard template-library
Lecture11 standard template-library
 
Scala is java8.next()
Scala is java8.next()Scala is java8.next()
Scala is java8.next()
 
Scala collections api expressivity and brevity upgrade from java
Scala collections api  expressivity and brevity upgrade from javaScala collections api  expressivity and brevity upgrade from java
Scala collections api expressivity and brevity upgrade from java
 
Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.
 
Collections Framework
Collections FrameworkCollections Framework
Collections Framework
 
Lec1
Lec1Lec1
Lec1
 

En vedette

En vedette (6)

B.sc. agri i po h unit 4.4 cultivation practices of guava
B.sc. agri i po h unit 4.4 cultivation practices of guavaB.sc. agri i po h unit 4.4 cultivation practices of guava
B.sc. agri i po h unit 4.4 cultivation practices of guava
 
Guava and its prouduction technology
Guava and its prouduction technologyGuava and its prouduction technology
Guava and its prouduction technology
 
Guava diseases ppt
Guava diseases pptGuava diseases ppt
Guava diseases ppt
 
Google Guava
Google GuavaGoogle Guava
Google Guava
 
Meadow orchrad in_guava
Meadow orchrad in_guavaMeadow orchrad in_guava
Meadow orchrad in_guava
 
Guava
GuavaGuava
Guava
 

Similaire à Guava Overview. Part 1 @ Bucharest JUG #1

The core libraries you always wanted - Google Guava
The core libraries you always wanted - Google GuavaThe core libraries you always wanted - Google Guava
The core libraries you always wanted - Google Guava
Mite Mitreski
 

Similaire à Guava Overview. Part 1 @ Bucharest JUG #1 (20)

Scala ntnu
Scala ntnuScala ntnu
Scala ntnu
 
The core libraries you always wanted - Google Guava
The core libraries you always wanted - Google GuavaThe core libraries you always wanted - Google Guava
The core libraries you always wanted - Google Guava
 
C++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptxC++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptx
 
C++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptxC++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptx
 
2. overview of c#
2. overview of c#2. overview of c#
2. overview of c#
 
Google guava overview
Google guava overviewGoogle guava overview
Google guava overview
 
ppopoff
ppopoffppopoff
ppopoff
 
Lazy Java
Lazy JavaLazy Java
Lazy Java
 
Mario Fusco - Lazy Java - Codemotion Milan 2018
Mario Fusco - Lazy Java - Codemotion Milan 2018Mario Fusco - Lazy Java - Codemotion Milan 2018
Mario Fusco - Lazy Java - Codemotion Milan 2018
 
Lazy java
Lazy javaLazy java
Lazy java
 
Lazy Java
Lazy JavaLazy Java
Lazy Java
 
Scala - core features
Scala - core featuresScala - core features
Scala - core features
 
Java Tutorial
Java Tutorial Java Tutorial
Java Tutorial
 
JAVA Tutorial- Do's and Don'ts of Java programming
JAVA Tutorial- Do's and Don'ts of Java programmingJAVA Tutorial- Do's and Don'ts of Java programming
JAVA Tutorial- Do's and Don'ts of Java programming
 
JAVA Tutorial- Do's and Don'ts of Java programming
JAVA Tutorial- Do's and Don'ts of Java programmingJAVA Tutorial- Do's and Don'ts of Java programming
JAVA Tutorial- Do's and Don'ts of Java programming
 
K is for Kotlin
K is for KotlinK is for Kotlin
K is for Kotlin
 
Talk on Standard Template Library
Talk on Standard Template LibraryTalk on Standard Template Library
Talk on Standard Template Library
 
Java tut1
Java tut1Java tut1
Java tut1
 
Tutorial java
Tutorial javaTutorial java
Tutorial java
 
Java Tut1
Java Tut1Java Tut1
Java Tut1
 

Plus de Andrei Savu

Counters with Riak on Amazon EC2 at Hackover
Counters with Riak on Amazon EC2 at HackoverCounters with Riak on Amazon EC2 at Hackover
Counters with Riak on Amazon EC2 at Hackover
Andrei Savu
 
Polyglot Persistence & Big Data in the Cloud
Polyglot Persistence & Big Data in the CloudPolyglot Persistence & Big Data in the Cloud
Polyglot Persistence & Big Data in the Cloud
Andrei Savu
 

Plus de Andrei Savu (20)

The Evolving Landscape of Data Engineering
The Evolving Landscape of Data EngineeringThe Evolving Landscape of Data Engineering
The Evolving Landscape of Data Engineering
 
The Evolving Landscape of Data Engineering
The Evolving Landscape of Data EngineeringThe Evolving Landscape of Data Engineering
The Evolving Landscape of Data Engineering
 
Recap on AWS Lambda after re:Invent 2015
Recap on AWS Lambda after re:Invent 2015Recap on AWS Lambda after re:Invent 2015
Recap on AWS Lambda after re:Invent 2015
 
One Hadoop, Multiple Clouds - NYC Big Data Meetup
One Hadoop, Multiple Clouds - NYC Big Data MeetupOne Hadoop, Multiple Clouds - NYC Big Data Meetup
One Hadoop, Multiple Clouds - NYC Big Data Meetup
 
Introducing Cloudera Director at Big Data Bash
Introducing Cloudera Director at Big Data BashIntroducing Cloudera Director at Big Data Bash
Introducing Cloudera Director at Big Data Bash
 
APIs & Underlying Protocols #APICraftSF
APIs & Underlying Protocols #APICraftSFAPIs & Underlying Protocols #APICraftSF
APIs & Underlying Protocols #APICraftSF
 
Challenges for running Hadoop on AWS - AdvancedAWS Meetup
Challenges for running Hadoop on AWS - AdvancedAWS MeetupChallenges for running Hadoop on AWS - AdvancedAWS Meetup
Challenges for running Hadoop on AWS - AdvancedAWS Meetup
 
Cloud as a Data Platform
Cloud as a Data PlatformCloud as a Data Platform
Cloud as a Data Platform
 
Apache Provisionr (incubating) - Bucharest JUG 10
Apache Provisionr (incubating) - Bucharest JUG 10Apache Provisionr (incubating) - Bucharest JUG 10
Apache Provisionr (incubating) - Bucharest JUG 10
 
Creating pools of Virtual Machines - ApacheCon NA 2013
Creating pools of Virtual Machines - ApacheCon NA 2013Creating pools of Virtual Machines - ApacheCon NA 2013
Creating pools of Virtual Machines - ApacheCon NA 2013
 
Data Scientist Toolbox
Data Scientist ToolboxData Scientist Toolbox
Data Scientist Toolbox
 
Axemblr Provisionr 0.3.x Overview
Axemblr Provisionr 0.3.x OverviewAxemblr Provisionr 0.3.x Overview
Axemblr Provisionr 0.3.x Overview
 
2012 in Review - Bucharest JUG
2012 in Review - Bucharest JUG2012 in Review - Bucharest JUG
2012 in Review - Bucharest JUG
 
Metrics for Web Applications - Netcamp 2012
Metrics for Web Applications - Netcamp 2012Metrics for Web Applications - Netcamp 2012
Metrics for Web Applications - Netcamp 2012
 
Counters with Riak on Amazon EC2 at Hackover
Counters with Riak on Amazon EC2 at HackoverCounters with Riak on Amazon EC2 at Hackover
Counters with Riak on Amazon EC2 at Hackover
 
Simple REST with Dropwizard
Simple REST with DropwizardSimple REST with Dropwizard
Simple REST with Dropwizard
 
Guava Overview Part 2 Bucharest JUG #2
Guava Overview Part 2 Bucharest JUG #2 Guava Overview Part 2 Bucharest JUG #2
Guava Overview Part 2 Bucharest JUG #2
 
Polyglot Persistence & Big Data in the Cloud
Polyglot Persistence & Big Data in the CloudPolyglot Persistence & Big Data in the Cloud
Polyglot Persistence & Big Data in the Cloud
 
Building a Great Team in Open Source - Open Agile 2011
Building a Great Team in Open Source - Open Agile 2011Building a Great Team in Open Source - Open Agile 2011
Building a Great Team in Open Source - Open Agile 2011
 
Apache Whirr
Apache WhirrApache Whirr
Apache Whirr
 

Dernier

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Dernier (20)

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 

Guava Overview. Part 1 @ Bucharest JUG #1