SlideShare a Scribd company logo
@BRWNGRLDEV
@BRWNGRLDEV
2013-2014
@BRWNGRLDEV
U.S.A
@BRWNGRLDEV
891 TIMES
GETTING A GRIP
ON GRAPHQL@BRWNGRLDEV
@BRWNGRLDEV
AGENDA
@BRWNGRLDEV
Basics
AGENDA
@BRWNGRLDEV
Basics
Server
AGENDA
@BRWNGRLDEV
Basics
Server
Client
AGENDA
BASICS
@BRWNGRLDEV
@BRWNGRLDEV
GraphQL is…
A QUERY LANGUAGE
FOR YOUR API
@BRWNGRLDEV
SELECT name FROM users
@BRWNGRLDEV
SELECT name FROM users
@BRWNGRLDEV
SELECT name FROM users
@BRWNGRLDEV
Karen
Aisha
James
SELECT name FROM users
@BRWNGRLDEV
data class UFOSighting(
var id: Int,
var date: LocalDate,
var city: String?,
var state: String?,
var country: String?,
var shape: String?,
var duration: Double,
var comments: String?,
var latitude: Double,
var longitude: Double
)
@BRWNGRLDEV
query AllSightings {
sightings {
id
shape
}
}
@BRWNGRLDEV
query AllSightings {
sightings {
id
shape
}
}
@BRWNGRLDEV
query AllSightings {
sightings {
id
shape
}
}
@BRWNGRLDEV
query AllSightings {
sightings {
id
shape
}
}
@BRWNGRLDEV
query AllSightings {
sightings {
id
shape
}
}
@BRWNGRLDEV
query AllSightings {
sightings {
id
shape
}
}
API
@BRWNGRLDEV
query AllSightings {
sightings {
id
shape
}
}
{8
“data” : {
“sightings” : [
{8
“id” : 1,
“shape” : “circle”
}8
]8
}8
}8
API
@BRWNGRLDEV
{8
“data” : {
“sightings” : [
{8
“id” : 1,
“shape” : “circle”
}8
]8
}8
}8
@BRWNGRLDEV
{
“data” : {
“sightings” : [
{
“id” : 1,
“shape” : “circle”
}
]
}
}
@BRWNGRLDEV
query
@BRWNGRLDEV
GET
query
@BRWNGRLDEV
GET
query mutation
POST
PATCH
DELETE
@BRWNGRLDEV
GraphQL is not…
@BRWNGRLDEV
BLOG
@BRWNGRLDEV
User
BLOG
@BRWNGRLDEV
User
Post
BLOG
@BRWNGRLDEV
User
Post Comment
BLOG
@BRWNGRLDEV
BLOG
User
Post Comment
@BRWNGRLDEV
GraphQL is…
A SPECIFICATION
@BRWNGRLDEV
@BRWNGRLDEV
Give me 

some data!
@BRWNGRLDEV
You didn’t 

say please!
@BRWNGRLDEV
C# / .NET
Elixir
Kotlin
Java
JavaScript
Ruby
…
Server
@BRWNGRLDEV
C# / .NET
Go
Java / Android
JavaScript
Python
Swift
…
Client
@BRWNGRLDEV
GraphQL is…
INTROSPECTIVE
@BRWNGRLDEV
query {
__type(name: "UFOSighting") {
fields {
name
}
}
}
@BRWNGRLDEV
query {
__type(name: "UFOSighting") {
fields {
name
}
}
}
@BRWNGRLDEV
query {
__type(name: "UFOSighting") {
fields {
name
}
}
}
@BRWNGRLDEV
@BRWNGRLDEV
GraphQL is…
a query language
a specification
introspective
@BRWNGRLDEV
SO
WHAT?!
@BRWNGRLDEV
R E S T
@BRWNGRLDEV
R E S T
/UFO-SIGHTINGS
[
{
"ID": 9298,
"LONGITUDE": 145.722595,
"LATITUDE": -38.626591,
"STATE": "",
"COUNTRY": "AU",
"SHAPE": "LIGHT",
"COMMENTS": "BRIGHT ORANGE LIGHT”
},
{
"ID": 9297,
"LONGITUDE": -90.0488889,
"LATITUDE": 35.1494444,
"STATE": "TN",
"COUNTRY": "US",
"SHAPE": "RECTANGLE",
"COMMENTS": "STANDING AT MY WINDOW”
},
{
"ID": 9287,
"LONGITUDE": -3.1,
"LATITUDE": 53.316667,
"STATE": "YT",
"COUNTRY": "GB",
"SHAPE": "TRIANGLE",
"COMMENTS": "((HOAX??)) LONG TRIANGLE OBJECT”
},
…
@BRWNGRLDEV
R E S TG R A P H Q L
@BRWNGRLDEV
@BRWNGRLDEV
@BRWNGRLDEV
SERVER
@BRWNGRLDEV
@BRWNGRLDEV
Single Endpoint
/graphql
@BRWNGRLDEV
HTTP GET
/GRAPHQL?QUERY=<QUERY>
@BRWNGRLDEV
HTTP GET
/GRAPHQL?QUERY=<QUERY>
“{
sightings {
id
shape
}
}”
@BRWNGRLDEV
HTTP POST
/GRAPHQL
@BRWNGRLDEV
{
“query” : “{
sightings {
id
shape
}
}”
}
HTTP POST
/GRAPHQL
@BRWNGRLDEV
Postman
@BRWNGRLDEV
Postman
@BRWNGRLDEV
BUILDING OUR
SERVER
@BRWNGRLDEV
Ktor – Server Framework
@BRWNGRLDEV
Ktor – Server Framework
Koin – Dependency Injection
@BRWNGRLDEV
Ktor – Server Framework
Koin – Dependency Injection
Squash – Database Access
@BRWNGRLDEV
Ktor – Server Framework
Koin – Dependency Injection
Squash – Database Access
KGraphQL – GraphQL Support
@BRWNGRLDEV
GraphQL Server…
Types
Schema
Resolvers
@BRWNGRLDEV
C S S H N A S V Z U Y C J H M
N I W P X O D C B Q Q G L F T
C P B U H Z I B A U M A Q S V
Q O W G Y F M T E L M A H F H
R E V L O S E R A E A T P I R
K F S R R S Y N H T P R A E J
O B J E C T S C U L U D R L P
E P Y T L O S X L U B M G D X
@BRWNGRLDEV
C S S H N A S V Z U Y C J H M
N I W P X O D C B Q Q G L F T
C P B U H Z I B A U M A Q S V
Q O W G Y F M T E L M A H F H
R E V L O S E R A E A T P I R
K F S R R S Y N H T P R A E J
O B J E C T S C U L U D R L P
E P Y T L O S X L U B M G D X
@BRWNGRLDEV
type UFOSighting {
id: Int!
city: String
}
@BRWNGRLDEV
type UFOSighting {
id: Int!
city: String
}
@BRWNGRLDEV
type UFOSighting {
id: Int!
city: String
}
{
sightings {
id {
???
}
city
}
}
@BRWNGRLDEV
type UFOSighting {
id: Int!
city: String
}
{
sightings {
id {
???
}
city
}
}
WRONG!
@BRWNGRLDEV
type<UFOSighting>
@BRWNGRLDEV
type<UFOSighting>
data class UFOSighting(
var id: Int = -1,
var city: String? = "",
)
@BRWNGRLDEV
type<UFOSighting>
data class UFOSighting(
var id: Int = -1,
var city: String? = "",
)
@BRWNGRLDEV
type<UFOSighting>
data class UFOSighting(
var id: Int = -1,
var city: String? = "",
)
type UFOSighting {
id: Int!
city: String
}
@BRWNGRLDEV
C S S H N A S V Z U Y C J H M
N I W P X O D C B Q Q G L F T
C P B U H Z I B A U M A Q S V
Q O W G Y F M T E L M A H F H
R E V L O S E R A E A T P I R
K F S R R S Y N H T P R A E J
O B J E C T S C U L U D R L P
E P Y T L O S X L U B M G D X
@BRWNGRLDEV
schema {
query: Query
}
@BRWNGRLDEV
type Query {
sighting(id: Int): UFOSighting
}
schema {
query: Query
}
@BRWNGRLDEV
type UFOSighting {
id: Int!
city: String
}
type Query {
sighting(id: Int): UFOSighting
}
schema {
query: Query
}
@BRWNGRLDEV
Data, 

please!
Why, yes!
@BRWNGRLDEV
KGraphQL.schema {
}
@BRWNGRLDEV
KGraphQL.schema {
type<UFOSighting>
}
@BRWNGRLDEV
KGraphQL.schema {
type<UFOSighting>
query("sighting") {
resolver { id: Int -> …}
}
}
@BRWNGRLDEV
C S S H N A S V Z U Y C J H M
N I W P X O D C B Q Q G L F T
C P B U H Z I B A U M A Q S V
Q O W G Y F M T E L M A H F H
R E V L O S E R A E A T P I R
K F S R R S Y N H T P R A E J
O B J E C T S C U L U D R L P
E P Y T L O S X L U B M G D X
@BRWNGRLDEV
Resolver
query("sighting") {3
resolver {3id: Int ->
storage.getSighting(id)
}3
}3
@BRWNGRLDEV
Resolver
query("sighting") {3
resolver {3id: Int ->
“http://sightings/$id".httpGet()
}3
}3
@BRWNGRLDEV
mutation("createUFOSighting") {
description = "Adds a new UFO Sighting”
}
3
Resolver - Mutation
@BRWNGRLDEV
Resolver - Mutation
mutation("createUFOSighting") {
description = "Adds a new UFO Sighting”
resolver { input: CreateUFOSightingInput ->
storage.createSighting(input…)
}
}
3
@BRWNGRLDEV
Resolver - schema.json
@BRWNGRLDEV
schema
resolvers
/graphql
CLIENT
@BRWNGRLDEV
@BRWNGRLDEV
Sample Application
@BRWNGRLDEV
Sample Application
KOTLIN
@BRWNGRLDEV
Sample Application
KOTLIN
ARCHITECTURE COMPONENTS
@BRWNGRLDEV
Sample Application
KOTLIN
ARCHITECTURE COMPONENTS
APOLLO ANDROID
@BRWNGRLDEV
GraphQL Client…
Apollo Client
Schema
.graphql Files
@BRWNGRLDEV
Apollo Client
ApolloClient.builder()
.serverUrl(BASE_URL)
.okHttpClient(okHttpClient)
.build()
@BRWNGRLDEV
Apollo Client
ApolloClient.builder()
.serverUrl(BASE_URL)
.okHttpClient(okHttpClient)
.build()
@BRWNGRLDEV
apollo-codegen download-schema
@BRWNGRLDEV
Schema
@BRWNGRLDEV
.graphql File
@BRWNGRLDEV
.graphql File
@BRWNGRLDEV
.graphql File
Plugin
@BRWNGRLDEV
.graphql File
Plugin
@BRWNGRLDEV
@BRWNGRLDEV
Generated Code…
@BRWNGRLDEV
Apollo Client
Schema
.graphql Files
@BRWNGRLDEV
1. Build our query
2. Enqueue the request
3. Handle the response
@BRWNGRLDEV
SightingsQuery.builder()
.size(30)
.build()
Build our query
@BRWNGRLDEV
apolloClient
.query(query)
Enqueue the request
@BRWNGRLDEV
apolloClient
.query(query)
.enqueue(object : Callback<T>() {
})
Enqueue the request
@BRWNGRLDEV
apolloClient
.query(query)
.enqueue(object : Callback<T>() {
fun onResponse(response: Response<T>)
fun onFailure(e: ApolloException)
})
Enqueue the request
@BRWNGRLDEV
Handle the response
{
"data" : {
"sightings" : [ {
"__typename" : "UFOSighting",
"id" : 9297,
"date" : "2014-05-08",
"shape" : "rectangle",
"comments" : "Standing at my window one by one."
} ]
}
}
@BRWNGRLDEV
Handle the response
fun onResponse(response: Response<T>) {
response.data()?.sightings()
// notify your UI
}
@BRWNGRLDEV
TIPS & TRICKS
@BRWNGRLDEV
@BRWNGRLDEV
IntelliJ GraphQL Plugin…
@BRWNGRLDEV
A CLIENT IS
OPTIONAL
@BRWNGRLDEV
HTTPS://GITHUB.COM/APIS-GURU/GRAPHQL-APIS
@BRWNGRLDEV
TRUE/FALSE
RAPID FIRE
@BRWNGRLDEV
@BRWNGRLDEV
GRAPHQL WAS DESIGNED
FOR GRAPH DATABASES.
@BRWNGRLDEV
@BRWNGRLDEV
GRAPHQL WAS DESIGNED
FOR GRAPH DATABASES.
FALSE
@BRWNGRLDEV
@BRWNGRLDEV
GRAPHQL IS LANGUAGE
AGNOSTIC.
@BRWNGRLDEV
@BRWNGRLDEV
GRAPHQL IS LANGUAGE
AGNOSTIC.
TRUE
@BRWNGRLDEV
@BRWNGRLDEV
APOLLO ANDROID IS THE
ONLY GRAPHQL CLIENT.
@BRWNGRLDEV
@BRWNGRLDEV
APOLLO ANDROID IS THE
ONLY GRAPHQL CLIENT.
FALSE
@BRWNGRLDEV
@BRWNGRLDEV
REST IS DEAD.
@BRWNGRLDEV
@BRWNGRLDEV
YOU DECIDE
@BRWNGRLDEV
GETTING A GRIP
ON GRAPHQL@BRWNGRLDEV

More Related Content

Similar to Getting a Grip on GraphQL

Artur Skowroński – Ten Typ tak ma - O systemach typów na przykładzie TypeScri...
Artur Skowroński – Ten Typ tak ma - O systemach typów na przykładzie TypeScri...Artur Skowroński – Ten Typ tak ma - O systemach typów na przykładzie TypeScri...
Artur Skowroński – Ten Typ tak ma - O systemach typów na przykładzie TypeScri...
Artur Skowroński
 
PyParis - weather and climate data
PyParis - weather and climate dataPyParis - weather and climate data
PyParis - weather and climate data
Margriet Groenendijk
 
Type Systems on the example of TypeScript
Type Systems on the example of TypeScriptType Systems on the example of TypeScript
Type Systems on the example of TypeScript
Artur Skowroński
 
Consuming GraphQL APIs in C#.pptx
Consuming GraphQL APIs in C#.pptxConsuming GraphQL APIs in C#.pptx
Consuming GraphQL APIs in C#.pptx
Brandon Minnick, MBA
 
GraphQL vs Traditional Rest API
GraphQL vs Traditional Rest APIGraphQL vs Traditional Rest API
GraphQL vs Traditional Rest API
Vladimir Dejanovic
 
Getting Started with the Amazon GameOn API - Peter Heinrich
Getting Started with the Amazon GameOn API - Peter HeinrichGetting Started with the Amazon GameOn API - Peter Heinrich
Getting Started with the Amazon GameOn API - Peter Heinrich
Amazon Web Services
 
GraphQL, l'avenir du REST ?
GraphQL, l'avenir du REST ?GraphQL, l'avenir du REST ?
GraphQL, l'avenir du REST ?
Francois Zaninotto
 
Xcode Survival Guide Version Two
Xcode Survival Guide Version TwoXcode Survival Guide Version Two
Xcode Survival Guide Version Two
Kristina Fox
 
GraphQL & Relay - 串起前後端世界的橋樑
GraphQL & Relay - 串起前後端世界的橋樑GraphQL & Relay - 串起前後端世界的橋樑
GraphQL & Relay - 串起前後端世界的橋樑
Pokai Chang
 
10 d bs in 30 minutes
10 d bs in 30 minutes10 d bs in 30 minutes
10 d bs in 30 minutesDavid Simons
 
Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]
Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]
Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]
Chaiyong Ragkhitwetsagul
 
Building GraphQL APIs in C#.pptx
Building GraphQL APIs in C#.pptxBuilding GraphQL APIs in C#.pptx
Building GraphQL APIs in C#.pptx
Brandon Minnick, MBA
 
Meteor - not just for rockstars
Meteor - not just for rockstarsMeteor - not just for rockstars
Meteor - not just for rockstars
Stephan Hochhaus
 
Designing a Horizontally Scalable Event-Driven Big Data Architecture with Apa...
Designing a Horizontally Scalable Event-Driven Big Data Architecture with Apa...Designing a Horizontally Scalable Event-Driven Big Data Architecture with Apa...
Designing a Horizontally Scalable Event-Driven Big Data Architecture with Apa...
Ricardo Fanjul Fandiño
 
Geb for Testing Your Grails Application GR8Conf India 2016
Geb for Testing Your Grails Application  GR8Conf India 2016Geb for Testing Your Grails Application  GR8Conf India 2016
Geb for Testing Your Grails Application GR8Conf India 2016
Jacob Aae Mikkelsen
 
Dr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyceDr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyce
Michał Kurzeja
 
CSS Grid Layout is Just Around the Corner (CSSConf US 2015)
CSS Grid Layout is Just Around the Corner (CSSConf US 2015)CSS Grid Layout is Just Around the Corner (CSSConf US 2015)
CSS Grid Layout is Just Around the Corner (CSSConf US 2015)
Igalia
 
API Pain Points (PHPNE)
API Pain Points (PHPNE)API Pain Points (PHPNE)
API Pain Points (PHPNE)
Phil Sturgeon
 

Similar to Getting a Grip on GraphQL (18)

Artur Skowroński – Ten Typ tak ma - O systemach typów na przykładzie TypeScri...
Artur Skowroński – Ten Typ tak ma - O systemach typów na przykładzie TypeScri...Artur Skowroński – Ten Typ tak ma - O systemach typów na przykładzie TypeScri...
Artur Skowroński – Ten Typ tak ma - O systemach typów na przykładzie TypeScri...
 
PyParis - weather and climate data
PyParis - weather and climate dataPyParis - weather and climate data
PyParis - weather and climate data
 
Type Systems on the example of TypeScript
Type Systems on the example of TypeScriptType Systems on the example of TypeScript
Type Systems on the example of TypeScript
 
Consuming GraphQL APIs in C#.pptx
Consuming GraphQL APIs in C#.pptxConsuming GraphQL APIs in C#.pptx
Consuming GraphQL APIs in C#.pptx
 
GraphQL vs Traditional Rest API
GraphQL vs Traditional Rest APIGraphQL vs Traditional Rest API
GraphQL vs Traditional Rest API
 
Getting Started with the Amazon GameOn API - Peter Heinrich
Getting Started with the Amazon GameOn API - Peter HeinrichGetting Started with the Amazon GameOn API - Peter Heinrich
Getting Started with the Amazon GameOn API - Peter Heinrich
 
GraphQL, l'avenir du REST ?
GraphQL, l'avenir du REST ?GraphQL, l'avenir du REST ?
GraphQL, l'avenir du REST ?
 
Xcode Survival Guide Version Two
Xcode Survival Guide Version TwoXcode Survival Guide Version Two
Xcode Survival Guide Version Two
 
GraphQL & Relay - 串起前後端世界的橋樑
GraphQL & Relay - 串起前後端世界的橋樑GraphQL & Relay - 串起前後端世界的橋樑
GraphQL & Relay - 串起前後端世界的橋樑
 
10 d bs in 30 minutes
10 d bs in 30 minutes10 d bs in 30 minutes
10 d bs in 30 minutes
 
Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]
Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]
Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]
 
Building GraphQL APIs in C#.pptx
Building GraphQL APIs in C#.pptxBuilding GraphQL APIs in C#.pptx
Building GraphQL APIs in C#.pptx
 
Meteor - not just for rockstars
Meteor - not just for rockstarsMeteor - not just for rockstars
Meteor - not just for rockstars
 
Designing a Horizontally Scalable Event-Driven Big Data Architecture with Apa...
Designing a Horizontally Scalable Event-Driven Big Data Architecture with Apa...Designing a Horizontally Scalable Event-Driven Big Data Architecture with Apa...
Designing a Horizontally Scalable Event-Driven Big Data Architecture with Apa...
 
Geb for Testing Your Grails Application GR8Conf India 2016
Geb for Testing Your Grails Application  GR8Conf India 2016Geb for Testing Your Grails Application  GR8Conf India 2016
Geb for Testing Your Grails Application GR8Conf India 2016
 
Dr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyceDr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyce
 
CSS Grid Layout is Just Around the Corner (CSSConf US 2015)
CSS Grid Layout is Just Around the Corner (CSSConf US 2015)CSS Grid Layout is Just Around the Corner (CSSConf US 2015)
CSS Grid Layout is Just Around the Corner (CSSConf US 2015)
 
API Pain Points (PHPNE)
API Pain Points (PHPNE)API Pain Points (PHPNE)
API Pain Points (PHPNE)
 

More from Annyce Davis

RxJava In Baby Steps
RxJava In Baby StepsRxJava In Baby Steps
RxJava In Baby Steps
Annyce Davis
 
No internet? No Problem!
No internet? No Problem!No internet? No Problem!
No internet? No Problem!
Annyce Davis
 
First Do No Harm - 360|AnDev
First Do No Harm - 360|AnDevFirst Do No Harm - 360|AnDev
First Do No Harm - 360|AnDev
Annyce Davis
 
First Do No Harm - Droidcon Boston
First Do No Harm - Droidcon BostonFirst Do No Harm - Droidcon Boston
First Do No Harm - Droidcon Boston
Annyce Davis
 
Creating Gradle Plugins - Oredev
Creating Gradle Plugins - OredevCreating Gradle Plugins - Oredev
Creating Gradle Plugins - Oredev
Annyce Davis
 
Developing Apps for Emerging Markets
Developing Apps for Emerging MarketsDeveloping Apps for Emerging Markets
Developing Apps for Emerging Markets
Annyce Davis
 
Develop Maintainable Apps - edUiConf
Develop Maintainable Apps - edUiConfDevelop Maintainable Apps - edUiConf
Develop Maintainable Apps - edUiConf
Annyce Davis
 
Creating Gradle Plugins - GR8Conf US
Creating Gradle Plugins - GR8Conf USCreating Gradle Plugins - GR8Conf US
Creating Gradle Plugins - GR8Conf US
Annyce Davis
 
From Grails to Android: A Simple Journey
From Grails to Android: A Simple JourneyFrom Grails to Android: A Simple Journey
From Grails to Android: A Simple Journey
Annyce Davis
 
Google I/O 2016 Recap
Google I/O 2016 RecapGoogle I/O 2016 Recap
Google I/O 2016 Recap
Annyce Davis
 
Say It With Video
Say It With VideoSay It With Video
Say It With Video
Annyce Davis
 
Screen Robots: UI Tests in Espresso
Screen Robots: UI Tests in EspressoScreen Robots: UI Tests in Espresso
Screen Robots: UI Tests in Espresso
Annyce Davis
 
Creating Gradle Plugins
Creating Gradle PluginsCreating Gradle Plugins
Creating Gradle Plugins
Annyce Davis
 
Static Code Analysis
Static Code AnalysisStatic Code Analysis
Static Code Analysis
Annyce Davis
 
Develop Maintainable Apps
Develop Maintainable AppsDevelop Maintainable Apps
Develop Maintainable Apps
Annyce Davis
 
Android Testing, Why So Hard?!
Android Testing, Why So Hard?!Android Testing, Why So Hard?!
Android Testing, Why So Hard?!
Annyce Davis
 
Measuring Audience Engagement through Analytics
Measuring Audience Engagement through AnalyticsMeasuring Audience Engagement through Analytics
Measuring Audience Engagement through Analytics
Annyce Davis
 
DC Media Innovations Kick-Off Meetup
DC Media Innovations Kick-Off MeetupDC Media Innovations Kick-Off Meetup
DC Media Innovations Kick-Off Meetup
Annyce Davis
 

More from Annyce Davis (18)

RxJava In Baby Steps
RxJava In Baby StepsRxJava In Baby Steps
RxJava In Baby Steps
 
No internet? No Problem!
No internet? No Problem!No internet? No Problem!
No internet? No Problem!
 
First Do No Harm - 360|AnDev
First Do No Harm - 360|AnDevFirst Do No Harm - 360|AnDev
First Do No Harm - 360|AnDev
 
First Do No Harm - Droidcon Boston
First Do No Harm - Droidcon BostonFirst Do No Harm - Droidcon Boston
First Do No Harm - Droidcon Boston
 
Creating Gradle Plugins - Oredev
Creating Gradle Plugins - OredevCreating Gradle Plugins - Oredev
Creating Gradle Plugins - Oredev
 
Developing Apps for Emerging Markets
Developing Apps for Emerging MarketsDeveloping Apps for Emerging Markets
Developing Apps for Emerging Markets
 
Develop Maintainable Apps - edUiConf
Develop Maintainable Apps - edUiConfDevelop Maintainable Apps - edUiConf
Develop Maintainable Apps - edUiConf
 
Creating Gradle Plugins - GR8Conf US
Creating Gradle Plugins - GR8Conf USCreating Gradle Plugins - GR8Conf US
Creating Gradle Plugins - GR8Conf US
 
From Grails to Android: A Simple Journey
From Grails to Android: A Simple JourneyFrom Grails to Android: A Simple Journey
From Grails to Android: A Simple Journey
 
Google I/O 2016 Recap
Google I/O 2016 RecapGoogle I/O 2016 Recap
Google I/O 2016 Recap
 
Say It With Video
Say It With VideoSay It With Video
Say It With Video
 
Screen Robots: UI Tests in Espresso
Screen Robots: UI Tests in EspressoScreen Robots: UI Tests in Espresso
Screen Robots: UI Tests in Espresso
 
Creating Gradle Plugins
Creating Gradle PluginsCreating Gradle Plugins
Creating Gradle Plugins
 
Static Code Analysis
Static Code AnalysisStatic Code Analysis
Static Code Analysis
 
Develop Maintainable Apps
Develop Maintainable AppsDevelop Maintainable Apps
Develop Maintainable Apps
 
Android Testing, Why So Hard?!
Android Testing, Why So Hard?!Android Testing, Why So Hard?!
Android Testing, Why So Hard?!
 
Measuring Audience Engagement through Analytics
Measuring Audience Engagement through AnalyticsMeasuring Audience Engagement through Analytics
Measuring Audience Engagement through Analytics
 
DC Media Innovations Kick-Off Meetup
DC Media Innovations Kick-Off MeetupDC Media Innovations Kick-Off Meetup
DC Media Innovations Kick-Off Meetup
 

Recently uploaded

Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
e20449
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
vrstrong314
 

Recently uploaded (20)

Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
 

Getting a Grip on GraphQL