SlideShare a Scribd company logo
1 of 72
Download to read offline
Ole Michaelis & Sönke Ruempler | Jimdo
Make it SOLID
Software Architecture for System
Administrators
OSDC 2014
Ole Michaelis
“Open Source Rockstar”
@CodeStars
github.com/nesQuick
codestars.eu
OSDC 2014
Sönke
Ruempler
“Chief Trolling Officer”
@s0enke
github.com/s0enke
ruempler.eu
OSDC 2014
Jimdo
OSDC 2014
because infrastructure development is
neither a Jenga game!
S.O.L.I.D
OSDC 2014
a little poll!
http://images.fineartamerica.com/images-medium-large/live-long-mr-spock-tobias-woelki.jpg
OSDC 2014
OSDC 2014
S O L I D
OSDC 2014
A
dev/ops
story
Ole
as
Junior Admin
Sönke
as
Dr. Software
OSDC 2014
the basics
OSDC 2014
configuration management
Idempotent
Declarative
Convergent
Abstract
OSDC 2014
software architecture
VS.
36 years
>2000 years
OSDC 2014
OSDC 2014
node web-1 {
$role = 'web-app-a'
$has_apache = true;
include php5
}
node web-2 {
$role = 'web-app-b'
$has_fcgi=true
include php5
}
# has both enabled, but needs a special config
node web-3 {
$role = 'web-app-c'
$has_fcgi=true
$has_apache=true
include php5
}
Web
App 1
Web
App 2
Web
App 3
OSDC 2014
class php5 {
if ($::has_fcgi)
package { 'php5-cli' : ensure => installed }
}
if ($::has_apache) {
package { 'php5-apache' : ensure => installed }
}
if ($::role == 'web-app-c')
package { 'php5-web-app-c-special-module' }
file { '/etc/php5/php.ini' :
source => 'puppet:///modules/php5/php.ini-web-app-c'
}
}
}
Global variable!
Out of Context!
No abstraction
OSDC 2014
class php5(
$has_fcgi = false,
$has_apache = false,
$role = undef
) {
if ($has_fcgi)
package { 'php5-cli' : ensure => installed }
}
if ($has_apache) {
package { 'php5-apache' : ensure => installed }
}
if ($role == 'web-app-c') {
package { 'php5-web-app-c-special-module' }
file { '/etc/php5/php.ini' :
source => 'puppet:///modules/php5/php.ini-web-app-c',
require => Package[php-fcgi]
}
}
OSDC 2014
node 'web-1' {
$role = 'web-app-a'
$has_apache = true
class { 'php5' :
has_apache => true,
role => 'web-app-a'
}
}
node 'web-2' {
$role = 'web-app-b'
$has_fcgi = true
class { 'php5' :
has_fcgi => true,
role => 'web-app-b'
}
}
Injection!
Injection!
OSDC 2014
Would you solder a
lamp directly to the
electrical wiring in a
wall?
Dependency
Inversion
OSDC 2014
OSDC 2014
class php5(
$has_fcgi = false,
$has_apache = false,
$role = undef
) {
if ($has_fcgi)
package { 'php5-cli' : ensure => installed }
}
if ($has_apache) {
package { 'php5-apache' : ensure => installed }
}
if ($role == 'web-app-c') {
package { 'php5-web-app-c-special-module' }
file { '/etc/php5/php.ini' :
source => 'puppet:///modules/php5/php.ini-web-app-c'
require => Package[php-fcgi]
}
}
}
OSDC 2014
Stuff tends to
get big
Beware of god classes!
OSDC 2014
if ($lighttpd) {
package { 'php5-cgi': }
configdir { '/etc/php5/cgi': require => Package['php5-cgi'] }
configdir { '/etc/php5/cgi/conf.d': require => Package['php5-cgi'] }
if ($testserver) {
configfile { '/etc/php5/cgi/php.ini': sourcename => 'php5/cgi/php.ini-testserver',
require => Package['php5-cgi'] }
} else {
if ($cms ) {
configfile { '/etc/php5/cgi/php.ini': sourcename => 'php5/cgi/php.ini-cms',
require => Package['php5-cgi'] }
} else {
if ($mgmt ) {
configfile { '/etc/php5/cgi/php.ini': sourcename => 'php5/cgi/php.ini-mgmt',
require => Package['php5-cgi'] }
} else {
if ($lc ) {
configfile { '/etc/php5/cgi/php.ini': sourcename => 'php5/cgi/php.ini-lc.
jimdo.com', require => Package['php5-cgi'] }
} else {
configfile { '/etc/php5/cgi/php.ini': sourcename => 'php5/cgi/php.ini',
require => Package['php5-cgi'] }
}
}
}
}
configfile { '/etc/php5/cgi/conf.d/pdo.ini': sourcename => 'php5/cgi/conf.d/pdo.ini',
require => Package['php5-cgi'] }
}
OSDC 2014
OSDC 2014
?
OSDC 2014
OSDC 2014
rspec-puppet
test-kitchen
OSDC 2014
OSDC 2014
describe :node => 'web-1' do
it { should contain_package ('php5-fcgi') }
end
describe :node => 'web-2' do
it { should contain_package ('php5-apache2' ) }
end
describe :node => 'web-3' do
it { should contain_package ('php5-fcgi') }
it { should contain_package ('php5-apache2' ) }
end
Test php5 class:
Install Package
?
OSDC 2014
describe :class => 'php5::fcgi' do
it { should contain_package('php5-cli') }
end
describe :class => 'php5::apache' do
it { should contain_package('php5-apache2') }
end
class php5::fgci {
package { 'php5-cgi' : ensure => installed }
}
class php5::apache {
package { 'php5-apache' : ensure => installed }
}
OSDC 2014
Just because you can,
doesn’t mean you
should!
Single
Responsibility
OSDC 2014
describe :node => 'web-1' do
it { should include_class('php5::fcgi') }
it { should contain_package('php5-fcgi') }
end
describe :node => 'web-2' do
it { should include_class('php5::apache') }
it { should contain_package('php5-apache2') }
end
node web-1 {
include php5::apache
}
node web-2 {
include php5::fcgi
}
Tests
Code
OSDC 2014
OSDC 2014
“programs […] are changed by adding
new code, rather than by changing
existing code”
Open Close
Principle
OSDC 2014
OSDC 2014
new
requirements...
now web app 1 needs a second
node
node web-1 {
$role = 'web-app-a'
include php5::apache
}
node web-1a {
$role = 'web-app-a'
include php5::apache
}
OSDC 2014
OSDC 2014
OSDC 2014
class role::web-app-a {
include php5::apache
}
node web-1 {
include role::web-app-
a
}
node web-1a {
include role::web-app-
a
}
Our new role!
And nodes just
include it!
OSDC 2014
>
OSDC 2014
OSDC 2014
?
class php5::fcgi($role = undef) {
if ($role == 'web-app-c') {
package { 'php5-web-app-c-special-module' }
file { '/etc/php5/php.ini' :
source =>
'puppet:///modules/php5/php.ini-web-app-c',
require => Package[php-fcgi]
}
}
}
OSDC 2014
Don’t call us,
we call you!
Hollywood
Principle
OSDC 2014
class role::web-app-c::special-php-stuff {
package { 'php5-web-app-c-special-module' }
file { '/etc/php5/php.ini' :
source => 'puppet:///modules/php5/php.ini-web-app-c'
}
}
1. Split out the special case into its own class.
OSDC 2014
class php5::fcgi($include_after_package_install = undef) {
package { 'php5-fcgi' : ensure => installed }
if ($include_after_package_install)
include $include_after_package_install
Package['php5-fcgi'] -> Class[$include_after_package_install]
}
}
2. Make the special case pluggable and
reusable.
2a. And name it abstract.
OSDC 2014
class role::web-app-c {
include php5::apache
class { 'php5::fcgi' :
include_after_package_install => 'profile::web-app-c::special-php-stuff'
}
}
3. Pass the special case as dependency in our
web-app-c.
OSDC 2014
OSDC 2014
class profile::web-app-c::special-php-stuff {
package { 'php5-web-app-c-special-module' }
file { '/etc/php5/php.ini' :
source => 'puppet:///modules/php5/php.ini-web-app-c'
}
}
?
OSDC 2014
define php5::specialconfig(
$ensure = present,
$sapi,
$module,
$key,
$value,
$section = undef,
$path = '/etc/php5/%s/conf.d/%s.ini'
) {
ini_setting { $title:
ensure => $ensure,
path => sprintf($path, $sapi, $module),
section => $section,
setting => $key,
value => $value,
require => Package["php5-${sapi}"]
}
}
OSDC 2014
OSDC 2014
?
OSDC 2014
“puppet separate code and data”
I’m feeling lucky
OSDC 2014
# /etc/puppet/hieradata/web1.yaml
---
classes:
- profile::web-app-a
# /etc/puppet/hieradata/web1a.yaml
---
classes:
- profile::web-app-a
# /etc/puppet/hieradata/web2.yaml
---
classes:
- profile::web-app-c
# /etc/puppet/hieradata/web3.yaml
---
classes:
- profile::web-app-c
puppet-hiera
example in YAML
OSDC 2014
node default {
hiera_include('classes')
}
node web-1 {
include role::web-app-a
}
node web-1a {
include role::web-app-a
}
node web-2 {
include role::web-app-b
}
node web-3 {
include role::web-app-c
}
OSDC 2014
hiera
AWS/Cloudformation LDAP
DNS
your selfwritten
stuff
OSDC 2014
OSDC 2014
OSDC 2014
OSDC 2014
What about
I and L
in SOLID?
OSDC 2014
You want me to plug
this in, where?
Interface
Segregation
OSDC 2014
If it looks like a duck,
quacks like a duck, but
need batteries - you
probably have the
wrong abstraction!
Liskov
Substitution
OSDC 2014
S O L I D
OSDC 2014
OSDC 2014
Structure your code!Node
ProfileProfilesRole ProfileModules
Resources
OSDC 2014
Puppet forge
puppet module registry
OSDC 2014
Librarian Puppet
r10k
Berkshelf (chef)
OSDC 2014
stdmod
https://github.com/stdmod
OSDC 2014
sandboxed
development
https://github.com/mlafeldt/skeleton-cookbook
https://github.com/Jimdo/puppet-skeleton
OSDC 2014
server spec
http://serverspec.org/
beaker
(puppet)
https://github.com/puppetlabs/beaker
OSDC 2014
Thank you!
OSDC 2014
@CodeStars
ole@jimdo.com
@s0enke
soenke@jimdo.com
Questions?
OSDC 2014
*I ’m just a blank slide*
OSDC 2014
Sources
• http://www.slideshare.net/PuppetLabs/garethrushgrove-puppetconf
• http://www.slideshare.net/PuppetLabs/alessandro-franceschi-new
• https://github.com/jedi4ever/stop-the-fork
• http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-
pictures/
• https://speakerdeck.com/jfryman/refactoring-puppet
• http://www.clker.com/cliparts/e/2/a/d/1206574733930851359Ryan_Taylor_Green_Tick.svg.med.
png
• http://www.craigdunn.org/2012/05/239/
• http://cdn.slashgear.com/wp-content/uploads/2012/10/google-datacenter-tech-13.jpg
• http://deviq.com/Media/Default/Article/Dont-Call-Us-Well-Call-You-Jun-2013.png
• http://www.timeshighereducation.co.uk/Pictures/web/g/q/g/copy_paste_keyboard_button_450.jpg
• http://sanremo.com.au/wp-content/uploads/2013/05/lasagna.jpg
• http://4.bp.blogspot.
com/_9kQQgQD35rY/SaV5p8YBGhI/AAAAAAAAAkg/HOvlhIo7yGI/s400/06_Red_Green_Refactor.
JPG
• http://www.thelolshop.com/wp-content/uploads/2012/11/20121126-101937.jpg
•

More Related Content

What's hot

Zend\Expressive - höher, schneller, weiter
Zend\Expressive - höher, schneller, weiterZend\Expressive - höher, schneller, weiter
Zend\Expressive - höher, schneller, weiterRalf Eggert
 
Composer: putting dependencies on the score
Composer: putting dependencies on the scoreComposer: putting dependencies on the score
Composer: putting dependencies on the scoreRafael Dohms
 
Php 7 hhvm and co
Php 7 hhvm and coPhp 7 hhvm and co
Php 7 hhvm and coPierre Joye
 
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)ZFConf Conference
 
DevOps in PHP environment
DevOps in PHP environment DevOps in PHP environment
DevOps in PHP environment Evaldo Felipe
 
C++ for Java Developers (JavaZone Academy 2018)
C++ for Java Developers (JavaZone Academy 2018)C++ for Java Developers (JavaZone Academy 2018)
C++ for Java Developers (JavaZone Academy 2018)Patricia Aas
 
PHP traits, treat or threat?
PHP traits, treat or threat?PHP traits, treat or threat?
PHP traits, treat or threat?Nick Belhomme
 
Zend Framework Study@Tokyo #2
Zend Framework Study@Tokyo #2Zend Framework Study@Tokyo #2
Zend Framework Study@Tokyo #2Shinya Ohyanagi
 
Composer for busy developers - DPC13
Composer for busy developers - DPC13Composer for busy developers - DPC13
Composer for busy developers - DPC13Rafael Dohms
 
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)James Titcumb
 
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...ZFConf Conference
 
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyoエラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyoShohei Okada
 
Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8Michelangelo van Dam
 
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)Mark Niebergall
 
Debugging PHP with Xdebug - PHPUK 2018
Debugging PHP with Xdebug - PHPUK 2018Debugging PHP with Xdebug - PHPUK 2018
Debugging PHP with Xdebug - PHPUK 2018Mark Niebergall
 

What's hot (20)

Zend\Expressive - höher, schneller, weiter
Zend\Expressive - höher, schneller, weiterZend\Expressive - höher, schneller, weiter
Zend\Expressive - höher, schneller, weiter
 
Composer: putting dependencies on the score
Composer: putting dependencies on the scoreComposer: putting dependencies on the score
Composer: putting dependencies on the score
 
Php 7 hhvm and co
Php 7 hhvm and coPhp 7 hhvm and co
Php 7 hhvm and co
 
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
 
DevOps in PHP environment
DevOps in PHP environment DevOps in PHP environment
DevOps in PHP environment
 
C++ for Java Developers (JavaZone Academy 2018)
C++ for Java Developers (JavaZone Academy 2018)C++ for Java Developers (JavaZone Academy 2018)
C++ for Java Developers (JavaZone Academy 2018)
 
PHP traits, treat or threat?
PHP traits, treat or threat?PHP traits, treat or threat?
PHP traits, treat or threat?
 
Zend Framework Study@Tokyo #2
Zend Framework Study@Tokyo #2Zend Framework Study@Tokyo #2
Zend Framework Study@Tokyo #2
 
Your code are my tests
Your code are my testsYour code are my tests
Your code are my tests
 
Composer for busy developers - DPC13
Composer for busy developers - DPC13Composer for busy developers - DPC13
Composer for busy developers - DPC13
 
Short Introduction To "perl -d"
Short Introduction To "perl -d"Short Introduction To "perl -d"
Short Introduction To "perl -d"
 
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
Kicking off with Zend Expressive and Doctrine ORM (Sunshine PHP 2017)
 
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
ZFConf 2012: Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL ...
 
Api Design
Api DesignApi Design
Api Design
 
Smoking docker
Smoking dockerSmoking docker
Smoking docker
 
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyoエラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
 
Getting Testy With Perl6
Getting Testy With Perl6Getting Testy With Perl6
Getting Testy With Perl6
 
Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8
 
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
 
Debugging PHP with Xdebug - PHPUK 2018
Debugging PHP with Xdebug - PHPUK 2018Debugging PHP with Xdebug - PHPUK 2018
Debugging PHP with Xdebug - PHPUK 2018
 

Similar to OSDC 2014: Ole Michaelis & Sönke Rümpler: Make it SOLID - Software Architecture for System Administrators

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
 
What's New In Laravel 5
What's New In Laravel 5What's New In Laravel 5
What's New In Laravel 5Darren Craig
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php PresentationAlan Pinstein
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy CodeRowan Merewood
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐいHisateru Tanaka
 
Fabric workshop(1) - (MOSG)
Fabric workshop(1) - (MOSG)Fabric workshop(1) - (MOSG)
Fabric workshop(1) - (MOSG)Soshi Nemoto
 
The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6Wim Godden
 
DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)Oleg Zinchenko
 
Symfony CMF - PHP Conference Brazil 2011
Symfony CMF - PHP Conference Brazil 2011Symfony CMF - PHP Conference Brazil 2011
Symfony CMF - PHP Conference Brazil 2011Jacopo Romei
 
Getting up & running with zend framework
Getting up & running with zend frameworkGetting up & running with zend framework
Getting up & running with zend frameworkSaidur Rahman
 
PHP QA Tools
PHP QA ToolsPHP QA Tools
PHP QA Toolsrjsmelo
 
Converting Your Dev Environment to a Docker Stack - Cascadia
Converting Your Dev Environment to a Docker Stack - CascadiaConverting Your Dev Environment to a Docker Stack - Cascadia
Converting Your Dev Environment to a Docker Stack - CascadiaDana Luther
 
Ansible new paradigms for orchestration
Ansible new paradigms for orchestrationAnsible new paradigms for orchestration
Ansible new paradigms for orchestrationPaolo Tonin
 
ngManila - Codename: Fireball - Hello World in Angular
ngManila - Codename: Fireball - Hello World in AngularngManila - Codename: Fireball - Hello World in Angular
ngManila - Codename: Fireball - Hello World in Angularngmanila
 
Converting Your Dev Environment to a Docker Stack - php[world]
Converting Your Dev Environment to a Docker Stack - php[world]Converting Your Dev Environment to a Docker Stack - php[world]
Converting Your Dev Environment to a Docker Stack - php[world]Dana Luther
 
An intro to the JAMStack and Eleventy
An intro to the JAMStack and EleventyAn intro to the JAMStack and Eleventy
An intro to the JAMStack and EleventyLuciano Mammino
 
How To Start Up With PHP In IBM i
How To Start Up With PHP In IBM iHow To Start Up With PHP In IBM i
How To Start Up With PHP In IBM iSam Pinkhasov
 
How To Start Up With Php In Ibm I
How To Start Up With Php In Ibm IHow To Start Up With Php In Ibm I
How To Start Up With Php In Ibm IAlex Frenkel
 

Similar to OSDC 2014: Ole Michaelis & Sönke Rümpler: Make it SOLID - Software Architecture for System Administrators (20)

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
 
What's New In Laravel 5
What's New In Laravel 5What's New In Laravel 5
What's New In Laravel 5
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php Presentation
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい
 
Mojolicious lite
Mojolicious liteMojolicious lite
Mojolicious lite
 
Fabric workshop(1) - (MOSG)
Fabric workshop(1) - (MOSG)Fabric workshop(1) - (MOSG)
Fabric workshop(1) - (MOSG)
 
The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6
 
DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)
 
Symfony CMF - PHP Conference Brazil 2011
Symfony CMF - PHP Conference Brazil 2011Symfony CMF - PHP Conference Brazil 2011
Symfony CMF - PHP Conference Brazil 2011
 
Getting up & running with zend framework
Getting up & running with zend frameworkGetting up & running with zend framework
Getting up & running with zend framework
 
Getting up and running with Zend Framework
Getting up and running with Zend FrameworkGetting up and running with Zend Framework
Getting up and running with Zend Framework
 
PHP QA Tools
PHP QA ToolsPHP QA Tools
PHP QA Tools
 
Converting Your Dev Environment to a Docker Stack - Cascadia
Converting Your Dev Environment to a Docker Stack - CascadiaConverting Your Dev Environment to a Docker Stack - Cascadia
Converting Your Dev Environment to a Docker Stack - Cascadia
 
Ansible new paradigms for orchestration
Ansible new paradigms for orchestrationAnsible new paradigms for orchestration
Ansible new paradigms for orchestration
 
ngManila - Codename: Fireball - Hello World in Angular
ngManila - Codename: Fireball - Hello World in AngularngManila - Codename: Fireball - Hello World in Angular
ngManila - Codename: Fireball - Hello World in Angular
 
Converting Your Dev Environment to a Docker Stack - php[world]
Converting Your Dev Environment to a Docker Stack - php[world]Converting Your Dev Environment to a Docker Stack - php[world]
Converting Your Dev Environment to a Docker Stack - php[world]
 
An intro to the JAMStack and Eleventy
An intro to the JAMStack and EleventyAn intro to the JAMStack and Eleventy
An intro to the JAMStack and Eleventy
 
How To Start Up With PHP In IBM i
How To Start Up With PHP In IBM iHow To Start Up With PHP In IBM i
How To Start Up With PHP In IBM i
 
How To Start Up With Php In Ibm I
How To Start Up With Php In Ibm IHow To Start Up With Php In Ibm I
How To Start Up With Php In Ibm I
 

Recently uploaded

A Guideline to Zendesk to Re:amaze Data Migration
A Guideline to Zendesk to Re:amaze Data MigrationA Guideline to Zendesk to Re:amaze Data Migration
A Guideline to Zendesk to Re:amaze Data MigrationHelp Desk Migration
 
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...Alluxio, Inc.
 
10 Essential Software Testing Tools You Need to Know About.pdf
10 Essential Software Testing Tools You Need to Know About.pdf10 Essential Software Testing Tools You Need to Know About.pdf
10 Essential Software Testing Tools You Need to Know About.pdfkalichargn70th171
 
What need to be mastered as AI-Powered Java Developers
What need to be mastered as AI-Powered Java DevelopersWhat need to be mastered as AI-Powered Java Developers
What need to be mastered as AI-Powered Java DevelopersEmilyJiang23
 
AI/ML Infra Meetup | Perspective on Deep Learning Framework
AI/ML Infra Meetup | Perspective on Deep Learning FrameworkAI/ML Infra Meetup | Perspective on Deep Learning Framework
AI/ML Infra Meetup | Perspective on Deep Learning FrameworkAlluxio, Inc.
 
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdf
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdfImplementing KPIs and Right Metrics for Agile Delivery Teams.pdf
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdfVictor Lopez
 
Secure Software Ecosystem Teqnation 2024
Secure Software Ecosystem Teqnation 2024Secure Software Ecosystem Teqnation 2024
Secure Software Ecosystem Teqnation 2024Soroosh Khodami
 
how-to-download-files-safely-from-the-internet.pdf
how-to-download-files-safely-from-the-internet.pdfhow-to-download-files-safely-from-the-internet.pdf
how-to-download-files-safely-from-the-internet.pdfMehmet Akar
 
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)Gáspár Nagy
 
How to pick right visual testing tool.pdf
How to pick right visual testing tool.pdfHow to pick right visual testing tool.pdf
How to pick right visual testing tool.pdfTestgrid.io
 
Workforce Efficiency with Employee Time Tracking Software.pdf
Workforce Efficiency with Employee Time Tracking Software.pdfWorkforce Efficiency with Employee Time Tracking Software.pdf
Workforce Efficiency with Employee Time Tracking Software.pdfDeskTrack
 
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product UpdatesGraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product UpdatesNeo4j
 
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfA Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfkalichargn70th171
 
SQL Injection Introduction and Prevention
SQL Injection Introduction and PreventionSQL Injection Introduction and Prevention
SQL Injection Introduction and PreventionMohammed Fazuluddin
 
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdf
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdfStrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdf
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdfsteffenkarlsson2
 
Entropy, Software Quality, and Innovation (presented at Princeton Plasma Phys...
Entropy, Software Quality, and Innovation (presented at Princeton Plasma Phys...Entropy, Software Quality, and Innovation (presented at Princeton Plasma Phys...
Entropy, Software Quality, and Innovation (presented at Princeton Plasma Phys...Andrea Goulet
 
OpenChain @ LF Japan Executive Briefing - May 2024
OpenChain @ LF Japan Executive Briefing - May 2024OpenChain @ LF Japan Executive Briefing - May 2024
OpenChain @ LF Japan Executive Briefing - May 2024Shane Coughlan
 
APVP,apvp apvp High quality supplier safe spot transport, 98% purity
APVP,apvp apvp High quality supplier safe spot transport, 98% purityAPVP,apvp apvp High quality supplier safe spot transport, 98% purity
APVP,apvp apvp High quality supplier safe spot transport, 98% purityamy56318795
 
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...naitiksharma1124
 
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAGAI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAGAlluxio, Inc.
 

Recently uploaded (20)

A Guideline to Zendesk to Re:amaze Data Migration
A Guideline to Zendesk to Re:amaze Data MigrationA Guideline to Zendesk to Re:amaze Data Migration
A Guideline to Zendesk to Re:amaze Data Migration
 
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
 
10 Essential Software Testing Tools You Need to Know About.pdf
10 Essential Software Testing Tools You Need to Know About.pdf10 Essential Software Testing Tools You Need to Know About.pdf
10 Essential Software Testing Tools You Need to Know About.pdf
 
What need to be mastered as AI-Powered Java Developers
What need to be mastered as AI-Powered Java DevelopersWhat need to be mastered as AI-Powered Java Developers
What need to be mastered as AI-Powered Java Developers
 
AI/ML Infra Meetup | Perspective on Deep Learning Framework
AI/ML Infra Meetup | Perspective on Deep Learning FrameworkAI/ML Infra Meetup | Perspective on Deep Learning Framework
AI/ML Infra Meetup | Perspective on Deep Learning Framework
 
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdf
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdfImplementing KPIs and Right Metrics for Agile Delivery Teams.pdf
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdf
 
Secure Software Ecosystem Teqnation 2024
Secure Software Ecosystem Teqnation 2024Secure Software Ecosystem Teqnation 2024
Secure Software Ecosystem Teqnation 2024
 
how-to-download-files-safely-from-the-internet.pdf
how-to-download-files-safely-from-the-internet.pdfhow-to-download-files-safely-from-the-internet.pdf
how-to-download-files-safely-from-the-internet.pdf
 
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
 
How to pick right visual testing tool.pdf
How to pick right visual testing tool.pdfHow to pick right visual testing tool.pdf
How to pick right visual testing tool.pdf
 
Workforce Efficiency with Employee Time Tracking Software.pdf
Workforce Efficiency with Employee Time Tracking Software.pdfWorkforce Efficiency with Employee Time Tracking Software.pdf
Workforce Efficiency with Employee Time Tracking Software.pdf
 
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product UpdatesGraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
 
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfA Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
 
SQL Injection Introduction and Prevention
SQL Injection Introduction and PreventionSQL Injection Introduction and Prevention
SQL Injection Introduction and Prevention
 
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdf
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdfStrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdf
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi.pdf
 
Entropy, Software Quality, and Innovation (presented at Princeton Plasma Phys...
Entropy, Software Quality, and Innovation (presented at Princeton Plasma Phys...Entropy, Software Quality, and Innovation (presented at Princeton Plasma Phys...
Entropy, Software Quality, and Innovation (presented at Princeton Plasma Phys...
 
OpenChain @ LF Japan Executive Briefing - May 2024
OpenChain @ LF Japan Executive Briefing - May 2024OpenChain @ LF Japan Executive Briefing - May 2024
OpenChain @ LF Japan Executive Briefing - May 2024
 
APVP,apvp apvp High quality supplier safe spot transport, 98% purity
APVP,apvp apvp High quality supplier safe spot transport, 98% purityAPVP,apvp apvp High quality supplier safe spot transport, 98% purity
APVP,apvp apvp High quality supplier safe spot transport, 98% purity
 
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...
 
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAGAI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
 

OSDC 2014: Ole Michaelis & Sönke Rümpler: Make it SOLID - Software Architecture for System Administrators