SlideShare a Scribd company logo
1 of 69
Download to read offline
How To Add Your Favorite
Language to Compass
Anna Herlihy
Senior Software Engineer
MongoDB
Compass
Tour
Export To Language (query)
Export To Language (aggregation)
But wait...
Wouldn’t it be great if you could just write
whatever language you want, directly
into Compass?
Language-Modes
BSON is a large enough subset to treat the
problem as if we’re supporting the entire
language syntax
Accept query or aggregation in any language
Export query or aggregation to any language
Requirements
Any language
to
any language
translation!
Intermediate representation
Intermediate representation
Complexity
For every input language we support, we want to only have to
do the work once
○ If we write direct A → B translation, everytime we add
a new input we will have to add a translation to every
existing output.
○ Instead, we want to define the input language without
knowing or caring how many output languages exist
For every output language we add, we want to define it in one
place!
○ Do not want to have to rewrite the translation for every
possible combination, that would be O(n2) and we
want O(n)
Encouraging Community Involvement
● There are many languages that have small, passionate user bases
○ We have MongoDB drivers for everything!
○ Open source ethos :)
● How many people are compiler experts?
○ Add languages without writing a compiler!
○ Maybe you don’t even have to write code....
● We need a pluggable transpiler!
How to add your own output language...
Compiler 101
Tree Building
{ today: Date() }
START
Object
Literal
{}
Symbol
today
Function
Call
Args
()
Symbol
Date
key
funcname
value
args
● First stage of compilation is usually
translating the input, a string, into a
tree
● The tree-building stage includes
lexing, parsing, syntax analysis, and
more!
Our Savior
● We don’t want to write parsers,
they are hard!
● ANTLR is a parser generator
● For most languages,
somebody has already written
the grammar
● We just have to apply it to our
input and we get a parse tree.
The tree building stage is
completely handled!
● Bonus: ANTLR generates a
visitor class!
Visitors
● Once we have a tree, we use a visitor to do code
generation.
● The visitor goes to each node in the tree, starting with the
root and ending with the leaves.
● For each type of node, the visitor calls the corresponding
function.
■ When the visitor sees a node that is a “string” type,
it will call the “visitString” method and expect the
generated code to be returned.
Extremely Simple Visitor Example
‘testing…testing’
START
JavaScript Code
Extremely Simple Visitor Example
‘testing…testing’
START
JavaScript Code
“testing...testing”
END
Java Code
Extremely Simple Visitor Example
‘testing…testing’
START
ANTLR
“testing...testing”
END
string
’‘
testing...testing
value
Extremely Simple Visitor Example
‘testing…testing’
START
ANTLR
“testing...testing”
END
string
’‘
testing...testing
value
Extremely Simple Visitor Example
‘testing…testing’
START
“testing...testing”
END
VISITOR
string
’‘
testing...testing
value
Extremely Simple Visitor Example
class Visitor() extends ANTLRVisitor {
visitString(node) {
const val = node.value;
return ‘“‘ + val + ‘”‘;
}
...
}
string
’‘
testing...testing
‘testing…testing’
START
“testing...testing”
END
value
What about functions or variables?
● We need to support native language features as well as
BSON-specific types.
● ObjectId, Date, Decimal128, Timestamp, etc…
● How can we tell the difference between variables?
ObjectId()
START
Date()
START JavaScript Input JavaScript Input
new java.util.Date() new ObjectId()
ENDEND
JavaScript Input
Java Output
ObjectId()
START
Date()
START
Function
Call
Args
()
Symbol
Date
Function
Call
Args
()
Symbol
ObjectId
new java.util.Date() new ObjectId()
ENDEND
ObjectId()
START
Date()
START
Function
Call
Args
()
Symbol
Date
Function
Call
Args
()
Symbol
ObjectId
To the visitor, these two trees look the same...
The same visit methods are going to be called for both...
We need a
Symbol Table!
Symbol Table
● Need a place to keep track of all the symbols, i.e.
variable or function names.
● When the visitor reaches a Symbol node, it looks up
the name in the Symbol Table to see what the
symbol contains
● This is also a convenient place to differentiate
between output languages...
Visiting a Symbol
visitSymbol(node) {
const name = node.symbol;
node.type = this.Symbols[name];
if (node.type === undefined) {
throw new ReferenceError(`Symbol ${name} is
undefined`);
}
return name;
}
First get the symbol
itself from the node
Visiting a Symbol
visitSymbol(node) {
const name = node.symbol;
node.type = this.Symbols[name];
if (node.type === undefined) {
throw new ReferenceError(`Symbol ${name} is
undefined`);
}
return name;
}
Look up the name of
the symbol in the table
and “decorate” the
node with the results
Visiting a Symbol
visitSymbol(node) {
const name = node.symbol;
node.type = this.Symbols[name];
if (node.type === undefined) {
throw new ReferenceError(`Symbol ${name} is
undefined`);
}
return name;
}
If it’s not in the table,
throw an exception
Visiting a Symbol
visitSymbol(node) {
const name = node.symbol;
node.type = this.Symbols[name];
if (node.type === undefined) {
throw new ReferenceError(`Symbol ${name} is
undefined`);
}
return name;
}
Return the name of
the function to the
parent
What’s in the Symbol Table?
ObjectId:
id: "ObjectId"
callable: *constructor
args:
- [ *StringType, *NumericType, null ]
type: *ObjectIdType
Attr: {}
template: *ObjectIdSymbolTemplate
argsTemplate: *ObjectIdSymbolArgsTemplate
What’s in the Symbol Table?
ObjectId:
id: "ObjectId"
The name of the attribute.
Mostly used for error reporting.
What’s in the Symbol Table?
ObjectId:
id: "ObjectId"
callable: *constructor
There are 3 types of symbol:
*func: a function name
*constructor: also a function name, but may require a “new“
*var: a variable. Indicates that the symbol cannot be called.
What’s in a Symbol?
ObjectId:
id: "ObjectId"
callable: *constructor
args:
- [ *StringType, *NumericType, null ]
If the symbol is callable, this is where the arguments are defined. Each
element in the array is a positional argument and contains the list of
acceptable types. So ObjectId accepts one string or number
argument, or no arguments at all.
What’s in a Symbol?
ObjectId:
id: "ObjectId"
callable: *constructor
args:
- [ *StringType, *NumericType, null ]
type: *ObjectIdType
The return type of the function,
or if the symbol is a variable, the
type of the variable.
What’s in a Symbol?
ObjectId:
id: "ObjectId"
callable: *constructor
args:
- [ *StringType, *NumericType, null ]
type: *ObjectIdType
attr: {...}
Any attributes of the symbol. This is a sub-
symbol table, so it is a mapping of names to
symbols. For example: ObjectId.fromDate()
What’s in a Symbol?
ObjectId:
id: "ObjectId"
callable: *constructor
args:
- [ *StringType, *NumericType, null ]
type: *ObjectIdType
attr: {}
template: *ObjectIdSymbolTemplate
argsTemplate: *ObjectIdSymbolArgsTemplate
These are functions that accept strings and return strings, and are responsible for
doing the string transformations from one language syntax to another language's
syntax. template is the symbol itself, and argsTemplate is applied to the args.
These are specific to the output language and defined in a separate file.
Each output language has a file (written in
YAML) where the templates are defined.
To Recap
● ANTLR creates a tree from the user input
● We visit the ANTLR-generated tree using visitors
● When the visitor reaches a symbol, it looks up metadata in
the Symbol Table.
○ The metadata includes template functions that specify
what code should be generated
● So how do I add my own output language to Compass?
Add your own template file!!
All you need to do to add an output language is
fill out the templates!
symbols/sample_template.yaml
● There is a skeleton template file available
● To add a new output language:
○ fill out each template with the correct translation to
your language.
● Templates mostly apply to symbols, but there are also
templates for literals and other syntax.
NumberLong(‘1’)
START
Visitor
NumberLong(‘1’)
START
Visitor
symbols/python/templates.yaml
LongTemplate(arg) {
return `Int64(${arg})`;
}
NumberLong(‘1’)
START
Int64(‘1’)
Visitor
symbols/python/templates.yaml
LongTemplate(arg) {
return `Int64(${arg})`;
}
END
NumberLong(‘1’)
START
Int64(‘1’)
Visitor
symbols/python/templates.yaml
LongTemplate(arg) {
return `Int64(${arg})`;
}
symbols/java/templates.yaml
LongTemplate(arg) {
return `Long.parseLong(${arg})`;
}
END
NumberLong(‘1’)
START
Long.parseLong(
"1"
)
Int64(‘1’)
Visitor
symbols/python/templates.yaml
LongTemplate(arg) {
return `Int64(${arg})`;
}
symbols/java/templates.yaml
LongTemplate(arg) {
return `Long.parseLong(${arg})`;
}
END
NumberLong(‘1’)
START
Long.parseLong(
"1"
)
Int64(‘1’)
Visitor
symbols/python/templates.yaml
LongTemplate(arg) {
return `Int64(${arg})`;
}
symbols/java/templates.yaml
LongTemplate(arg) {
return `Long.parseLong(${arg})`;
}
symbols/csharp/templates.yaml
LongTemplate(arg) {
return `Convert.ToInt64(${arg})``;
}
END
NumberLong(‘1’)
START
Long.parseLong(
"1"
)
Int64(‘1’)
Convert.ToInt64(
"1"
)
END
Visitor
symbols/python/templates.yaml
LongTemplate(arg) {
return `Int64(${arg})`;
}
symbols/java/templates.yaml
LongTemplate(arg) {
return `Long.parseLong(${arg})`;
}
symbols/csharp/templates.yaml
LongTemplate(arg) {
return `Convert.ToInt64(${arg})``;
}
Go forth and write templates!
● Make a PR with your template file!
○ Can get help if you’re stuck
○ Ruby, PHP, Go, Lua, R, Rust, C & more!
● Want to add an output language?
○ Just fill out a symbol table file!
● Want to write an input language?
○ Write a visitor
Future Features!
We now have a pluggable transpiler from any language
BSON to any language BSON….what can we do with it?
Expand the supported syntax to include driver usage
Do a series of action in Compass, and have Compass export
the driver code commands to recreate exactly what you did
Use it to generate examples for MongoDB students
Learn MongoDB by translating code samples in real time to
any language you like!
Put it in front of the shell!
Wouldn’t it be great if you could just write Python code in the
shell? Or PHP? etc.
Expand it to support 100% language syntax
Use it for anything at all...
Thank you!
● Alena Khineika
● Irina Shestak
● Durran Jordan
Thank you!
● Everything I said, in much more detail, is available at
https://github.com/mongodb-js/bson-transpilers
○ CONTRIBUTING.md
● Questions?
○ Email!
■ compass@mongodb.com or herlihyap@gmail.com

More Related Content

What's hot

Effective Scala (JavaDay Riga 2013)
Effective Scala (JavaDay Riga 2013)Effective Scala (JavaDay Riga 2013)
Effective Scala (JavaDay Riga 2013)
mircodotta
 
Productivity Enhencement with Visual Studio
Productivity Enhencement with Visual StudioProductivity Enhencement with Visual Studio
Productivity Enhencement with Visual Studio
Ahasan Habib
 
Zend%20Certification%20REVIEW%20Document
Zend%20Certification%20REVIEW%20DocumentZend%20Certification%20REVIEW%20Document
Zend%20Certification%20REVIEW%20Document
tutorialsruby
 
Chapter1pp
Chapter1ppChapter1pp
Chapter1pp
J. C.
 

What's hot (19)

Javascript
JavascriptJavascript
Javascript
 
Scala’s implicits
Scala’s implicitsScala’s implicits
Scala’s implicits
 
Effective Scala (JavaDay Riga 2013)
Effective Scala (JavaDay Riga 2013)Effective Scala (JavaDay Riga 2013)
Effective Scala (JavaDay Riga 2013)
 
Cs3430 lecture 15
Cs3430 lecture 15Cs3430 lecture 15
Cs3430 lecture 15
 
The JavaScript Programming Language
The JavaScript Programming LanguageThe JavaScript Programming Language
The JavaScript Programming Language
 
Productivity Enhencement with Visual Studio
Productivity Enhencement with Visual StudioProductivity Enhencement with Visual Studio
Productivity Enhencement with Visual Studio
 
Javascript
JavascriptJavascript
Javascript
 
Dart workshop
Dart workshopDart workshop
Dart workshop
 
Dart programming language
Dart programming languageDart programming language
Dart programming language
 
Zend%20Certification%20REVIEW%20Document
Zend%20Certification%20REVIEW%20DocumentZend%20Certification%20REVIEW%20Document
Zend%20Certification%20REVIEW%20Document
 
JavaScript Data Types
JavaScript Data TypesJavaScript Data Types
JavaScript Data Types
 
Java script
Java scriptJava script
Java script
 
3 Datatypes
3 Datatypes3 Datatypes
3 Datatypes
 
Introduction to Javascript
Introduction to JavascriptIntroduction to Javascript
Introduction to Javascript
 
C basics
C basicsC basics
C basics
 
A Quick Taste of C
A Quick Taste of CA Quick Taste of C
A Quick Taste of C
 
DIWE - Programming with JavaScript
DIWE - Programming with JavaScriptDIWE - Programming with JavaScript
DIWE - Programming with JavaScript
 
Chapter1pp
Chapter1ppChapter1pp
Chapter1pp
 
Chapter 2 java
Chapter 2 javaChapter 2 java
Chapter 2 java
 

Similar to MongoDB.local Berlin: How to add your favorite language to MongoDB Compass

Session 2 - Objective-C basics
Session 2 - Objective-C basicsSession 2 - Objective-C basics
Session 2 - Objective-C basics
Vu Tran Lam
 
Presentation 5th
Presentation 5thPresentation 5th
Presentation 5th
Connex
 

Similar to MongoDB.local Berlin: How to add your favorite language to MongoDB Compass (20)

Complete Notes on Angular 2 and TypeScript
Complete Notes on Angular 2 and TypeScriptComplete Notes on Angular 2 and TypeScript
Complete Notes on Angular 2 and TypeScript
 
(4) cpp automatic arrays_pointers_c-strings
(4) cpp automatic arrays_pointers_c-strings(4) cpp automatic arrays_pointers_c-strings
(4) cpp automatic arrays_pointers_c-strings
 
Session 2 - Objective-C basics
Session 2 - Objective-C basicsSession 2 - Objective-C basics
Session 2 - Objective-C basics
 
Crystal internals (part 1)
Crystal internals (part 1)Crystal internals (part 1)
Crystal internals (part 1)
 
Crystal internals (part 1)
Crystal internals (part 1)Crystal internals (part 1)
Crystal internals (part 1)
 
Crystal internals (part 1)
Crystal internals (part 1)Crystal internals (part 1)
Crystal internals (part 1)
 
Presentation 5th
Presentation 5thPresentation 5th
Presentation 5th
 
Back to the Future with TypeScript
Back to the Future with TypeScriptBack to the Future with TypeScript
Back to the Future with TypeScript
 
Introduction to Kotlin for Android developers
Introduction to Kotlin for Android developersIntroduction to Kotlin for Android developers
Introduction to Kotlin for Android developers
 
What’s new in .NET
What’s new in .NETWhat’s new in .NET
What’s new in .NET
 
Code is not text! How graph technologies can help us to understand our code b...
Code is not text! How graph technologies can help us to understand our code b...Code is not text! How graph technologies can help us to understand our code b...
Code is not text! How graph technologies can help us to understand our code b...
 
Reflection in Go
Reflection in GoReflection in Go
Reflection in Go
 
Should i Go there
Should i Go thereShould i Go there
Should i Go there
 
C programming language
C programming languageC programming language
C programming language
 
Java Building Blocks
Java Building BlocksJava Building Blocks
Java Building Blocks
 
gdscpython.pdf
gdscpython.pdfgdscpython.pdf
gdscpython.pdf
 
python-online&offline-training-in-kphb-hyderabad (1) (1).pdf
python-online&offline-training-in-kphb-hyderabad (1) (1).pdfpython-online&offline-training-in-kphb-hyderabad (1) (1).pdf
python-online&offline-training-in-kphb-hyderabad (1) (1).pdf
 
python.pdf
python.pdfpython.pdf
python.pdf
 
2.Getting Started with C#.Net-(C#)
2.Getting Started with C#.Net-(C#)2.Getting Started with C#.Net-(C#)
2.Getting Started with C#.Net-(C#)
 
Swift Basics
Swift BasicsSwift Basics
Swift Basics
 

More from MongoDB

More from MongoDB (20)

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
 

Recently uploaded

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 

Recently uploaded (20)

Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 

MongoDB.local Berlin: How to add your favorite language to MongoDB Compass