SlideShare ist ein Scribd-Unternehmen logo
1 von 46
task runners for php
ignacio velazquez ……….
/toc
• what is it?
• why?
• task runners
• phing
• robo
• summary
about me
/about-me/nass600
Software Engineer @ Hostelworld
nass600
nass600
nass600
what is it?
/what-is-it/project-stages
installation build qa doc deploy
/what-is-it/project-stages?p=2
down
deps
installation
create
db
run
migrat
load
fixt
/what-is-it/project-stages?p=3
unit
tests
qa
funct
tests
code
qual
gen
report
/what-is-it/definition
a task runner is a tool which provides the
mechanisms to run tasks in an ordered and
controlled fashion
why?
/why/lovely-script
/why/main-concept
automation
/why/main-concept?need-more=true
• Simplify repetitive task
• Save time
• Less human errors
• Easier to explain over the phone
• Deployment
• Builds/Packaging
• Single script entry point
task runners
/task-runners
phing
/phing/intro
• PHing Is Not Gnu make
• Started in 2004
• Ported previously to PHP 5
• 777 stars
• 3315 commits
• Very similar to Apache Ant
• Manifest in XML
/phing/installation
"require-dev": {
"phing/phing": "^2.16"
}
/phing/hello-world
<?xml version="1.0" encoding="UTF-8"?>
<project name="talk-php-task-runners" default="setup:install">
<property name="bin_dir" value="bin"/>
<target name="setup:install"
depends="setup:vendors, setup:run"
description="First install after the first clone"/>
<target name="setup:vendors" description="Remove and download latest version of all vendors">
<echo msg="Updating vendors..."/>
<delete dir="vendors"/>
<exec passthru="true" logoutput="true" checkreturn="true" command="composer install --ansi" />
<exec passthru="true" checkreturn="true" command="npm install" />
</target>
<target name="setup:run" description="Run server with hot reload">
<exec passthru="true" logoutput="true" checkreturn="true" command="${bin_dir}/console server:run" spawn="true"/>
<exec passthru="true" logoutput="true" checkreturn="true" command="npm run serve" />
</target>
</project>
/phing/config
build.dir=build
bin.dir=./bin
web.dir=./web
var.dir=./var
source=src
<?xml version="1.0" encoding="UTF-8"?>
<project name="portfolio" default="setup:run">
<property file="./build.properties"/>
<target name="setup:run"
description="Run server with hot reload">
<exec passthru="true"
logoutput="true"
checkreturn="true"
command="${bin.dir}/console server:run"
spawn="true"/>
<exec passthru="true"
logoutput="true"
checkreturn="true"
command="npm run serve" />
</target>
</project>
/phing/io
<echo msg="Phing rocks!" />
<echo message="Binarycloud, too." />
<echo>And don't forget Propel.</echo>
<echo file="test.txt" append="false">
This is a test message
</echo>
/phing/filesystem
<target name="list-files">
<delete dir="app-clone"/>
<mkdir dir="app-clone"/>
<copy todir="app-clone" includeemptydirs="true">
<fileset dir="./app" id="app-files">
<include name="**/*.yml"/>
<exclude name="**/parameters.yml"/>
</fileset>
</copy>
<foreach param="filename" target="echo-files">
<fileset refid="app-files"/>
</foreach>
</target>
<target name="echo-files" hidden="true">
<echo>file: ${filename}</echo>
</target>
/phing/filters-mappers
<fileset dir="src" id="assets">
<include name="**/*.css"/>
</fileset>
<delete dir="replica"/>
<mkdir dir="replica"/>
<copy todir="replica">
<fileset refid="assets"/>
<mapper type="flatten" />
<filterchain>
<replaceregexp>
<regexp pattern="n" replace=""/>
</replaceregexp>
</filterchain>
</copy>
/phing/integrations/vcs
<gitclone repository="git://github.com/path/to/repo/repo.git"
targetPath="${repo.dir.resolved}" />
<gitcheckout
repository="${repo.dir.resolved}"
branchname="mybranch" quiet="true"
forceCreate="true" />
/phing/integrations/deps
<composer command="install" composer="${dir.release}/composer.phar">
<arg value="--optimize-autoloader" />
<arg value="--working-dir" />
<arg path="${dir.release}" />
</composer>
/phing/integrations/testing
<phpunit printsummary="true"
pharlocation="vendor/bin/phpunit"
configuration="./phpunit.xml.dist">
<formatter type="xml" todir="${xmlreport.dir}" outfile="${report.name}"/>
</phpunit>
/phing/extending
<?php
require_once "phing/Task.php";
class MyEchoTask extends Task {
/**
* The message passed in the buildfile.
*/
private $message = null;
/**
* The setter for the attribute "message"
*/
public function setMessage($str) {
$this->message = $str;
}
/**
* The init method: Do init steps.
*/
public function init() {
// nothing to do here
}
/**
* The main entry point method.
*/
public function main() {
print($this->message);
}
}
<includepath classpath="src/AppBundle/Phing" />
<taskdef name="myecho"
classname="MyEchoTask" />
<myecho message="Hello World" />
robo
/robo/intro
• First release in 2014
• 1739 stars
• 1338 commits
• Written in PHP
• Manifest in PHP
• Symfony Components (console, finder, filesystem..)
/robo/installation
"require-dev": {
"consolidation/robo": "^1.1"
}
/robo/hello-world
<?php
use RoboTasks;
/**
* This is project's console commands configuration for Robo task runner.
*
* @see http://robo.li/
*/
class RoboFile extends Tasks
{
/**
* @var string Production environment
*/
const ENV_PROD = 'prod';
/**
* @var string Development environment
*/
const ENV_DEV = 'dev';
/**
* First install command
*
* @param string $env
* @return bool
*/
public function setupInstall($env = self::ENV_DEV)
{
$task = $this->taskComposerInstall();
if (self::ENV_PROD === $env) {
$task->noDev()->optimizeAutoloader();
putenv('SYMFONY_ENV=prod');
}
$result = $task->run();
if (!$result->wasSuccessful()) {
$this->say('Aborting installation due to some errors');
return false;
}
}
}
/robo/config
dir:
src: 'src'
bin: 'bin'
build: 'build'
bin:
composer: 'vendor/bin'
npm: 'node_modules/.bin'
public function setupInstall($env = self::ENV_DEV)
{
$config = RoboRobo::Config()->export();
// ...
}
/robo/io
public function identify()
{
$this->yell('Hey!!! Welcome to Winterfel', 'blue');
$this->io()->choice('Who are you?', [
'John Snow',
'Tyrion Lannister',
'Danaerys Targaryen'
]);
$this->ask('What do you do?');
$this->say('Best answer ever');
}
/robo/filesystem
public function logsWarmup()
{
$this->taskFilesystemStack()
->mkdir('logs')
->touch('logs/.gitignore')
->chgrp('www', 'www-data')
->symlink('/var/log/nginx/error.log', 'logs/error.log')
->run();
}
/robo/collections
$this->collectionBuilder()
->taskExec('uname -n')
->printOutput(false)
->storeState('system-name')
->taskFilesystemStack()
->defer(
function ($task, $state) {
$task->mkdir($state['system-name']);
}
)
->run();
/robo/integrations/vcs
$this->taskGitStack()
->stopOnFail()
->add('-A')
->commit('adding everything')
->push('origin','master')
->tag('0.6.0')
->push('origin','0.6.0')
->run();
/robo/integrations/deps
$this->taskComposerCreateProject()
->source('foo/bar')
->target('myBar')->run();
$this->taskNpmInstall()->run();
$this->taskBowerUpdate('path/to/my/bower')
->noDev()
->run();
$this->taskGulpRun('clean')
->silent()
->run();
/robo/integrations/testing
$this->taskPHPUnit()
->group('core')
->bootstrap('test/bootstrap.php')
->run();
$this->taskBehat()
->format('pretty')
->noInteraction()
->run();
/robo/integrations/sysadmin
$test = $this->taskDockerRun('test_env')
->detached()
->run();
$this->taskDockerExec($test)
->interactive()
->exec('./runtests')
->run();
/robo/extending
<?php
namespace BoedahRoboTaskDrush;
use RoboCommonCommandArguments;
use RoboTaskCommandStack;
class DrushStack extends CommandStack
{
use CommandArguments;
protected $argumentsForNextCommand;
protected $siteAlias;
protected $drushVersion;
public function __construct($pathToDrush = 'drush')
{
$this->executable = $pathToDrush;
}
public function drupalRootDirectory($drupalRootDirectory)
{
$this->printTaskInfo('Drupal root: <info>' . $drupalRootDirectory .
'</info>');
$this->option('-r', $drupalRootDirectory);
return $this;
}
public function uri($uri)
{
$this->printTaskInfo('URI: <info>' . $uri . '</info>');
$this->option('-l', $uri);
return $this;
}
}
<?php
namespace BoedahRoboTaskDrush;
trait loadTasks
{
protected function
taskDrushStack($pathToDrush = 'drush')
{
return $this->task(DrushStack::class,
$pathToDrush);
}
}
/robo/extending?page=2
<?php
use RoboTasks;
class RoboFile extends Tasks
{
use BoedahRoboTaskDrushloadTasks;
public function install()
{
$this->taskDrushStack()
->drupalRootDirectory('/var/www/html/some-site')
->uri('sub.example.com')
->maintenanceOn()
->updateDb()
->revertAllFeatures()
->maintenanceOff()
->run();
}
}
summary
/summary/comparison
phing robo
Started in 2004 2014
Written in PHP yes yes
Config format xml php
Parallel
execution
yes yes
Extendable yes yes
Verbose yes no
Learning Curve hard easy
IDE support yes yes
I/0 poor rich
Scalable yes yes
Symfony
Components
no yes
/summary/comparison?page=2
phing robo
Github stars 776 1691
Github
commits
3314 1335
Github PR 21 4
Github Issues 46 53
Github
contributors
150 95
questions
thanks!!!
https://slideshare.net/nass600/php-task-runners

Weitere ähnliche Inhalte

Was ist angesagt?

Best Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentBest Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentShahar Evron
 
Building and Deploying PHP Apps Using phing
Building and Deploying PHP Apps Using phingBuilding and Deploying PHP Apps Using phing
Building and Deploying PHP Apps Using phingMihail Irintchev
 
Phing: Building with PHP
Phing: Building with PHPPhing: Building with PHP
Phing: Building with PHPhozn
 
Automated Deployment With Phing
Automated Deployment With PhingAutomated Deployment With Phing
Automated Deployment With PhingDaniel Cousineau
 
Mastering Namespaces in PHP
Mastering Namespaces in PHPMastering Namespaces in PHP
Mastering Namespaces in PHPNick Belhomme
 
Laravel Beginners Tutorial 1
Laravel Beginners Tutorial 1Laravel Beginners Tutorial 1
Laravel Beginners Tutorial 1Vikas Chauhan
 
Sinatra and friends
Sinatra and friendsSinatra and friends
Sinatra and friendsJiang Wu
 
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南Shengyou Fan
 
Python Flask app deployed to OPenShift using Wercker CI
Python Flask app deployed to OPenShift using Wercker CIPython Flask app deployed to OPenShift using Wercker CI
Python Flask app deployed to OPenShift using Wercker CIBruno Rocha
 
Zend expressive workshop
Zend expressive workshopZend expressive workshop
Zend expressive workshopAdam Culp
 
Practical PHP Deployment with Jenkins
Practical PHP Deployment with JenkinsPractical PHP Deployment with Jenkins
Practical PHP Deployment with JenkinsAdam Culp
 
Running a Plone product on Substance D
Running a Plone product on Substance DRunning a Plone product on Substance D
Running a Plone product on Substance DMakina Corpus
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerModern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerJohn Anderson
 
Flask Introduction - Python Meetup
Flask Introduction - Python MeetupFlask Introduction - Python Meetup
Flask Introduction - Python MeetupAreski Belaid
 
PSR-7 - Middleware - Zend Expressive
PSR-7 - Middleware - Zend ExpressivePSR-7 - Middleware - Zend Expressive
PSR-7 - Middleware - Zend ExpressiveMilad Arabi
 
Learning Puppet Chapter 1
Learning Puppet Chapter 1Learning Puppet Chapter 1
Learning Puppet Chapter 1Vishal Biyani
 
Deploying PHP applications with Phing
Deploying PHP applications with PhingDeploying PHP applications with Phing
Deploying PHP applications with PhingMichiel Rook
 
Laravel for Web Artisans
Laravel for Web ArtisansLaravel for Web Artisans
Laravel for Web ArtisansRaf Kewl
 
Building and Deploying PHP apps with Phing
Building and Deploying PHP apps with PhingBuilding and Deploying PHP apps with Phing
Building and Deploying PHP apps with PhingMichiel Rook
 

Was ist angesagt? (20)

Best Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentBest Practices in PHP Application Deployment
Best Practices in PHP Application Deployment
 
Building and Deploying PHP Apps Using phing
Building and Deploying PHP Apps Using phingBuilding and Deploying PHP Apps Using phing
Building and Deploying PHP Apps Using phing
 
Phing: Building with PHP
Phing: Building with PHPPhing: Building with PHP
Phing: Building with PHP
 
Automated Deployment With Phing
Automated Deployment With PhingAutomated Deployment With Phing
Automated Deployment With Phing
 
Mastering Namespaces in PHP
Mastering Namespaces in PHPMastering Namespaces in PHP
Mastering Namespaces in PHP
 
Laravel Beginners Tutorial 1
Laravel Beginners Tutorial 1Laravel Beginners Tutorial 1
Laravel Beginners Tutorial 1
 
Sinatra and friends
Sinatra and friendsSinatra and friends
Sinatra and friends
 
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
 
Python Flask app deployed to OPenShift using Wercker CI
Python Flask app deployed to OPenShift using Wercker CIPython Flask app deployed to OPenShift using Wercker CI
Python Flask app deployed to OPenShift using Wercker CI
 
Phing
PhingPhing
Phing
 
Zend expressive workshop
Zend expressive workshopZend expressive workshop
Zend expressive workshop
 
Practical PHP Deployment with Jenkins
Practical PHP Deployment with JenkinsPractical PHP Deployment with Jenkins
Practical PHP Deployment with Jenkins
 
Running a Plone product on Substance D
Running a Plone product on Substance DRunning a Plone product on Substance D
Running a Plone product on Substance D
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerModern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl Programmer
 
Flask Introduction - Python Meetup
Flask Introduction - Python MeetupFlask Introduction - Python Meetup
Flask Introduction - Python Meetup
 
PSR-7 - Middleware - Zend Expressive
PSR-7 - Middleware - Zend ExpressivePSR-7 - Middleware - Zend Expressive
PSR-7 - Middleware - Zend Expressive
 
Learning Puppet Chapter 1
Learning Puppet Chapter 1Learning Puppet Chapter 1
Learning Puppet Chapter 1
 
Deploying PHP applications with Phing
Deploying PHP applications with PhingDeploying PHP applications with Phing
Deploying PHP applications with Phing
 
Laravel for Web Artisans
Laravel for Web ArtisansLaravel for Web Artisans
Laravel for Web Artisans
 
Building and Deploying PHP apps with Phing
Building and Deploying PHP apps with PhingBuilding and Deploying PHP apps with Phing
Building and Deploying PHP apps with Phing
 

Ähnlich wie Php task runners

Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php PresentationAlan Pinstein
 
2019 11-bgphp
2019 11-bgphp2019 11-bgphp
2019 11-bgphpdantleech
 
Minimum Viable Docker: our journey towards orchestration
Minimum Viable Docker: our journey towards orchestrationMinimum Viable Docker: our journey towards orchestration
Minimum Viable Docker: our journey towards orchestrationOutlyer
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Michael Lihs
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-wayRobert Lujo
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment TacticsIan Barber
 
Docker for Development
Docker for DevelopmentDocker for Development
Docker for Developmentallingeek
 
A General Purpose Docker Image for PHP
A General Purpose Docker Image for PHPA General Purpose Docker Image for PHP
A General Purpose Docker Image for PHPRobert Lemke
 
Exploring Async PHP (SF Live Berlin 2019)
Exploring Async PHP (SF Live Berlin 2019)Exploring Async PHP (SF Live Berlin 2019)
Exploring Async PHP (SF Live Berlin 2019)dantleech
 
Intro To Node.js
Intro To Node.jsIntro To Node.js
Intro To Node.jsChris Cowan
 
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 2014biicode
 
Toolbox of a Ruby Team
Toolbox of a Ruby TeamToolbox of a Ruby Team
Toolbox of a Ruby TeamArto Artnik
 
Ran Mizrahi - Symfony2 meets Drupal8
Ran Mizrahi - Symfony2 meets Drupal8Ran Mizrahi - Symfony2 meets Drupal8
Ran Mizrahi - Symfony2 meets Drupal8Ran Mizrahi
 
Building com Phing - 7Masters PHP
Building com Phing - 7Masters PHPBuilding com Phing - 7Masters PHP
Building com Phing - 7Masters PHPiMasters
 
Build Your First SharePoint Framework Webpart
Build Your First SharePoint Framework WebpartBuild Your First SharePoint Framework Webpart
Build Your First SharePoint Framework WebpartEric Overfield
 
Release with confidence
Release with confidenceRelease with confidence
Release with confidenceJohn Congdon
 
Website releases made easy with the PEAR installer, OSCON 2009
Website releases made easy with the PEAR installer, OSCON 2009Website releases made easy with the PEAR installer, OSCON 2009
Website releases made easy with the PEAR installer, OSCON 2009Helgi Þormar Þorbjörnsson
 
Voiture tech talk
Voiture tech talkVoiture tech talk
Voiture tech talkHoppinger
 
Node.js basics
Node.js basicsNode.js basics
Node.js basicsBen Lin
 
DevOps in PHP environment
DevOps in PHP environment DevOps in PHP environment
DevOps in PHP environment Evaldo Felipe
 

Ähnlich wie Php task runners (20)

Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php Presentation
 
2019 11-bgphp
2019 11-bgphp2019 11-bgphp
2019 11-bgphp
 
Minimum Viable Docker: our journey towards orchestration
Minimum Viable Docker: our journey towards orchestrationMinimum Viable Docker: our journey towards orchestration
Minimum Viable Docker: our journey towards orchestration
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment Tactics
 
Docker for Development
Docker for DevelopmentDocker for Development
Docker for Development
 
A General Purpose Docker Image for PHP
A General Purpose Docker Image for PHPA General Purpose Docker Image for PHP
A General Purpose Docker Image for PHP
 
Exploring Async PHP (SF Live Berlin 2019)
Exploring Async PHP (SF Live Berlin 2019)Exploring Async PHP (SF Live Berlin 2019)
Exploring Async PHP (SF Live Berlin 2019)
 
Intro To Node.js
Intro To Node.jsIntro To Node.js
Intro To Node.js
 
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
 
Toolbox of a Ruby Team
Toolbox of a Ruby TeamToolbox of a Ruby Team
Toolbox of a Ruby Team
 
Ran Mizrahi - Symfony2 meets Drupal8
Ran Mizrahi - Symfony2 meets Drupal8Ran Mizrahi - Symfony2 meets Drupal8
Ran Mizrahi - Symfony2 meets Drupal8
 
Building com Phing - 7Masters PHP
Building com Phing - 7Masters PHPBuilding com Phing - 7Masters PHP
Building com Phing - 7Masters PHP
 
Build Your First SharePoint Framework Webpart
Build Your First SharePoint Framework WebpartBuild Your First SharePoint Framework Webpart
Build Your First SharePoint Framework Webpart
 
Release with confidence
Release with confidenceRelease with confidence
Release with confidence
 
Website releases made easy with the PEAR installer, OSCON 2009
Website releases made easy with the PEAR installer, OSCON 2009Website releases made easy with the PEAR installer, OSCON 2009
Website releases made easy with the PEAR installer, OSCON 2009
 
Voiture tech talk
Voiture tech talkVoiture tech talk
Voiture tech talk
 
Node.js basics
Node.js basicsNode.js basics
Node.js basics
 
DevOps in PHP environment
DevOps in PHP environment DevOps in PHP environment
DevOps in PHP environment
 

Kürzlich hochgeladen

Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfYashikaSharma391629
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfStefano Stabellini
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
How To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROHow To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROmotivationalword821
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 

Kürzlich hochgeladen (20)

Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdf
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
How To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROHow To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTRO
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 

Php task runners

Hinweis der Redaktion

  1. animate
  2. animate
  3. Animate to show parallel
  4. animate
  5. Purple color
  6. Fix this or remove it
  7. Fix this or remove it