SlideShare ist ein Scribd-Unternehmen logo
1 von 69
WARNING
This presentation may contain:
‣ Alternattive opinions
‣ Mention of phrase "new framework"
‣ Mention of paid services and/or software
‣ Out-of PHP concepts (Java, Scala, Ruby)
Love and Hate
between ORM
and
Query Builders
Myself
‣ Love Web Apps
‣ 25 years of coding
‣ Entrepreneur
‣ I buy Software
My PHP Startup
‣ Helps developers
‣ Open-source
‣ PHP in Enterprise
‣ Code Sharing
About Me
Query
‣ Control
‣ Advanced Features
‣ Multi-Record
ORM
‣ 10+ tables
‣ SoftDelete, Audit
‣ Domain Model
Database Interaction
Today
MapperEntity Query
ORM: How it should
work
Database
Business Logic
ORM
MapperEntity SQL Query
The Reality
SQL Database
Business Logic
ORM
SQL Query
Why Bother…
SQL Database
Business Logic
Love Compatibility
Query Builder
‣ Query
‣ Conditions
‣ Statements
‣ Expressions
ORM
‣ Entity
‣ Property
‣ Operations
(C.R.U.D.)
What do we work with?
Love Compatibility
Entity Property Operations
Query ❤️
Condition
Statements
Expression
ORM Components
QueryComponents
Love Compatibility
Entity Property Operations
Query ❤️ 😔 😔
Condition
Statements
Expression
ORM Components
QueryComponents
Love Compatibility
Entity Property Operations
Query ❤️ 😔 😔
Condition 😐 ❤️
Statements
Expression
ORM Components
QueryComponents
Love Compatibility
Entity Property Operations
Query ❤️ 😔 😔
Condition 😐 😔 ❤️
Statements
Expression
ORM Components
QueryComponents
Love Compatibility
Entity Property Operations
Query ❤️ 😔 😔
Condition 😐 😔 ❤️
Statements 💀 💀 💀
Expression
ORM Components
QueryComponents
Love Compatibility
Entity Property Operations
Query ❤️ 😔 😔
Condition 😐 😔 ❤️
Statements 💀 💀 💀
Expression 💀 💀 💀
ORM Components
QueryComponents
Reimagine a better data access
framework. With fresh start.
Agile Data
Agile Data
Entity Property Operations
Query
Condition
Statements
Expression
ORM Components
QueryComponents
Properties
/** @Column(type="datetime", name="posted_at") */
private $postedAt;
protected $casts = [
'is_admin' => 'boolean',
];
public function setFirstNameAttribute($value)
{
$this->attributes['first_name'] = strtolower($value);
}
Fields in Agile Data
$book->addField('total_cost', ['type'=>'money']);
Like properties, but smarter.
Property
‣ Handy and Native
‣ No type
‣ No logic
‣ No meta-info
Field
‣ Array-access
‣ Type enforcing
‣ Extensible logic
‣ Meta-info
Fields
Fields
class Document extends atk4dataModel
{
public $table = 'document';
function init() {
parent::init();
$this->addField('ref_no', ['type'=>'string']);
$this->addField('date', ['type'=>'date']);
$this->addField('type', ['enum'=>['invoice','payment']]);
$this->hasOne('contact_id', new Contact());
$this->addField('is_archived', ['type'=>'boolean']);
}
}
Generic UI
$form = new uiForm();
$form->setModel(new smboModel_Job($db));
echo $form->render();
Fastest imaginable way to build
good looking data entry form?
Generic UI
Expression
$client->addExpression(
'balance',
'coalesce([total_invoice]-[total_paid],0)'
);
Define custom SQL code for your
field.
Aggregate Field
$client->hasMany('Order')
->addField('total_orders', [
'field'=>'amount', 'aggregate'=>'sum'
]);
Express related model aggregate
as sub-query.
Agile Data
Entity Field Operations
Query ❤️
Condition ❤️
Statements ❤️
Expression ❤️
ORM Components
QueryComponents
Entity
Client
name
address_id
Order
title
total_order
Expression
SubQuery
hasMany
hasOne
6 objects
Is this slow?
6 objects 5 rows*
Object representing collection of
records
Data Sets
Record Mapping
‣ Active Record and ORM map individual records
‣ Multiple records require Multiple objects in memory
Model_Client object
user type=client
user type=client
user type=client
user type=client
user type=admin
user type=admin
tableuser
Model_Client object
DataSet Mapping
‣ Agile Data works with DataSets
‣ Multiple records require Single objects in memory
Model_Client object
user type=client
user type=client
user type=client
user type=client
user type=admin
user type=admin
tableuser
DataSet
Client Admin
User
Conditions
class Client extend User {
function init() {
parent::init();
$this->addCondition('type', 'client');
}
}
Narrow the scope of accessible
records
Conditions
$client = new Client($db);
$client->load(12);
$client['type'] = 'admin';
$client->save(); // <== Exception
Prevent human error
Project
DataSet $m = new Project($db);
Project
$m = new Project($db);
$m->addCondition(
'client_id', $c_id
);
client=$c_id
Project
$m = new Project($db);
$m->addCondition(
'client_id', $c_id
);
$m->addCondition(
'is_cancelled',
false
);
client=1
client=$c_id
is_cancelled =
"N"
Conditions
$client = new Client($db);
$client->load($_GET['user_id']);
$project = $client->ref('Project');
$project->insert($_POST);
Prevent human error
Conditions
$profitable_client = new Client($db);
$profitable_client->addCondition($this->expr(
'[income]>[expense]'
));
$data = $profitable_client->export();
Dynamically add expressions for
reports.
Deep Traversal
foreach(
$author->withID(20)
->ref('App')
->ref('Review')
->addCondition('rating', 1) as $bad_review
) {
$bad_review->sendApologyEmail();
}
Traverse without querying
QRM->Q.B.
‣ Static scope
‣ Limited inheritance
‣ Persistence layer
DataSet Model
‣ Dynamic scope
‣ Fully OOP
‣ References infer
conditions
‣ Domain layer
Model
Agile Data
Model (DataSet
)
Field Operations
Query ❤️ ❤️
Condition ❤️ ❤️
Statements ❤️ ❤️
Expression ❤️ ❤️
ORM Components
QueryComponents
ORM limit multi-record features
and other database capabilities.
N+1 problem
foreach (Client::all() as $client) {
foreach($client->orders() as $order){
$sum += $order->amount;
}
}
N+1 problem
‣ 20 users in database
‣ 20 extra queries to fetch orders
foreach (Client::all() as $client) {
foreach($client->orders() as $order){
$sum += $order->amount;
}
}
Memory Problem
‣ 20 users in database
‣ array of 20 objects
‣ other properties are also fetched
foreach (Client::all() as $client) {
foreach($client->orders() as $order){
$sum += $order->amount;
}
}
Lazy-loading; ID Stuffing
‣ only load IDs
‣ trigger loading on property access
‣ select from `order` where user in (1,2,3,…)
Action
$client = new Client($db);
$sum = $client->ref('Order')
->action('fx', ['sum', 'amount'])
->execute();
Event from Domain Model to your
database
Multi-record operations
$author->withID(20)
->ref('App')
->ref('Review')
->addCondition('rating', 1)
->action('delete')
->execute();
Delete all entries in data-set
Multi-record operations
$author->withID(20)
->ref('App')
->ref('Review')
->addCondition('rating', '<', 3)
->action('update')
->set('rating=rating+1')
->execute();
or just update rating
Aggregation
$q = $client->action('field', ['industry']);
$q->field('count(*)', 'c');
$q->group('industry');
$data = $q->get();
Create any query around Model
Union
$q_inv = $client->ref('Invoice')
->action('field',['date','total']);
$q_pay = $client->ref('Payment')
->action('field',['date','paid']);
foreach($db->expr(
'select * from ([] UNION []) u1',
$q_inv, $q_pay
) as $row) {
///
}
Prepare client statement
ORM
‣ Emit query-builder
‣ Limited scope
support
‣ SQL only
‣ Fully Persistence
logic
Agile Actions
‣ Emit DSQL
‣ All conditions
applied
‣ Extensible to
NoSQL
‣ Domain model
support
Multi-record operations
Agile Data
Model (DataSet
)
Field Operations
Query ❤️ ❤️ ❤️
Condition ❤️ ❤️ ❤️
Statements ❤️ ❤️ ❤️
Expression ❤️ ❤️ ❤️
ORM Components
QueryComponents
Summary
‣ ORM and Query Builders has a bumpy relationship
‣ Luckily there are other patterns
‣ Consider query latency
‣ Consider flexibility
‣ Consider abstraction
Execute less queries Design a beautiful API
Friendly with UIExtensions
Agile Data
Download
Result
Make UI better
git.io/ad
✓ Works in any framework / PHP app
✓ Lightweight and Agile
✓ Integrates with UI frameworks (like
ATK)
✓ Commercial Support
Agile Data is Open-
Source
Join my OSS project
‣ Agile Data v1.1.5
git.io/ad
‣ Agile UI (developing)
github.com/atk4/ui
My other topics
‣ Agile Toolkit
Full-stack PHP UI
More examples
if there is time
Query into Field
$client->addExpression('last_sale',
function($m){
return $m->refLink('Invoice')
->setLimit(1)
->setOrder('date desc')
->action('field',['total']);
}, 'type'=>'money'
);
Convert Entity into Query then use
inside Field / Expression.
Join on Expression
$invoice->hasOne('client_id', new Client())
->addField('client_country_id', 'country_id');
$invoice->join('country', 'client_country_id')
->addFields([
'country_short_code'=>'short_code',
'country_is_eu'=>'is_eu',
'country'=>'name'
]);
If you need country data inside
your Invoice report, but country_id
is defined through Client.
Aliasing
Self-referencing
class Folder extends atk4dataModel
{
public $table = 'folder';
public function init()
{
parent::init();
$this->addField('name');
$this->hasMany('SubFolder', [
new Folder(),
'their_field'=>'parent_id']
)->addField('count', [
'aggregate'=>'count',
'field'=>$this->expr('*')]
);
$this->hasOne('parent_id', new Folder())
->addTitle();
}
}
Unique Aliases
select
`id`,`name`,
(select count(*) from `folder` `S` where
`parent_id` = `folder`.`id`) `count`,
`folder`.`parent_id`,
(select `name` from `folder` `p` where
`id` = `folder`.`parent_id`) `parent`
from `folder`
✓ ACL, Audit, Undo, Logging, ..
✓ File Management
✓ Import/Export utility
✓ RestAPI server
Commercial Extensions
git.io/ad

Weitere ähnliche Inhalte

Was ist angesagt?

Love Your Database Railsconf 2017
Love Your Database Railsconf 2017Love Your Database Railsconf 2017
Love Your Database Railsconf 2017gisborne
 
Rapid Prototyping with PEAR
Rapid Prototyping with PEARRapid Prototyping with PEAR
Rapid Prototyping with PEARMarkus Wolff
 
Typed? Dynamic? Both! Cross-platform DSLs in C#
Typed? Dynamic? Both! Cross-platform DSLs in C#Typed? Dynamic? Both! Cross-platform DSLs in C#
Typed? Dynamic? Both! Cross-platform DSLs in C#Vagif Abilov
 
Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React Robert DeLuca
 
Data Access Options in SharePoint 2010
Data Access Options in SharePoint 2010Data Access Options in SharePoint 2010
Data Access Options in SharePoint 2010Rob Windsor
 
GR8Conf 2011: Grails Webflow
GR8Conf 2011: Grails WebflowGR8Conf 2011: Grails Webflow
GR8Conf 2011: Grails WebflowGR8Conf
 
How to perform debounce in react
How to perform debounce in reactHow to perform debounce in react
How to perform debounce in reactBOSC Tech Labs
 
Presentation technico-commercial-ruby-on-rails
Presentation technico-commercial-ruby-on-railsPresentation technico-commercial-ruby-on-rails
Presentation technico-commercial-ruby-on-railsNovelys
 
RichFaces: more concepts and features
RichFaces: more concepts and featuresRichFaces: more concepts and features
RichFaces: more concepts and featuresMax Katz
 
Zensations Drupal 8 GraphQL Presentation 2015
Zensations Drupal 8 GraphQL Presentation 2015Zensations Drupal 8 GraphQL Presentation 2015
Zensations Drupal 8 GraphQL Presentation 2015Zensations GmbH
 
The battle of Protractor and Cypress - RunIT Conference 2019
The battle of Protractor and Cypress - RunIT Conference 2019The battle of Protractor and Cypress - RunIT Conference 2019
The battle of Protractor and Cypress - RunIT Conference 2019Ludmila Nesvitiy
 
Why is crud a bad idea - focus on real scenarios
Why is crud a bad idea - focus on real scenariosWhy is crud a bad idea - focus on real scenarios
Why is crud a bad idea - focus on real scenariosDivante
 
Introduction to Angular js
Introduction to Angular jsIntroduction to Angular js
Introduction to Angular jsMustafa Gamal
 

Was ist angesagt? (20)

Love Your Database Railsconf 2017
Love Your Database Railsconf 2017Love Your Database Railsconf 2017
Love Your Database Railsconf 2017
 
Solving the n + 1 query problem
Solving the n + 1 query problemSolving the n + 1 query problem
Solving the n + 1 query problem
 
Rapid Prototyping with PEAR
Rapid Prototyping with PEARRapid Prototyping with PEAR
Rapid Prototyping with PEAR
 
Apache spark
Apache sparkApache spark
Apache spark
 
SQL Basics
SQL BasicsSQL Basics
SQL Basics
 
Typed? Dynamic? Both! Cross-platform DSLs in C#
Typed? Dynamic? Both! Cross-platform DSLs in C#Typed? Dynamic? Both! Cross-platform DSLs in C#
Typed? Dynamic? Both! Cross-platform DSLs in C#
 
Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React
 
Data Access Options in SharePoint 2010
Data Access Options in SharePoint 2010Data Access Options in SharePoint 2010
Data Access Options in SharePoint 2010
 
Graphql, REST and Apollo
Graphql, REST and ApolloGraphql, REST and Apollo
Graphql, REST and Apollo
 
GR8Conf 2011: Grails Webflow
GR8Conf 2011: Grails WebflowGR8Conf 2011: Grails Webflow
GR8Conf 2011: Grails Webflow
 
How to perform debounce in react
How to perform debounce in reactHow to perform debounce in react
How to perform debounce in react
 
Presentation technico-commercial-ruby-on-rails
Presentation technico-commercial-ruby-on-railsPresentation technico-commercial-ruby-on-rails
Presentation technico-commercial-ruby-on-rails
 
RichFaces: more concepts and features
RichFaces: more concepts and featuresRichFaces: more concepts and features
RichFaces: more concepts and features
 
Unit testing zend framework apps
Unit testing zend framework appsUnit testing zend framework apps
Unit testing zend framework apps
 
React lecture
React lectureReact lecture
React lecture
 
Zensations Drupal 8 GraphQL Presentation 2015
Zensations Drupal 8 GraphQL Presentation 2015Zensations Drupal 8 GraphQL Presentation 2015
Zensations Drupal 8 GraphQL Presentation 2015
 
The battle of Protractor and Cypress - RunIT Conference 2019
The battle of Protractor and Cypress - RunIT Conference 2019The battle of Protractor and Cypress - RunIT Conference 2019
The battle of Protractor and Cypress - RunIT Conference 2019
 
Why is crud a bad idea - focus on real scenarios
Why is crud a bad idea - focus on real scenariosWhy is crud a bad idea - focus on real scenarios
Why is crud a bad idea - focus on real scenarios
 
Introduction to Angular js
Introduction to Angular jsIntroduction to Angular js
Introduction to Angular js
 
java ee 6 Petcatalog
java ee 6 Petcatalogjava ee 6 Petcatalog
java ee 6 Petcatalog
 

Andere mochten auch

Agile concepts and opportunities for contract management r walters
Agile concepts and opportunities for contract management  r walters Agile concepts and opportunities for contract management  r walters
Agile concepts and opportunities for contract management r walters Expressworks International
 
Your Messy Agile Career
Your Messy Agile CareerYour Messy Agile Career
Your Messy Agile CareerDaniel Davis
 
IBM InterConnect Speaker Proposal Tips
IBM InterConnect Speaker Proposal TipsIBM InterConnect Speaker Proposal Tips
IBM InterConnect Speaker Proposal TipsIBM Rational software
 
Ionel Condor - Lessons Learned in Agile Career Development
Ionel Condor - Lessons Learned in Agile Career DevelopmentIonel Condor - Lessons Learned in Agile Career Development
Ionel Condor - Lessons Learned in Agile Career DevelopmentMozaic Works
 
Architecting the Agile Career
Architecting the Agile CareerArchitecting the Agile Career
Architecting the Agile CareerJosh Atwell
 
Lessons learned in agile career development jazoon 2012
Lessons learned in agile career development   jazoon 2012Lessons learned in agile career development   jazoon 2012
Lessons learned in agile career development jazoon 2012Ionel Condor
 
LEAN Management capability
LEAN Management capabilityLEAN Management capability
LEAN Management capabilityGerardPHealy
 
Agile Career Development from the trenches - XP 2013 Vienna
Agile Career Development from the trenches  -  XP 2013 ViennaAgile Career Development from the trenches  -  XP 2013 Vienna
Agile Career Development from the trenches - XP 2013 ViennaIonel Condor
 
Agile Career Development - How can we help organisations and employees adapt ...
Agile Career Development - How can we help organisations and employees adapt ...Agile Career Development - How can we help organisations and employees adapt ...
Agile Career Development - How can we help organisations and employees adapt ...Antoinette Oglethorpe
 
Enterprise Agile Adoption - An Organizational Change Management Journey
Enterprise Agile Adoption - An Organizational Change Management JourneyEnterprise Agile Adoption - An Organizational Change Management Journey
Enterprise Agile Adoption - An Organizational Change Management JourneyZaheer Abbas Contractor
 

Andere mochten auch (12)

Agile concepts and opportunities for contract management r walters
Agile concepts and opportunities for contract management  r walters Agile concepts and opportunities for contract management  r walters
Agile concepts and opportunities for contract management r walters
 
Your Messy Agile Career
Your Messy Agile CareerYour Messy Agile Career
Your Messy Agile Career
 
IBM InterConnect Speaker Proposal Tips
IBM InterConnect Speaker Proposal TipsIBM InterConnect Speaker Proposal Tips
IBM InterConnect Speaker Proposal Tips
 
Ionel Condor - Lessons Learned in Agile Career Development
Ionel Condor - Lessons Learned in Agile Career DevelopmentIonel Condor - Lessons Learned in Agile Career Development
Ionel Condor - Lessons Learned in Agile Career Development
 
Architecting the Agile Career
Architecting the Agile CareerArchitecting the Agile Career
Architecting the Agile Career
 
Lessons learned in agile career development jazoon 2012
Lessons learned in agile career development   jazoon 2012Lessons learned in agile career development   jazoon 2012
Lessons learned in agile career development jazoon 2012
 
The future of work
The future of workThe future of work
The future of work
 
LEAN Management capability
LEAN Management capabilityLEAN Management capability
LEAN Management capability
 
Agile Career Development from the trenches - XP 2013 Vienna
Agile Career Development from the trenches  -  XP 2013 ViennaAgile Career Development from the trenches  -  XP 2013 Vienna
Agile Career Development from the trenches - XP 2013 Vienna
 
Agile Career Development - How can we help organisations and employees adapt ...
Agile Career Development - How can we help organisations and employees adapt ...Agile Career Development - How can we help organisations and employees adapt ...
Agile Career Development - How can we help organisations and employees adapt ...
 
Enterprise Agile Adoption - An Organizational Change Management Journey
Enterprise Agile Adoption - An Organizational Change Management JourneyEnterprise Agile Adoption - An Organizational Change Management Journey
Enterprise Agile Adoption - An Organizational Change Management Journey
 
Tools and Techniques for Mentoring
Tools and Techniques for MentoringTools and Techniques for Mentoring
Tools and Techniques for Mentoring
 

Ähnlich wie Agile data presentation 3 - cambridge

symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207patter
 
CGI::Prototype (NPW 2006)
CGI::Prototype (NPW 2006)CGI::Prototype (NPW 2006)
CGI::Prototype (NPW 2006)brian d foy
 
Web internship Yii Framework
Web internship  Yii FrameworkWeb internship  Yii Framework
Web internship Yii FrameworkNoveo
 
SQL for Web APIs - Simplifying Data Access for API Consumers
SQL for Web APIs - Simplifying Data Access for API ConsumersSQL for Web APIs - Simplifying Data Access for API Consumers
SQL for Web APIs - Simplifying Data Access for API ConsumersJerod Johnson
 
PHPUnit Episode iv.iii: Return of the tests
PHPUnit Episode iv.iii: Return of the testsPHPUnit Episode iv.iii: Return of the tests
PHPUnit Episode iv.iii: Return of the testsMichelangelo van Dam
 
Amazon Web Services for PHP Developers
Amazon Web Services for PHP DevelopersAmazon Web Services for PHP Developers
Amazon Web Services for PHP DevelopersJeremy Lindblom
 
SproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsSproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsMike Subelsky
 
Javascript first-class citizenery
Javascript first-class citizeneryJavascript first-class citizenery
Javascript first-class citizenerytoddbr
 
Building Testable PHP Applications
Building Testable PHP ApplicationsBuilding Testable PHP Applications
Building Testable PHP Applicationschartjes
 
Full Stack Toronto - the 3R Stack
Full Stack Toronto - the 3R StackFull Stack Toronto - the 3R Stack
Full Stack Toronto - the 3R StackScott Persinger
 
Agile Data concept introduction
Agile Data   concept introductionAgile Data   concept introduction
Agile Data concept introductionRomans Malinovskis
 
Future of Web Apps: Google Gears
Future of Web Apps: Google GearsFuture of Web Apps: Google Gears
Future of Web Apps: Google Gearsdion
 
Maior performance no seu sistema com o uso adequado de orm em rails
Maior performance no seu sistema com o uso adequado de orm em railsMaior performance no seu sistema com o uso adequado de orm em rails
Maior performance no seu sistema com o uso adequado de orm em railsIsaac de Souza
 
Apex Enterprise Patterns: Building Strong Foundations
Apex Enterprise Patterns: Building Strong FoundationsApex Enterprise Patterns: Building Strong Foundations
Apex Enterprise Patterns: Building Strong FoundationsSalesforce Developers
 
Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...
Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...
Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...Coupa Software
 
Implementation of GUI Framework part3
Implementation of GUI Framework part3Implementation of GUI Framework part3
Implementation of GUI Framework part3masahiroookubo
 

Ähnlich wie Agile data presentation 3 - cambridge (20)

symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207
 
CGI::Prototype (NPW 2006)
CGI::Prototype (NPW 2006)CGI::Prototype (NPW 2006)
CGI::Prototype (NPW 2006)
 
Web internship Yii Framework
Web internship  Yii FrameworkWeb internship  Yii Framework
Web internship Yii Framework
 
SQL for Web APIs - Simplifying Data Access for API Consumers
SQL for Web APIs - Simplifying Data Access for API ConsumersSQL for Web APIs - Simplifying Data Access for API Consumers
SQL for Web APIs - Simplifying Data Access for API Consumers
 
PHPUnit Episode iv.iii: Return of the tests
PHPUnit Episode iv.iii: Return of the testsPHPUnit Episode iv.iii: Return of the tests
PHPUnit Episode iv.iii: Return of the tests
 
Amazon Web Services for PHP Developers
Amazon Web Services for PHP DevelopersAmazon Web Services for PHP Developers
Amazon Web Services for PHP Developers
 
SproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsSproutCore and the Future of Web Apps
SproutCore and the Future of Web Apps
 
Javascript first-class citizenery
Javascript first-class citizeneryJavascript first-class citizenery
Javascript first-class citizenery
 
Advanced redux
Advanced reduxAdvanced redux
Advanced redux
 
70562 (1)
70562 (1)70562 (1)
70562 (1)
 
Framework
FrameworkFramework
Framework
 
Building Testable PHP Applications
Building Testable PHP ApplicationsBuilding Testable PHP Applications
Building Testable PHP Applications
 
Full Stack Toronto - the 3R Stack
Full Stack Toronto - the 3R StackFull Stack Toronto - the 3R Stack
Full Stack Toronto - the 3R Stack
 
Agile Data concept introduction
Agile Data   concept introductionAgile Data   concept introduction
Agile Data concept introduction
 
Future of Web Apps: Google Gears
Future of Web Apps: Google GearsFuture of Web Apps: Google Gears
Future of Web Apps: Google Gears
 
Yii Introduction
Yii IntroductionYii Introduction
Yii Introduction
 
Maior performance no seu sistema com o uso adequado de orm em rails
Maior performance no seu sistema com o uso adequado de orm em railsMaior performance no seu sistema com o uso adequado de orm em rails
Maior performance no seu sistema com o uso adequado de orm em rails
 
Apex Enterprise Patterns: Building Strong Foundations
Apex Enterprise Patterns: Building Strong FoundationsApex Enterprise Patterns: Building Strong Foundations
Apex Enterprise Patterns: Building Strong Foundations
 
Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...
Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...
Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...
 
Implementation of GUI Framework part3
Implementation of GUI Framework part3Implementation of GUI Framework part3
Implementation of GUI Framework part3
 

Mehr von Romans Malinovskis

Mehr von Romans Malinovskis (7)

Lightning talk teaching php to kids with atk
Lightning talk teaching php to kids with atkLightning talk teaching php to kids with atk
Lightning talk teaching php to kids with atk
 
Agile toolkit present 2012
Agile toolkit present 2012Agile toolkit present 2012
Agile toolkit present 2012
 
Agile toolkit present 2012
Agile toolkit present 2012Agile toolkit present 2012
Agile toolkit present 2012
 
Agile Toolkit Technical Presentation
Agile Toolkit Technical PresentationAgile Toolkit Technical Presentation
Agile Toolkit Technical Presentation
 
Agile Tour presentation
Agile Tour presentationAgile Tour presentation
Agile Tour presentation
 
Saa s lifecycle
Saa s lifecycleSaa s lifecycle
Saa s lifecycle
 
73 Less Fugly Epicenter
73 Less Fugly   Epicenter73 Less Fugly   Epicenter
73 Less Fugly Epicenter
 

Kürzlich hochgeladen

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
 
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
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
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
 
How To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROHow To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROmotivationalword821
 
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
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 

Kürzlich hochgeladen (20)

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
 
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...
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
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
 
How To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROHow To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTRO
 
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)
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 

Agile data presentation 3 - cambridge