SlideShare ist ein Scribd-Unternehmen logo
1 von 55
Downloaden Sie, um offline zu lesen
Test First!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!
requirement -> code!

test!
requirement -> test!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
! Refactor!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
requirement -> test! <- code!
!
Test First!
!
Faster feedback!
Code coverage!
Effective tests!
Better Code!
Refactoring!
Productivity!
Documentation!
Confidence!
Test first?!
Everybody!!
Email validation!
/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/!
Valid email addresses!
email@domain.com!
firstname.lastname@domain.com!
email@subdomain.domain.com!
firstname+lastname@domain.com!
email@123.123.123.123!
email@[123.123.123.123]!
"email"@domain.com!
1234567890@domain.com!
email@domain-one.com!
_______@domain.com!
email@domain.name!
email@domain.co.jp!
firstname-lastname@domain.com!

Invalid email addresses!
#@%^%#$@#$@#.com!
@domain.com!
Joe Smith <email@domain.com>!
email.domain.com!
email@domain@domain.com!
.email@domain.com!
email.@domain.com!
email..email@domain.com!
email@domain!
email@-domain.com!
email@domain.web!
email@111.222.333.44444!
email@domain..com!
Merge load more data!
- (void)mergeData:(NSDictionary *)response!
intoStream:(NUSStream *)stream;!
Merge load more data!
testMergeData_ShouldUpdateLoadMoreUrl_WhenItExis
tsInTheResponse();!
!
testMergeData_ShouldClearExistingLoadMoreUrl_Whe
nItDoesNotExistInTheResponse();!
!
testMergeData_ShouldMergePYMKInOrder_WhenTheResp
onseHasPYMKData();!
!
testMergeData_ShouldNotCrash_WhenResponseDataHav
eEmptyValues();!
!

!

//edge case!
testMergeData_ShouldNotCrash_WhenResponseDataIsI
nvalid();!
Merge load more data!
testMergeData_ShouldUpdateLoadMoreUrl_WhenItExis
tsInTheResponse();!
!
testMergeData_ShouldClearExistingLoadMoreUrl_Whe
nItDoesNotExistInTheResponse();!
!
testMergeData_ShouldMergePYMKInOrder_WhenTheResp
onseHasPYMKData();!
!
testMergeData_ShouldNotCrash_WhenResponseDataHav
eEmptyValues();!
!

!

//edge case!
testMergeData_ShouldNotCrash_WhenResponseDataIsI
nvalid();!
Faster feedback!
Faster feedback!
The code you just wrote isn’t doing
what you think.!
The line you just removed will break
PYMK load more functionality.!
Are you crazy? If you remove that
conditional check, it would break apps
with > 7.0 iOS versions.!
Code coverage!
Code coverage!
function save(input) {!
if (isValid(input)) {!
if (lixEnabled()) {!
" " logger.info(‘new save’);!
newSave(input);!
} else {!
logger.info(‘old save’);!
if (input.type === ‘x’) {!
oldXSave(input);!
} else {!
oldYSave(input);!
}!
}!
}!
}!
Code coverage!

// SaveHelper.js!
function save(input);!
!
!
// SaveHelperSpec.js!
testSave();!
Code coverage!
// SaveHelper.js!
function save(input);!
!

!

!

!

!

// SaveHelperSpec.js!
testSave_ShouldNotSave_WhenInputIsInvalid();!
Code coverage!
// SaveHelper.js!
function save(input);!
!

!

!

!

// SaveHelperSpec.js!
testSave_ShouldNotSave_WhenInputIsInvalid();!
testSave_ShouldUseNewAPI_WhenLixEnabled();!
Code coverage!
// SaveHelper.js!
function save(input);!
!

!

!

// SaveHelperSpec.js!
testSave_ShouldNotSave_WhenInputIsInvalid();!
testSave_ShouldUseNewAPI_WhenLixEnabled();!
testSave_ShouldUseOldAPI_WhenLixDisabled();!
Code coverage!
// SaveHelper.js!
function save(input);!
!

!

// SaveHelperSpec.js!
testSave_ShouldNotSave_WhenInputIsInvalid();!
testSave_ShouldUseNewAPI_WhenLixEnabled();!
testSave_ShouldUseOldAPI_WhenLixDisabled();!
testSave_ShouldUseOldXAPI_WhenInputTypeIsX();!
Code coverage!
// SaveHelper.js!
function save(input);!
!
// SaveHelperSpec.js!
testSave_ShouldNotSave_WhenInputIsInvalid();!
testSave_ShouldUseNewAPI_WhenLixEnabled();!
testSave_ShouldUseOldAPI_WhenLixDisabled();!
testSave_ShouldUseOldXAPI_WhenInputTypeIsX();!
testSave_ShouldUseOldYAPI_WhenInputTypeIsY();!
Code coverage!
// SaveHelper.js!
function save(input);!
!
// SaveHelperSpec.js!
testSave_ShouldNotSave_WhenInputIsInvalid();!
testSave_ShouldUseNewAPI_WhenLixEnabled();!
testSave_ShouldUseOldAPI_WhenLixDisabled();!
testSave_ShouldUseOldXAPI_WhenInputTypeIsX();!
testSave_ShouldUseOldYAPI_WhenInputTypeIsY();!
Effective tests!

Fail when the functionality breaks!
!
KISS!
!
Test functionality, not the
implementation.!
!
Don’t repeat your code in test.!
Effective tests!
Fail when the functionality breaks!
// code!
paymentService = util.getPS();!
paymentService.submit();!
!
!

!

!

// unit test assertion!
util.stub(‘getPS’).returns(mockService);!
mockService.expect(‘submit’);!
Effective tests!
Fail when the functionality breaks!
// code!
paymentService = util.getPS();!
paymentService.submit();!
!
!
// unit test assertion!
util.stub(‘getPS’).returns(mockService);!
mockService.expect(‘submit’);!
!
forgot to verify!!
Effective tests!
Keep It Simple Stupid!
// unit test assertion!
assert(“m_sim2_guided_edit_photo_add_actionsh
eet_camera_tap_use_photo”, result);!
!
" " " " " " "(vs)!
!
assert(metricsRevisionPrefix + pageKey +
widget + actionVerb + name, result);!
Effective tests!
Test functionality, not the implementation.!
void addNewRow(row) {!
. . .!
row.setDisplay(“block”);!
row.setPaddingTop(0);!
row.setMargin(0);!
}!
!

!

!

!

unit test type 1!
verify(rowMock).setDisplay(“block”);!
verify(rowMock).setPaddingTop(0);!
Verify(rowMock).setMargin(0);!
Effective tests!
Test functionality, not the implementation.!
void addNewRow(row) {!
. . .!
row.setDisplay(“block”);!
row.setPaddingTop(0);!
row.setMargin(0);!
}!
!
unit test type 1!
verify(rowMock).setDisplay(“block”);!
verify(rowMock).setPaddingTop(0);!
Verify(rowMock).setMargin(0);!
!
unit test type 2!
assertTrue(lastRow.bottom === newRow.top);!
Effective tests!
Don’t repeat your code in the test!
String getDateForDisplay() {!
Date date = service.loadDate();!
SimpleDateFormat dateFormat !
= newSimpleDateFormat("yyyy-MM-dd z");!
return dateFormat.format(date);!
}!
!
// unit test!
assertEquals(“2014-02-02 PST”, result);!
!
assertEquals(new SimpleDateFormat(“yyyy-MM-dd
z”).format(expectedDate), result);!
Better code!
Testable!
!
Modular!
!
Loosely coupled!
!
Singletons !
!
Law of Demeter"!
!
Complexity!
Refactoring!
Restructuring code without
changing its functionality!
!
!
Refactoring now & later!
!
!
Migration projects!
Productivity!
Faster Feedback!
!
No wasting time with debugger!
!
Avoid dependencies!
!
Save time now and later!
!
It doesn’t slow you down!
Productivity!
Documentation!

Working examples of code!
Documentation!

Working examples of code!
Tests won’t get outdated!
Confidence!
When you develop new features!
When you handover your work!
Try it! And you’ll feel it!!
Test First!
!
Faster feedback!
Code coverage!
Effective tests!
Better Code!
Refactoring!
Productivity!
Documentation!
Confidence!
Thank you!!

Weitere ähnliche Inhalte

Ähnlich wie Test First

2013-06-25 - HTML5 & JavaScript Security
2013-06-25 - HTML5 & JavaScript Security2013-06-25 - HTML5 & JavaScript Security
2013-06-25 - HTML5 & JavaScript SecurityJohannes Hoppe
 
Turn your spaghetti code into ravioli with JavaScript modules
Turn your spaghetti code into ravioli with JavaScript modulesTurn your spaghetti code into ravioli with JavaScript modules
Turn your spaghetti code into ravioli with JavaScript modulesjerryorr
 
Testing Web Applications
Testing Web ApplicationsTesting Web Applications
Testing Web ApplicationsSeth McLaughlin
 
How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014Guillaume POTIER
 
Practical unit testing 2014
Practical unit testing 2014Practical unit testing 2014
Practical unit testing 2014Andrew Fray
 
Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...
Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...
Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...Garage4hackers.com
 
Developer Job in Practice
Developer Job in PracticeDeveloper Job in Practice
Developer Job in Practiceintive
 
Automated Frontend Testing
Automated Frontend TestingAutomated Frontend Testing
Automated Frontend TestingNeil Crosby
 
RubyConf Portugal 2014 - Why ruby must go!
RubyConf Portugal 2014 - Why ruby must go!RubyConf Portugal 2014 - Why ruby must go!
RubyConf Portugal 2014 - Why ruby must go!Gautam Rege
 
Zero to Testing in JavaScript
Zero to Testing in JavaScriptZero to Testing in JavaScript
Zero to Testing in JavaScriptpamselle
 
Test-driven development with TYPO3 (T3CON10)
Test-driven development with TYPO3 (T3CON10)Test-driven development with TYPO3 (T3CON10)
Test-driven development with TYPO3 (T3CON10)Oliver Klee
 
Unit Testing JavaScript Applications
Unit Testing JavaScript ApplicationsUnit Testing JavaScript Applications
Unit Testing JavaScript ApplicationsYnon Perek
 
Building Isomorphic Apps (JSConf.Asia 2014)
Building Isomorphic Apps (JSConf.Asia 2014)Building Isomorphic Apps (JSConf.Asia 2014)
Building Isomorphic Apps (JSConf.Asia 2014)Spike Brehm
 
Model-Driven Testing For Agile Teams
Model-Driven Testing For Agile TeamsModel-Driven Testing For Agile Teams
Model-Driven Testing For Agile TeamsKerryKimbrough
 
PVS-Studio and static code analysis technique
PVS-Studio and static code analysis techniquePVS-Studio and static code analysis technique
PVS-Studio and static code analysis techniqueAndrey Karpov
 
Unit testing for the TYPO3 4.x core (T3DD10)
Unit testing for the TYPO3 4.x core (T3DD10)Unit testing for the TYPO3 4.x core (T3DD10)
Unit testing for the TYPO3 4.x core (T3DD10)Oliver Klee
 
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
JAVASCRIPT TDD(Test driven Development) & Qunit TutorialJAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
JAVASCRIPT TDD(Test driven Development) & Qunit TutorialAnup Singh
 

Ähnlich wie Test First (20)

2013-06-25 - HTML5 & JavaScript Security
2013-06-25 - HTML5 & JavaScript Security2013-06-25 - HTML5 & JavaScript Security
2013-06-25 - HTML5 & JavaScript Security
 
Turn your spaghetti code into ravioli with JavaScript modules
Turn your spaghetti code into ravioli with JavaScript modulesTurn your spaghetti code into ravioli with JavaScript modules
Turn your spaghetti code into ravioli with JavaScript modules
 
Testing Web Applications
Testing Web ApplicationsTesting Web Applications
Testing Web Applications
 
How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014
 
Practical unit testing 2014
Practical unit testing 2014Practical unit testing 2014
Practical unit testing 2014
 
Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...
Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...
Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...
 
Developer Job in Practice
Developer Job in PracticeDeveloper Job in Practice
Developer Job in Practice
 
Automated Frontend Testing
Automated Frontend TestingAutomated Frontend Testing
Automated Frontend Testing
 
Mocking - Visug session
Mocking - Visug sessionMocking - Visug session
Mocking - Visug session
 
RubyConf Portugal 2014 - Why ruby must go!
RubyConf Portugal 2014 - Why ruby must go!RubyConf Portugal 2014 - Why ruby must go!
RubyConf Portugal 2014 - Why ruby must go!
 
Zero to Testing in JavaScript
Zero to Testing in JavaScriptZero to Testing in JavaScript
Zero to Testing in JavaScript
 
Test-driven development with TYPO3 (T3CON10)
Test-driven development with TYPO3 (T3CON10)Test-driven development with TYPO3 (T3CON10)
Test-driven development with TYPO3 (T3CON10)
 
Writing clean code
Writing clean codeWriting clean code
Writing clean code
 
Unit Testing JavaScript Applications
Unit Testing JavaScript ApplicationsUnit Testing JavaScript Applications
Unit Testing JavaScript Applications
 
Web Application Defences
Web Application DefencesWeb Application Defences
Web Application Defences
 
Building Isomorphic Apps (JSConf.Asia 2014)
Building Isomorphic Apps (JSConf.Asia 2014)Building Isomorphic Apps (JSConf.Asia 2014)
Building Isomorphic Apps (JSConf.Asia 2014)
 
Model-Driven Testing For Agile Teams
Model-Driven Testing For Agile TeamsModel-Driven Testing For Agile Teams
Model-Driven Testing For Agile Teams
 
PVS-Studio and static code analysis technique
PVS-Studio and static code analysis techniquePVS-Studio and static code analysis technique
PVS-Studio and static code analysis technique
 
Unit testing for the TYPO3 4.x core (T3DD10)
Unit testing for the TYPO3 4.x core (T3DD10)Unit testing for the TYPO3 4.x core (T3DD10)
Unit testing for the TYPO3 4.x core (T3DD10)
 
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
JAVASCRIPT TDD(Test driven Development) & Qunit TutorialJAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
 

Kürzlich hochgeladen

Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 

Kürzlich hochgeladen (20)

Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 

Test First