SlideShare a Scribd company logo
Grigory Petrov
Migrating Web SDK from JS to TS
Voximplant
AmsterdamJS, Amsterdam
June 8, 2017
https://twitter.com/grigoryvp
What's next?
Speaker Grigory Petrov
Specialization Team Lead
Full-time job Technology Evangelist
Experience in IT More than 15 years
Talk time 30 minutes
Questions After the talk, 5 minutes
2
What was migrated?
- Web SDK for cloud-based telephony
solutions
What was migrated?
- Web SDK for cloud-based telephony
solutions
- 13 KLOC, 250 kB
What was migrated?
- Web SDK for cloud-based telephony
solutions
- 13 KLOC, 250 kB
- Not a huge deal, yep? :)
What was migrated?
- Web SDK for cloud-based telephony
solutions
- 13 KLOC, 250 kB
- Not a huge deal, yep? :)
- Until the dreaded WebRTC creeps in...
Migrating Web SDK from JS to TS
Software Complexity Problem
We want to write code for our ideas.
Not the code for JavaScript.
Migration target
Migration target
TypeScript
Migration target
TypeScript
- Created by Microsoft 4 years ago
Migration target
TypeScript
- Created by Microsoft 4 years ago
- Created by the author of Delphi and C#
Migration target
TypeScript
- Created by Microsoft 4 years ago
- Created by the author of Delphi and C#
- Backward compatible with JavaScript
Migration target
TypeScript
- Created by Microsoft 4 years ago
- Created by the author of Delphi and C#
- Backward compatible with JavaScript
- NPM-based toolchain
Migration target
TypeScript
- Created by Microsoft 4 years ago
- Created by the author of Delphi and C#
- Backward compatible with JavaScript
- NPMYarn-based toolchain
Migration target
TypeScript
- Created by Microsoft 4 years ago
- Created by the author of Delphi and C#
- Backward compatible with JavaScript
- NPMYarn-based toolchain
- Adds ES6, ES7 ...
Migration target
TypeScript
- Created by Microsoft 4 years ago
- Created by the author of Delphi and C#
- Backward compatible with JavaScript
- NPMYarn-based toolchain
- Adds ES6, ES7 ES2016 ...
Migration target
TypeScript
- Created by Microsoft 4 years ago
- Created by the author of Delphi and C#
- Backward compatible with JavaScript
- NPMYarn-based toolchain
- Adds ES6, ES7 ES2016 ... and types!
Why TypeScript?
We already have:
● ES6/7/Babel
● Dart
● Flow
● Elm
● Emscripten
● CoffeeScript, after all! :)
TypeScript
Because it's from Microsoft :)
TypeScript
Because it's from Microsoft :)
TypeScript
Because it's from Microsoft :)
Because TS is actually JS
TypeScript
Because it's from Microsoft :)
Because TS is actually JS
And async
TypeScript
Because it's from Microsoft :)
Because TS is actually JS
And async
And decorators
TypeScript
Because it's from Microsoft :)
Because TS is actually JS
And async
And decorators
And interfaces
TypeScript
Because it's from Microsoft :)
Because TS is actually JS
And async
And decorators
And interfaces
And types
Types: a trap for errors
Types: a trap for errors
The main purpose of a type system is to reduce
possibilities for bugs in computer programs.
- Wikipedia
How traps work
Without a trap:
function addUser(name) { …
// somewhere in a distant place
addUser(user.name)
With a trap:
function addUser(name: string) { …
// somewhere in a distant place
addUser(user.name)
Half a year later:
// refactoring victim
addUser(id)
Half a year later:
// type check trap sprung
addUser(id)
Without a trap:
function addUser(name) { …
// somewhere in a distant place
addUser(user.name)
With a trap:
function addUser(name: string) { …
// somewhere in a distant place
addUser(user.name)
Half a year later:
// refactoring victim
addUser(id)
Half a year later:
// type check trap sprung
addUser(id)
Types pros and cons
Dynamic typing
- Development speed
- Traps spring in the future
- Trap may not be placed
automatically
Static typing
- Development speed
- Requires more thinking
- Traps spring instantly
Types cons and pros
TypeScript: gradual typing
Dynamic typing
- Development speed
- Traps spring in the future
- Trap may not be placed
automatically
Static typing
- Development speed
- Requires more thinking
- Traps spring instantly
Types cons and pros
TypeScript: gradual typing
- Add types only where you need them
Dynamic typing
- Development speed
- Traps spring in the future
- Trap may not be placed
automatically
Static typing
- Development speed
- Requires more thinking
- Traps spring instantly
Types cons and pros
TypeScript: gradual typing
- Add types only where you need them
- Fast prototyping and code modifications
Dynamic typing
- Development speed
- Traps spring in the future
- Trap may not be placed
automatically
Static typing
- Development speed
- Requires more thinking
- Traps spring instantly
Types cons and pros
TypeScript: gradual typing
- Add types only where you need them
- Fast prototyping and code modifications
- Protect the code only after it was stabilized
Dynamic typing
- Development speed
- Traps spring in the future
- Trap may not be placed
automatically
Static typing
- Development speed
- Requires more thinking
- Traps spring instantly
How we use types at Voximplant
Keep track of method contracts
How we use types at Voximplant
Keep track of method contracts
Insurance for WebRTC changes
What about clients?
Clients enjoy plain JavaScript
TypeScript ES2015 ES5
class Foo {
bar = () => {
console.log(this);
}
}
class Foo {
constructor() {
this.bar = () => {
console.log(this);
};
}
}
var Foo = (function () {
function Foo() {
var _this = this;
this.bar = function () {
console.log(_this);
};
}
return Foo;
}());
What about clients?
Even classes go fine *
TypeScript ES2015 ES5
class Foo {
bar = () => {
console.log(this);
}
}
class Foo {
constructor() {
this.bar = () => {
console.log(this);
};
}
}
var Foo = (function () {
function Foo() {
var _this = this;
this.bar = function () {
console.log(_this);
};
}
return Foo;
}());
* Unless something strange is used
But it compiles...
But it compiles...
What will happen to stack traces?
But it compiles...
What will happen to stack traces?
Everything will be fine
But it compiles...
What will happen to stack traces?
Everything will be fine
We have source maps
But it compiles...
What will happen to stack traces?
Everything will be fine
We have source maps
Resulting JavaScript is perfectly readable
What about the legacy like jQuery?
What about the legacy like jQuery?
Backward compatibility with JavaScript
What about the legacy like jQuery?
Backward compatibility with JavaScript
And types if you download them
Will it be fat and slow?
Will it be fat and slow?
Nope, plain JavaScript remains the same
Will it be fat and slow?
Nope, plain JavaScript remains the same
Extensions are compiled properly
What about Creative JavaScript?
What about Creative JavaScript?
We have that function-enum-object!
What about Сreative JavaScript?
We have that function-enum-object!
In that case, we need to use the ‘any’ keyword
Gradual transition to TS?
Gradual transition to TS?
We can compile both JS and TS input
Gradual transition to TS?
We can compile both JS and TS input
Type inference is always enabled
Gradual transition to TS?
We can compile both JS and TS input
Type inference is always enabled
Countless errors if you rename .js to .ts
Toolchain?
yarn init .
yarn install typescript
./node_modules/.bin/tsc entrypoint.ts
Are we talking about ‘entrypoint’?
- Yes, ESM modules
- Output is ESM/CJS/AMD/UMD/SystemJS
Where to get types?
"dependencies": {
"@types/jquery": "^2.0.41",
"jquery": "^2.0.41",
And if no types are available?
declare var $;
How about a build system?
How about a build system?
Any will do
How about a build system?
Any will do
Angular 2 does not use any (plain tsc)
How about a build system?
Any will do
Angular 2 does not use any (plain tsc)
We use Webpack
Continuous integration?
Continuous integration?
One word: npm
Continuous integration?
One word: npm
We use Gitlab CI
Testing?
@suite("mocha-typescript")
class Basic {
@test("should pass on assert")
asserts_pass() {
Testing?
@suite("mocha-typescript")
class Basic {
@test("should pass on assert")
asserts_pass() {
We use ‘intern’, it provides good WebDriver
support
Migrating Web SDK from JS to TS
Best things in practice
Best things in practice
Gradual typing
Best things in practice
Gradual typing
Fast experiments
Best things in practice
Gradual typing
Fast experiments
Types are introduced gradually
Compilation errors
Like in C++ 20 years ago:
Cannot find name 'foo'
Cannot find module 'foo'
Property 'bar' does not exist on type 'foo'
You need skilled developers
Otherwise the development becomes painful
Migrating Web SDK from JS to TS
Traps for errors
TypeScript pros and cons
Traps for errors
All new things from the JS world
TypeScript pros and cons
Traps for errors
All new things from the JS world
Gradual transition is possible
TypeScript pros and cons
Traps for errors
All new things from the JS world
Gradual transition is possible
Supported by Microsoft
TypeScript pros and cons
Traps for errors
All new things from the JS world
Gradual transition is possible
Supported by Microsoft
npm ecosystem
TypeScript pros and cons
Traps for errors
All new things from the JS world
Gradual transition is possible
Supported by Microsoft
npm ecosystem
Traps need to be placed manually
TypeScript pros and cons
Traps for errors
All new things from the JS world
Gradual transition is possible
Supported by Microsoft
npm ecosystem
Traps need to be placed manually
Error messages from hell
TypeScript pros and cons
Traps for errors
All new things from the JS world
Gradual transition is possible
Supported by Microsoft
npm ecosystem
Traps need to be placed manually
Error messages from hell
You need strong developers
TypeScript pros and cons
Traps for errors
All new things from the JS world
Gradual transition is possible
Supported by Microsoft
npm ecosystem
Traps need to be placed manually
Error messages from hell
You need strong developers
Not everything can be migrated well
TypeScript pros and cons
Traps for errors
All new things from the JS world
Gradual transition is possible
Supported by Microsoft
npm ecosystem
Traps need to be placed manually
Error messages from hell
You need strong developers
Not everything can be migrated well
Not everything has ready-made types
TypeScript pros and cons
Migrating Web SDK from JS to TS
Lessons learned by Voximplant
Lessons learned by Voximplant
- Contracts, interfaces, traps
Lessons learned by Voximplant
- Contracts, interfaces, traps
- 3 man-months
Lessons learned by Voximplant
- Contracts, interfaces, traps
- 3 man-months
- 250 kB → 800 kB
Lessons learned by Voximplant
- Contracts, interfaces, traps
- 3 man-months
- 250 kB → 800 kB
- 12 KLOC → 20 KLOC
That's all!
Questions?
Grigory Petrov
grigory.v.p@gmail.com
https://twitter.com/grigoryvp
https://facebook.com/grigoryvp
96

More Related Content

Similar to Migrating Web SDK from JS to TS (20)

TypeScript
TypeScriptTypeScript
TypeScript
Saray Chak
 
[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...
[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...
[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...
DevDay Da Nang
 
An Introduction to TypeScript
An Introduction to TypeScriptAn Introduction to TypeScript
An Introduction to TypeScript
WrapPixel
 
Introjs10.5.17SD
Introjs10.5.17SDIntrojs10.5.17SD
Introjs10.5.17SD
Thinkful
 
Scaling Machine Learning Systems up to Billions of Predictions per Day
Scaling Machine Learning Systems up to Billions of Predictions per DayScaling Machine Learning Systems up to Billions of Predictions per Day
Scaling Machine Learning Systems up to Billions of Predictions per Day
Carmine Paolino
 
How To Do Kick-Ass Software Development, by Sven Peters
How To Do Kick-Ass Software Development, by Sven PetersHow To Do Kick-Ass Software Development, by Sven Peters
How To Do Kick-Ass Software Development, by Sven Peters
ZeroTurnaround
 
Overboard.js - where are we going with with jsconfasia / devfestasia
Overboard.js - where are we going with with jsconfasia / devfestasiaOverboard.js - where are we going with with jsconfasia / devfestasia
Overboard.js - where are we going with with jsconfasia / devfestasia
Christian Heilmann
 
Progressive Enhancement & Intentional Degradation 2
Progressive Enhancement & Intentional Degradation 2Progressive Enhancement & Intentional Degradation 2
Progressive Enhancement & Intentional Degradation 2
elliotjaystocks
 
PHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the foolPHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the fool
Alessandro Cinelli (cirpo)
 
PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...
PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...
PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...
Codemotion
 
TypeScript: Angular's Secret Weapon
TypeScript: Angular's Secret WeaponTypeScript: Angular's Secret Weapon
TypeScript: Angular's Secret Weapon
Laurent Duveau
 
Back to the future: Isomorphic javascript applications
Back to the future:  Isomorphic javascript applicationsBack to the future:  Isomorphic javascript applications
Back to the future: Isomorphic javascript applications
Luciano Colosio
 
Javascript leverage: Isomorphic Applications by Luciano Colosio at Codemotion...
Javascript leverage: Isomorphic Applications by Luciano Colosio at Codemotion...Javascript leverage: Isomorphic Applications by Luciano Colosio at Codemotion...
Javascript leverage: Isomorphic Applications by Luciano Colosio at Codemotion...
Codemotion Dubai
 
Type script vs javascript come face to face in battleground
Type script vs javascript come face to face in battlegroundType script vs javascript come face to face in battleground
Type script vs javascript come face to face in battleground
Katy Slemon
 
Notes (2012-06-08)
Notes (2012-06-08)Notes (2012-06-08)
Notes (2012-06-08)
Chris Pitt
 
A Gentle introduction to Web Development & Django
A Gentle introduction to Web Development & DjangoA Gentle introduction to Web Development & Django
A Gentle introduction to Web Development & Django
PRASANNAVENK
 
"Generating Types without climbing a tree", Matteo Collina
"Generating Types without climbing a tree", Matteo Collina "Generating Types without climbing a tree", Matteo Collina
"Generating Types without climbing a tree", Matteo Collina
Fwdays
 
TypeScript: Angular's Secret Weapon
TypeScript: Angular's Secret WeaponTypeScript: Angular's Secret Weapon
TypeScript: Angular's Secret Weapon
Laurent Duveau
 
TypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack DevelopersTypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack Developers
Rutenis Turcinas
 
Ruby in the Browser - RubyConf 2011
Ruby in the Browser - RubyConf 2011Ruby in the Browser - RubyConf 2011
Ruby in the Browser - RubyConf 2011
Ilya Grigorik
 
[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...
[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...
[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...
DevDay Da Nang
 
An Introduction to TypeScript
An Introduction to TypeScriptAn Introduction to TypeScript
An Introduction to TypeScript
WrapPixel
 
Introjs10.5.17SD
Introjs10.5.17SDIntrojs10.5.17SD
Introjs10.5.17SD
Thinkful
 
Scaling Machine Learning Systems up to Billions of Predictions per Day
Scaling Machine Learning Systems up to Billions of Predictions per DayScaling Machine Learning Systems up to Billions of Predictions per Day
Scaling Machine Learning Systems up to Billions of Predictions per Day
Carmine Paolino
 
How To Do Kick-Ass Software Development, by Sven Peters
How To Do Kick-Ass Software Development, by Sven PetersHow To Do Kick-Ass Software Development, by Sven Peters
How To Do Kick-Ass Software Development, by Sven Peters
ZeroTurnaround
 
Overboard.js - where are we going with with jsconfasia / devfestasia
Overboard.js - where are we going with with jsconfasia / devfestasiaOverboard.js - where are we going with with jsconfasia / devfestasia
Overboard.js - where are we going with with jsconfasia / devfestasia
Christian Heilmann
 
Progressive Enhancement & Intentional Degradation 2
Progressive Enhancement & Intentional Degradation 2Progressive Enhancement & Intentional Degradation 2
Progressive Enhancement & Intentional Degradation 2
elliotjaystocks
 
PHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the foolPHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the fool
Alessandro Cinelli (cirpo)
 
PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...
PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...
PHP is the king, nodejs is the prince and Python is the fool - Alessandro Cin...
Codemotion
 
TypeScript: Angular's Secret Weapon
TypeScript: Angular's Secret WeaponTypeScript: Angular's Secret Weapon
TypeScript: Angular's Secret Weapon
Laurent Duveau
 
Back to the future: Isomorphic javascript applications
Back to the future:  Isomorphic javascript applicationsBack to the future:  Isomorphic javascript applications
Back to the future: Isomorphic javascript applications
Luciano Colosio
 
Javascript leverage: Isomorphic Applications by Luciano Colosio at Codemotion...
Javascript leverage: Isomorphic Applications by Luciano Colosio at Codemotion...Javascript leverage: Isomorphic Applications by Luciano Colosio at Codemotion...
Javascript leverage: Isomorphic Applications by Luciano Colosio at Codemotion...
Codemotion Dubai
 
Type script vs javascript come face to face in battleground
Type script vs javascript come face to face in battlegroundType script vs javascript come face to face in battleground
Type script vs javascript come face to face in battleground
Katy Slemon
 
Notes (2012-06-08)
Notes (2012-06-08)Notes (2012-06-08)
Notes (2012-06-08)
Chris Pitt
 
A Gentle introduction to Web Development & Django
A Gentle introduction to Web Development & DjangoA Gentle introduction to Web Development & Django
A Gentle introduction to Web Development & Django
PRASANNAVENK
 
"Generating Types without climbing a tree", Matteo Collina
"Generating Types without climbing a tree", Matteo Collina "Generating Types without climbing a tree", Matteo Collina
"Generating Types without climbing a tree", Matteo Collina
Fwdays
 
TypeScript: Angular's Secret Weapon
TypeScript: Angular's Secret WeaponTypeScript: Angular's Secret Weapon
TypeScript: Angular's Secret Weapon
Laurent Duveau
 
TypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack DevelopersTypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack Developers
Rutenis Turcinas
 
Ruby in the Browser - RubyConf 2011
Ruby in the Browser - RubyConf 2011Ruby in the Browser - RubyConf 2011
Ruby in the Browser - RubyConf 2011
Ilya Grigorik
 

Recently uploaded (20)

And overview of Nasdanika Models and their applications
And overview of Nasdanika Models and their applicationsAnd overview of Nasdanika Models and their applications
And overview of Nasdanika Models and their applications
Pavel Vlasov
 
Portland Marketo User Group: MOPs & AI - Jeff Canada - May 2025
Portland Marketo User Group: MOPs & AI - Jeff Canada - May 2025Portland Marketo User Group: MOPs & AI - Jeff Canada - May 2025
Portland Marketo User Group: MOPs & AI - Jeff Canada - May 2025
BradBedford3
 
Climate-Smart Agriculture Development Solution.pptx
Climate-Smart Agriculture Development Solution.pptxClimate-Smart Agriculture Development Solution.pptx
Climate-Smart Agriculture Development Solution.pptx
julia smits
 
Offensive Security Penetration Testing
Offensive Security Penetration Testing        Offensive Security Penetration Testing
Offensive Security Penetration Testing
Purple Box
 
Intranet Examples That Are Changing the Way We Work
Intranet Examples That Are Changing the Way We WorkIntranet Examples That Are Changing the Way We Work
Intranet Examples That Are Changing the Way We Work
BizPortals Solutions
 
Why-Choose-an-Authorised-Microsoft-Reseller.pptx
Why-Choose-an-Authorised-Microsoft-Reseller.pptxWhy-Choose-an-Authorised-Microsoft-Reseller.pptx
Why-Choose-an-Authorised-Microsoft-Reseller.pptx
Michael cole
 
Feeling Lost in the Blue? Exploring a New Path: AI Mental Health Counselling ...
Feeling Lost in the Blue? Exploring a New Path: AI Mental Health Counselling ...Feeling Lost in the Blue? Exploring a New Path: AI Mental Health Counselling ...
Feeling Lost in the Blue? Exploring a New Path: AI Mental Health Counselling ...
officeiqai
 
Multiple Platforms of Unity Game Development.pdf
Multiple Platforms of Unity Game Development.pdfMultiple Platforms of Unity Game Development.pdf
Multiple Platforms of Unity Game Development.pdf
Nova Carter
 
VFP-Report-Copy-Data-Environment details
VFP-Report-Copy-Data-Environment detailsVFP-Report-Copy-Data-Environment details
VFP-Report-Copy-Data-Environment details
manojbkalla
 
Delivering More with Less: AI Driven Resource Management with OnePlan
Delivering More with Less: AI Driven Resource Management with OnePlan Delivering More with Less: AI Driven Resource Management with OnePlan
Delivering More with Less: AI Driven Resource Management with OnePlan
OnePlan Solutions
 
How to Recover Hacked Gmail Account || Help Email Tales
How to Recover Hacked Gmail Account || Help Email TalesHow to Recover Hacked Gmail Account || Help Email Tales
How to Recover Hacked Gmail Account || Help Email Tales
Roger Reed
 
Top 10 Mobile Banking Apps in the USA.pdf
Top 10 Mobile Banking Apps in the USA.pdfTop 10 Mobile Banking Apps in the USA.pdf
Top 10 Mobile Banking Apps in the USA.pdf
LL Technolab
 
Software Risk and Quality management.pptx
Software Risk and Quality management.pptxSoftware Risk and Quality management.pptx
Software Risk and Quality management.pptx
HassanBangash9
 
Oliveira2024 - Combining GPT and Weak Supervision.pdf
Oliveira2024 - Combining GPT and Weak Supervision.pdfOliveira2024 - Combining GPT and Weak Supervision.pdf
Oliveira2024 - Combining GPT and Weak Supervision.pdf
GiliardGodoi1
 
Risk Management in Software Projects: Identifying, Analyzing, and Controlling...
Risk Management in Software Projects: Identifying, Analyzing, and Controlling...Risk Management in Software Projects: Identifying, Analyzing, and Controlling...
Risk Management in Software Projects: Identifying, Analyzing, and Controlling...
gauravvmanchandaa200
 
How to Create a White Label Crypto Exchange.pdf
How to Create a White Label Crypto Exchange.pdfHow to Create a White Label Crypto Exchange.pdf
How to Create a White Label Crypto Exchange.pdf
zak jasper
 
Microsoft Defender para ponto de extremidade
Microsoft Defender para ponto de extremidadeMicrosoft Defender para ponto de extremidade
Microsoft Defender para ponto de extremidade
leotcerveira
 
Salesforce Experience Cloud Consulting.pdf
Salesforce Experience Cloud Consulting.pdfSalesforce Experience Cloud Consulting.pdf
Salesforce Experience Cloud Consulting.pdf
VALiNTRY360
 
Scalefusion Remote Access for Apple Devices
Scalefusion Remote Access for Apple DevicesScalefusion Remote Access for Apple Devices
Scalefusion Remote Access for Apple Devices
Scalefusion
 
Top 5 Odoo Modules for the EPC Industry.pdf
Top 5 Odoo Modules for the EPC Industry.pdfTop 5 Odoo Modules for the EPC Industry.pdf
Top 5 Odoo Modules for the EPC Industry.pdf
SatishKumar2651
 
And overview of Nasdanika Models and their applications
And overview of Nasdanika Models and their applicationsAnd overview of Nasdanika Models and their applications
And overview of Nasdanika Models and their applications
Pavel Vlasov
 
Portland Marketo User Group: MOPs & AI - Jeff Canada - May 2025
Portland Marketo User Group: MOPs & AI - Jeff Canada - May 2025Portland Marketo User Group: MOPs & AI - Jeff Canada - May 2025
Portland Marketo User Group: MOPs & AI - Jeff Canada - May 2025
BradBedford3
 
Climate-Smart Agriculture Development Solution.pptx
Climate-Smart Agriculture Development Solution.pptxClimate-Smart Agriculture Development Solution.pptx
Climate-Smart Agriculture Development Solution.pptx
julia smits
 
Offensive Security Penetration Testing
Offensive Security Penetration Testing        Offensive Security Penetration Testing
Offensive Security Penetration Testing
Purple Box
 
Intranet Examples That Are Changing the Way We Work
Intranet Examples That Are Changing the Way We WorkIntranet Examples That Are Changing the Way We Work
Intranet Examples That Are Changing the Way We Work
BizPortals Solutions
 
Why-Choose-an-Authorised-Microsoft-Reseller.pptx
Why-Choose-an-Authorised-Microsoft-Reseller.pptxWhy-Choose-an-Authorised-Microsoft-Reseller.pptx
Why-Choose-an-Authorised-Microsoft-Reseller.pptx
Michael cole
 
Feeling Lost in the Blue? Exploring a New Path: AI Mental Health Counselling ...
Feeling Lost in the Blue? Exploring a New Path: AI Mental Health Counselling ...Feeling Lost in the Blue? Exploring a New Path: AI Mental Health Counselling ...
Feeling Lost in the Blue? Exploring a New Path: AI Mental Health Counselling ...
officeiqai
 
Multiple Platforms of Unity Game Development.pdf
Multiple Platforms of Unity Game Development.pdfMultiple Platforms of Unity Game Development.pdf
Multiple Platforms of Unity Game Development.pdf
Nova Carter
 
VFP-Report-Copy-Data-Environment details
VFP-Report-Copy-Data-Environment detailsVFP-Report-Copy-Data-Environment details
VFP-Report-Copy-Data-Environment details
manojbkalla
 
Delivering More with Less: AI Driven Resource Management with OnePlan
Delivering More with Less: AI Driven Resource Management with OnePlan Delivering More with Less: AI Driven Resource Management with OnePlan
Delivering More with Less: AI Driven Resource Management with OnePlan
OnePlan Solutions
 
How to Recover Hacked Gmail Account || Help Email Tales
How to Recover Hacked Gmail Account || Help Email TalesHow to Recover Hacked Gmail Account || Help Email Tales
How to Recover Hacked Gmail Account || Help Email Tales
Roger Reed
 
Top 10 Mobile Banking Apps in the USA.pdf
Top 10 Mobile Banking Apps in the USA.pdfTop 10 Mobile Banking Apps in the USA.pdf
Top 10 Mobile Banking Apps in the USA.pdf
LL Technolab
 
Software Risk and Quality management.pptx
Software Risk and Quality management.pptxSoftware Risk and Quality management.pptx
Software Risk and Quality management.pptx
HassanBangash9
 
Oliveira2024 - Combining GPT and Weak Supervision.pdf
Oliveira2024 - Combining GPT and Weak Supervision.pdfOliveira2024 - Combining GPT and Weak Supervision.pdf
Oliveira2024 - Combining GPT and Weak Supervision.pdf
GiliardGodoi1
 
Risk Management in Software Projects: Identifying, Analyzing, and Controlling...
Risk Management in Software Projects: Identifying, Analyzing, and Controlling...Risk Management in Software Projects: Identifying, Analyzing, and Controlling...
Risk Management in Software Projects: Identifying, Analyzing, and Controlling...
gauravvmanchandaa200
 
How to Create a White Label Crypto Exchange.pdf
How to Create a White Label Crypto Exchange.pdfHow to Create a White Label Crypto Exchange.pdf
How to Create a White Label Crypto Exchange.pdf
zak jasper
 
Microsoft Defender para ponto de extremidade
Microsoft Defender para ponto de extremidadeMicrosoft Defender para ponto de extremidade
Microsoft Defender para ponto de extremidade
leotcerveira
 
Salesforce Experience Cloud Consulting.pdf
Salesforce Experience Cloud Consulting.pdfSalesforce Experience Cloud Consulting.pdf
Salesforce Experience Cloud Consulting.pdf
VALiNTRY360
 
Scalefusion Remote Access for Apple Devices
Scalefusion Remote Access for Apple DevicesScalefusion Remote Access for Apple Devices
Scalefusion Remote Access for Apple Devices
Scalefusion
 
Top 5 Odoo Modules for the EPC Industry.pdf
Top 5 Odoo Modules for the EPC Industry.pdfTop 5 Odoo Modules for the EPC Industry.pdf
Top 5 Odoo Modules for the EPC Industry.pdf
SatishKumar2651
 

Migrating Web SDK from JS to TS