SlideShare a Scribd company logo
1 of 86
Download to read offline
Development Workflow
Tools for Open-Source
PHP Libraries
Greg Anderson
@greg_1_anderson
Drupal Site
Drupal Module
Re-usable PHP Library
http://robo.li/framework/
{
"name": "drupal/lcache",
"description": "LCache module.",
"type": "drupal-module",
"license": "GPLv2",
"require": {
"lcache/lcache": "0.3.*"
}
}
● Add a minimal composer.json to module
● Use Composer to manage Drupal site
○ drupal-composer/drupal-project
REPEAT
HOWEVER, we also need:
● Collaboration
● Reproducibility
● Analysis of
○ Test coverage
○ Code Quality
○ Open Source License Compliance
● Documentation
https://xkcd.com/1205/
Collaborate with other engineers across multiple branches.
Keep a record of all work done.
Integrate With All Of The Things.
Run tests and
other tasks.
Calculate test
coverage.
Analyze code
complexity.
Track dependency
versions and licenses.
Package manager
for composer.
Publish documentation
site from markdown.
●
●
●
http://dilbert.com/strip/1996-01-31
●
○
○
●
○
○
○
●
https://github.com
$ git clone … working-copy
$ cd working-copy
$ git checkout -b mywork
$ git add -A .
$ git commit -m "Awesomesauce."
$ git push origin mywork
https://github.com/matiassingers/awesome-readme
●
●
●
●
●
●
●
### Steps to reproduce
What did you do?
### Expected behavior
Tell us what should happen
### Actual behavior
Tell us what happens instead
### Overview
This pull request:
- [ ] Fixes a bug
- [ ] Adds a feature
- [ ] Breaks backwards compat
- [ ] Has tests covering changes
### Description
Any additional information.
.github/pull_request_template.md.github/issue_template.md
●
○
●
○
○
https://packagist.org
{
"name": "consolidation/bootstrap",
"description": "Locate and bootstrap components ...",
"autoload":{
"psr-4":{
"ConsolidationBootstrap": "src"
}
},
"require": {
"php": ">=5.5.0",
"psr/log": "~1.0",
"symfony/console": "~2.5|~3.0"
},
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
}
}
https://packagist.org/search/?type=drupal-drush
https://poser.pugx.org
●
○
○
●
○ phpunit.xml.dist
○
○ composer install --prefer dist
○
○
○ composer.lock
○ Provide scripts to run tests locally
https://travis-ci.org
<phpunit bootstrap="vendor/autoload.php" colors="true">
<testsuites>
<testsuite name="annotation-command">
<directory prefix="test" suffix=".php">tests</directory>
</testsuite>
</testsuites>
</phpunit>
$ composer require squizlabs/php_codesniffer
language: php
php:
- 7.0
- 5.6
- 5.5
- 5.4
before_script:
- composer install --prefer-dist
script:
- vendor/bin/phpunit
- vendor/bin/phpcs --standard=PSR2 -n src
branches:
# Only test the master branch and SemVer tags.
only:
- master
- /^[[:digit:]]+.[[:digit:]]+.[[:digit:]]+.*$/
sudo: false
cache:
directories:
- $HOME/.composer/cache
matrix:
include:
- php: 7.0
env: deps=highest
- php: 5.6
- php: 5.5
- php: 5.4
env: deps=lowest
before_script:
- if [ -z "$deps" ]; then composer install --prefer-dist; fi;
- if [ "$deps" = "lowest" ]; then composer update --prefer-dist --prefer-lowest -n; fi;
- if [ "$deps" = "highest" ]; then composer update --prefer-dist -n; fi;
https://blog.wyrihaximus.net/2015/06/test-lowest-current-and-highest-possible-on-travis/
Define a box.json file to define phar contents, then run:
$ composer require kherge/box
$ vendor/bin/box build .
{
"alias": "robo.phar",
"chmod": "0755",
"compactors": ["HerreraBoxCompactorPhp"],
"directories": ["src"],
"files": ["RoboFile.php"],
"finder": [
{
"name": [ "*.php", "*.exe", "GeneratedWrapper.tmpl" ],
"exclude": [ "test", "tests", "Test", "Tests", "Tester" ],
"in": "vendor"
}
],
"git-commit": "git-commit",
"git-version": "git-version",
"output": "robo.phar",
"main": "robo",
"stub": true
}
https://github.com/consolidation/Robo/pull/411
# Prior to a deploy, build a fresh robo.phar
before_deploy:
- vendor/bin/box build .
deploy:
provider: releases
api_key:
secure: REPLACE_WITH_OAUTH_TOKEN
file: robo.phar
skip_cleanup: true
on:
tags: true
https://help.github.com/articles/creating-an-access-token-for-command-line-use/
{
"name": "consolidation/annotated-command",
"scripts": {
"phar": "vendor/bin/box build .",
"cs": "phpcs --standard=PSR2 -n src",
"cbf": "phpcbf --standard=PSR2 -n src",
"unit": "SHELL_INTERACTIVE=true phpunit --colors=always",
"test": [
"@unit",
"@cs"
]
}
}
Paste in badge image URLs
any place HTML can be
rendered (e.g. wiki pages) to
create summary pages.
●
○
○
●
○
https://coveralls.io
<phpunit bootstrap="vendor/autoload.php" colors="true">
…
<logging>
<!-- <log type="coverage-html" target="build/logs/coverage" lowUpperBound="35"
highLowerBound="70"/> -->
<log type="coverage-clover" target="build/logs/clover.xml"/>
</logging>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">src</directory>
</whitelist>
</filter>
</phpunit>
$ brew install php70-xdebug
$ composer require satooshi/php-coveralls
after_success:
- travis_retry php vendor/bin/coveralls -v
●
○
○
●
○
○
○
○
○
https://scrutinizer-ci.com
https://scrutinizer-ci.com/docs/integration/chrome-extension
●
○
○
●
○
○
https://www.versioneye.com
{
"name": "consolidation/annotated-command",
"description": "Initialize Symfony Console commands …",
"license": "MIT",
"authors": [
{
"name": "Greg Anderson",
"email": "greg.1.anderson@greenknowe.org"
}
],
…
}
$ composer licenses
Name: consolidation/robo
Version: 1.x-dev
Licenses: MIT
Dependencies:
Name Version License
consolidation/annotated-command 2.4.3 MIT
consolidation/log 1.0.3 MIT
consolidation/output-formatters 3.1.7 MIT
container-interop/container-interop 1.2.0 MIT
guzzle/guzzle v3.8.1 MIT
guzzlehttp/psr7 1.4.1 MIT
jakubledl/dissect v1.0.1 unlicense
league/container 2.3.0 MIT
myclabs/deep-copy 1.6.0 MIT
patchwork/jsqueeze v2.0.5 (Apache-2.0 or GPL-2.0)
https://poser.pugx.orghttps://…#tab-licenses
[![License](https://poser.pugx.org/ORG/PROJECT/license.png)](https://www.versioneye.com/user/projects/ID#tab-licenses)
●
○
●
○
○
https://readthedocs.org
http://outputformatters.readthedocs.io/en/latest
$ composer require victorjonsson/markdowndocs
$ vendor/bin/phpdoc-md phpdoc-md generate src > docs/api.md
$ git add docs/api.md
$ git commit -m "Add API documentation."
OH NO! It’s not automated!
● ReadTheDocs is a python service; it can’t run php.
● Can’t easily build from Travis and commit back to the
repository, as that would create a separate commit (not
part of the release, might cause another test run, etc.)
●
○
○
●
https://pages.github.com
●
○
●
○
●
○
Install Sami
$ curl --output $HOME/bin/sami.phar http://get.sensiolabs.org/sami.phar
In .travis.yml
after_success:
# Publish updated API documentation on every push to the master branch
- git config --global user.email $GITHUB_USER_EMAIL
- git config --global user.name "Travis LCache Documentation Bot"
- sami.phar --ansi update sami-config.php
- git clone --branch=gh-pages https://${TOKEN}@github.com/org/proj
work
- rm -rf work/api
- cp -R docs/api work/api
- cd work
- git add -A api
- git commit -m "API docs from $TRAVIS_BUILD_NUMBER/$TRAVIS_COMMIT"
- git push
https://lcache.github.io/lcache/api/master

More Related Content

What's hot

What's hot (20)

Drupal 8 improvements for developer productivity php symfony and more
Drupal 8 improvements for developer productivity  php symfony and moreDrupal 8 improvements for developer productivity  php symfony and more
Drupal 8 improvements for developer productivity php symfony and more
 
[drupalday2017] - REST in pieces
[drupalday2017] - REST in pieces[drupalday2017] - REST in pieces
[drupalday2017] - REST in pieces
 
Debugging in drupal 8
Debugging in drupal 8Debugging in drupal 8
Debugging in drupal 8
 
Ninja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for BeginnersNinja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for Beginners
 
Lean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and DrushLean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and Drush
 
Your first d8 module
Your first d8 moduleYour first d8 module
Your first d8 module
 
Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP Applications
 
Drupal + composer = new love !?
Drupal + composer = new love !?Drupal + composer = new love !?
Drupal + composer = new love !?
 
Brisbane Drupal meetup - 2016 Mar - Build module in Drupal 8
Brisbane Drupal meetup - 2016 Mar - Build module in Drupal 8Brisbane Drupal meetup - 2016 Mar - Build module in Drupal 8
Brisbane Drupal meetup - 2016 Mar - Build module in Drupal 8
 
Composer Tools & Frameworks for Drupal
Composer Tools & Frameworks for DrupalComposer Tools & Frameworks for Drupal
Composer Tools & Frameworks for Drupal
 
Efficient development workflows with composer
Efficient development workflows with composerEfficient development workflows with composer
Efficient development workflows with composer
 
WordPress mit Composer und Git verwalten
WordPress mit Composer und Git verwaltenWordPress mit Composer und Git verwalten
WordPress mit Composer und Git verwalten
 
Efficient development workflows with composer
Efficient development workflows with composerEfficient development workflows with composer
Efficient development workflows with composer
 
Introduction to Module Development (Drupal 7)
Introduction to Module Development (Drupal 7)Introduction to Module Development (Drupal 7)
Introduction to Module Development (Drupal 7)
 
[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client Manager
[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client Manager[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client Manager
[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client Manager
 
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
 
[drupalday2017] - Devel - D8 release party
[drupalday2017] - Devel - D8 release party[drupalday2017] - Devel - D8 release party
[drupalday2017] - Devel - D8 release party
 
Dependency management in Magento with Composer
Dependency management in Magento with ComposerDependency management in Magento with Composer
Dependency management in Magento with Composer
 
11 tools for your PHP devops stack
11 tools for your PHP devops stack11 tools for your PHP devops stack
11 tools for your PHP devops stack
 
Phing
PhingPhing
Phing
 

Viewers also liked

Viewers also liked (19)

Leap across persuasion hurdles vimarsa
Leap across persuasion hurdles   vimarsaLeap across persuasion hurdles   vimarsa
Leap across persuasion hurdles vimarsa
 
Amazon AWS basics needed to run a Cassandra Cluster in AWS
Amazon AWS basics needed to run a Cassandra Cluster in AWSAmazon AWS basics needed to run a Cassandra Cluster in AWS
Amazon AWS basics needed to run a Cassandra Cluster in AWS
 
Tech art 20170315
Tech art 20170315Tech art 20170315
Tech art 20170315
 
Continuous Integration Is for Teams: Moving past buzzword driven development
Continuous Integration Is for Teams: Moving past buzzword driven development Continuous Integration Is for Teams: Moving past buzzword driven development
Continuous Integration Is for Teams: Moving past buzzword driven development
 
El TAO de la programación
El TAO de la programaciónEl TAO de la programación
El TAO de la programación
 
Consejos rápidos: Convertirse en el Asesor de confianza de medios digitales
Consejos rápidos: Convertirse en el Asesor de confianza de medios digitalesConsejos rápidos: Convertirse en el Asesor de confianza de medios digitales
Consejos rápidos: Convertirse en el Asesor de confianza de medios digitales
 
Learning with a Wasserstein Loss (NIPS2015)
Learning with a Wasserstein Loss (NIPS2015)Learning with a Wasserstein Loss (NIPS2015)
Learning with a Wasserstein Loss (NIPS2015)
 
Mental Health and Cognitive Changes in the Older Adult
Mental Health and Cognitive Changes in the Older AdultMental Health and Cognitive Changes in the Older Adult
Mental Health and Cognitive Changes in the Older Adult
 
「望ましさ」による優先順位づけ
「望ましさ」による優先順位づけ「望ましさ」による優先順位づけ
「望ましさ」による優先順位づけ
 
発想の飛躍を生み出すクリエイティブシンキング
発想の飛躍を生み出すクリエイティブシンキング発想の飛躍を生み出すクリエイティブシンキング
発想の飛躍を生み出すクリエイティブシンキング
 
Terminology and information models
Terminology and information modelsTerminology and information models
Terminology and information models
 
Database Security Overview
Database Security OverviewDatabase Security Overview
Database Security Overview
 
Angular 2
Angular 2Angular 2
Angular 2
 
ICST 2017 Day1 Opening Ceremony Research Track
ICST 2017 Day1 Opening Ceremony Research TrackICST 2017 Day1 Opening Ceremony Research Track
ICST 2017 Day1 Opening Ceremony Research Track
 
Architecting a Next Generation Data Platform
Architecting a Next Generation Data PlatformArchitecting a Next Generation Data Platform
Architecting a Next Generation Data Platform
 
Actividades bullyng
Actividades bullyngActividades bullyng
Actividades bullyng
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
Trastornos psicológicos personalidad mediados
Trastornos psicológicos personalidad mediados Trastornos psicológicos personalidad mediados
Trastornos psicológicos personalidad mediados
 
From the Pulpit to the Podium
From the Pulpit to the PodiumFrom the Pulpit to the Podium
From the Pulpit to the Podium
 

Similar to Development Workflow Tools for Open-Source PHP Libraries

Before & After Docker Init
Before & After Docker InitBefore & After Docker Init
Before & After Docker Init
Angel Borroy López
 
Practical introduction to dev ops with chef
Practical introduction to dev ops with chefPractical introduction to dev ops with chef
Practical introduction to dev ops with chef
LeanDog
 

Similar to Development Workflow Tools for Open-Source PHP Libraries (20)

Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
 
Mastering composer
Mastering composerMastering composer
Mastering composer
 
PHP Development Tools
PHP  Development ToolsPHP  Development Tools
PHP Development Tools
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 
Composer JSON kills make files
Composer JSON kills make filesComposer JSON kills make files
Composer JSON kills make files
 
I Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other ThingsI Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other Things
 
DevOPS training - Day 2/2
DevOPS training - Day 2/2DevOPS training - Day 2/2
DevOPS training - Day 2/2
 
Advanced debugging  techniques in different environments
Advanced debugging  techniques in different environmentsAdvanced debugging  techniques in different environments
Advanced debugging  techniques in different environments
 
Настройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'aНастройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'a
 
Toolbox of a Ruby Team
Toolbox of a Ruby TeamToolbox of a Ruby Team
Toolbox of a Ruby Team
 
Before & After Docker Init
Before & After Docker InitBefore & After Docker Init
Before & After Docker Init
 
Practical introduction to dev ops with chef
Practical introduction to dev ops with chefPractical introduction to dev ops with chef
Practical introduction to dev ops with chef
 
Composer
ComposerComposer
Composer
 
Building applications with Serverless Framework and AWS Lambda - JavaZone 2019
Building applications with Serverless Framework and AWS Lambda - JavaZone 2019Building applications with Serverless Framework and AWS Lambda - JavaZone 2019
Building applications with Serverless Framework and AWS Lambda - JavaZone 2019
 
2019 11-bgphp
2019 11-bgphp2019 11-bgphp
2019 11-bgphp
 
OpenShift Origin Community Day (Boston) Extending OpenShift Origin: Build You...
OpenShift Origin Community Day (Boston) Extending OpenShift Origin: Build You...OpenShift Origin Community Day (Boston) Extending OpenShift Origin: Build You...
OpenShift Origin Community Day (Boston) Extending OpenShift Origin: Build You...
 
OpenShift Origin Community Day (Boston) Writing Cartridges V2 by Jhon Honce
OpenShift Origin Community Day (Boston) Writing Cartridges V2 by Jhon Honce OpenShift Origin Community Day (Boston) Writing Cartridges V2 by Jhon Honce
OpenShift Origin Community Day (Boston) Writing Cartridges V2 by Jhon Honce
 
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
 
Docker module 1
Docker module 1Docker module 1
Docker module 1
 
Putting Phing to Work for You
Putting Phing to Work for YouPutting Phing to Work for You
Putting Phing to Work for You
 

More from Pantheon

Testing Your Code as Part of an Industrial Grade Workflow
Testing Your Code as Part of an Industrial Grade WorkflowTesting Your Code as Part of an Industrial Grade Workflow
Testing Your Code as Part of an Industrial Grade Workflow
Pantheon
 

More from Pantheon (20)

Drupal Migrations in 2018
Drupal Migrations in 2018Drupal Migrations in 2018
Drupal Migrations in 2018
 
Architecting Million Dollar Projects
Architecting Million Dollar ProjectsArchitecting Million Dollar Projects
Architecting Million Dollar Projects
 
Streamlined Drupal 8: Site Building Strategies for Tight Deadlines
Streamlined Drupal 8: Site Building Strategies for Tight DeadlinesStreamlined Drupal 8: Site Building Strategies for Tight Deadlines
Streamlined Drupal 8: Site Building Strategies for Tight Deadlines
 
Getting Started with Drupal
Getting Started with DrupalGetting Started with Drupal
Getting Started with Drupal
 
Defense in Depth: Lessons Learned Securing 200,000 Sites
Defense in Depth: Lessons Learned Securing 200,000 SitesDefense in Depth: Lessons Learned Securing 200,000 Sites
Defense in Depth: Lessons Learned Securing 200,000 Sites
 
Automate Your Automation | DrupalCon Vienna
Automate Your Automation | DrupalCon ViennaAutomate Your Automation | DrupalCon Vienna
Automate Your Automation | DrupalCon Vienna
 
Sub-Second Pageloads: Beat the Speed of Light with Pantheon & Fastly
Sub-Second Pageloads: Beat the Speed of Light with Pantheon & FastlySub-Second Pageloads: Beat the Speed of Light with Pantheon & Fastly
Sub-Second Pageloads: Beat the Speed of Light with Pantheon & Fastly
 
Building a Network of 195 Drupal 8 Sites
Building a Network of 195 Drupal 8 Sites Building a Network of 195 Drupal 8 Sites
Building a Network of 195 Drupal 8 Sites
 
Hacking Your Agency Workflow: Treating Your Process Like A Product
Hacking Your Agency Workflow: Treating Your Process Like A ProductHacking Your Agency Workflow: Treating Your Process Like A Product
Hacking Your Agency Workflow: Treating Your Process Like A Product
 
WordPress REST API: Expert Advice & Practical Use Cases
WordPress REST API: Expert Advice & Practical Use CasesWordPress REST API: Expert Advice & Practical Use Cases
WordPress REST API: Expert Advice & Practical Use Cases
 
Testing Your Code as Part of an Industrial Grade Workflow
Testing Your Code as Part of an Industrial Grade WorkflowTesting Your Code as Part of an Industrial Grade Workflow
Testing Your Code as Part of an Industrial Grade Workflow
 
Test Coverage for Your WP REST API Project
Test Coverage for Your WP REST API ProjectTest Coverage for Your WP REST API Project
Test Coverage for Your WP REST API Project
 
Drupal 8 and Pantheon
Drupal 8 and PantheonDrupal 8 and Pantheon
Drupal 8 and Pantheon
 
Why Your Site is Slow: Performance Answers for Your Clients
Why Your Site is Slow: Performance Answers for Your ClientsWhy Your Site is Slow: Performance Answers for Your Clients
Why Your Site is Slow: Performance Answers for Your Clients
 
Drupal Performance
Drupal Performance Drupal Performance
Drupal Performance
 
WP or Drupal (or both): A Framework for Client CMS Decisions
WP or Drupal (or both): A Framework for Client CMS Decisions WP or Drupal (or both): A Framework for Client CMS Decisions
WP or Drupal (or both): A Framework for Client CMS Decisions
 
Level Up: 5 Expert Tips for Optimizing WordPress Performance
Level Up: 5 Expert Tips for Optimizing WordPress PerformanceLevel Up: 5 Expert Tips for Optimizing WordPress Performance
Level Up: 5 Expert Tips for Optimizing WordPress Performance
 
Migrating NYSenate.gov
Migrating NYSenate.govMigrating NYSenate.gov
Migrating NYSenate.gov
 
Automating & Integrating Pantheon with JIRA, Slack, Jenkins and More
Automating & Integrating Pantheon with JIRA, Slack, Jenkins and MoreAutomating & Integrating Pantheon with JIRA, Slack, Jenkins and More
Automating & Integrating Pantheon with JIRA, Slack, Jenkins and More
 
WordPress at Scale Webinar
WordPress at Scale WebinarWordPress at Scale Webinar
WordPress at Scale Webinar
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 

Development Workflow Tools for Open-Source PHP Libraries