SlideShare una empresa de Scribd logo
1 de 54
Descargar para leer sin conexión
Honey, I shrunk the code !
JandBeyond 2014, Königstein, 30 May 2014
2004 - 20142004 - 2014
Hi ! :-)
2
Beat  Joomler since 12 years (ok, Mambo dinosaur ;-)
 Top-20 Joomla 1.0.15 and 3.2.0 contributor
(“App-Store” install from web + JUX team)
 Membre Joomla Security JSST and JBS
 ‘beat’ on forums, otherwise in Switzerland
 PhD Swiss Federal Institute ofTech. & Bell Labs
 Datacoms, Internet, Sécurité & web-apps
 “Make it as simple as possible, but no less”
I love open-source and work with the community
30.05.14 © Joomlapolis.com 2004-2014 3
Today…
Why are…
●
Open-source…
●
Software System Architecture and Design…
●
Abstraction, Consistency, DRY…
●
Evolution of Software Engineering…
●
Methodology and specifcations before implementation…
…so important ?
●
2014: Introducing AHA!WOW?
●
Features, Examples from CB 2.0 and CBSubs GPL 3.0
●
Conclusions
3
30.05.14 © Joomlapolis.com 2004-2014 4
Why Open-source ?
●
Freedom 0. run for any purposes
●
Freedom 1. study & change to your wish
●
Freedom 2. redistribute to help your neighbor
●
Freedom. 3. redistribute modifed copies
●
You control your computer. Not the other way around!
●
You own and control your own data: Open-data
●
The SaaS problem
●
Google Reader, Posterous, Google Wave, …
●
The free SaaS problem
●
next: Google Mail ???
30.05.14 © Joomlapolis.com 2004-2014 5
Why Software System Architecture design ?
●
GoodArchitecture brings:
●
Beauty
●
Functionality
●
Consistency
●
Durability
●
Happyness !
●
Lack of architecture results in:
●
The reverse (unless you are very lucky !)
●
Good architects are hard to fnd and hard to keep.
30.05.14 © Joomlapolis.com 2004-2014 6
Why Software System Architecture design ?
●
In software good architecture translates in:
●
Clean vs messy code
●
Re-usability of code and libraries vs dedicated purpose
●
Consistent genericAPI vs unconsistent dedicatedAPI
●
No copy-paste (DRY) vs copy-pasted redundant code
●
Aspect-oriented code vs mixed-aspects code
●
Independant parts vsTightly-coupled inter-dependant parts
30.05.14 © Joomlapolis.com 2004-2014 7
Why Software System Architecture design ?
●
Easy ?
●
Yes, in theory!
●
In practice, no! :
●
History
●
Can't rewrite all all the time
●
Need for backwards-compatibility
●
Lack of time
●
Large changes and refactorings needed
●
To complicated to review (thus to be committed)
●
But doable!
●
Example: Observers and Mapper Pattern I introduced for Tags
●
Used without changes for Content History !
30.05.14 © Joomlapolis.com 2004-2014 8
Why Abstraction, Consistency, DRY ?
●
Abstraction is boring
●
Requires understanding benefts of modelisation
●
But allows reuse in diferent, unexpected situations
●
Consistency is not easy
●
Requires understanding of the existing and examples
●
But is a big win for the user experience and new features
●
DRY is more work at the frst copy
●
Hard to understand for graduates of the
“Copy-Paste University”
●
But brings maintenability and code-reduction
●
Less code, Simpler code, Easier to maintain.
30.05.14 © Joomlapolis.com 2004-2014 9
Evolution of Software Engineering
●
Pionneering eras
●
Permanent Software crisis since the seventies:
●
Budgets, schedule, productivity, quality, security
●
Reaching limits of current paradigms and architectures
●
Reaching limits of current software methodology
●
80's and 90's: No silver bullet
●
80's: Software maintenance = 2x development cost
●
90's: Costs raised +30%
●
95 survey: 50% of operational software not considered as successful
●
Average software project overshoots by 50%
●
75% of large software are unused or do not meet specs.
30.05.14 © Joomlapolis.com 2004-2014 10
Evolution of Software Engineering
●
Houston, we still have a problem:
A 10+ Million $ software project has
100% chances to:
●
Run late
●
Be over budget
●
Be unproductive
●
Unusable
●
Have quality issues
●
Have security (sometimes lethal) issues
IF it even succeeds one day !
30.05.14 © Joomlapolis.com 2004-2014 11
Evolution of Software Engineering
●
Many trials to circumvent the crisis:
●
Methods:
●
Structured
●
Object-oriented
●
Unit-tests
●
Output-tests
●
Tools (IDE, lint, testing)
●
Discipline and professionalism
●
Formal methods
●
Processes
●
No Silver Bullet yet found!
●
And there is no single solution to the crisis.
30.05.14 © Joomlapolis.com 2004-2014 12
Evolution of Software Engineering
●
Current trends:
●
Aspects (Aspect Oriented Programming)
●
Entity – Relation - Processor
●
Hierarchical Model – View - Controller
●
Model-driven design
●
Model transformation
●
Code generation
●
Dependency Injection Containers
●
Agile
●
Extreme Programming
●
Lightweight coding
●
Formal methods
●
Code-generators
30.05.14 © Joomlapolis.com 2004-2014 13
Evolution of Software Engineering
●
Next trends: (my own forecast)
●
Formal Description Languages
●
Specifcations-driven interpreters and code-generators
●
Automated Dependency Injection Containers
●
Lightweight coding
●
Domain-specifc Languages
●
And in Web User Experience:
●
More natural interactions
●
Simpler Uis, but more powerful
●
Workfow-oriented Uis
●
Mobile frst
30.05.14 © Joomlapolis.com 2004-2014 14
Why Methodology and specs before implementation ?
●
Well…
●
It's like building a house without drawings !
●
Will it hold tight ?
●
Will workers be happy to frst build then go through a design
review process ?
●
Will it:
●
Look beautiful ?
●
Be functional ?
●
Be consistent ?
●
Durable ?
●
Will its users be happy ?
●
With careful planning and specs:Yes !
30.05.14 © Joomlapolis.com 2004-2014 15
Enough with problems!… But is there a solution ?
●
Remember: There is no silver bullet…
●
But we can do much, much, much, much better !
●
How ?
●
Easy:
1. Specify functionality
2. Review specifcation
3. Design software
4. Review design to respect specs
3. Implement according to design
4. Verify that implementation respects design
●
Is that easy ?
●
Does it guarantee that implementation respects specs ?
More
Traditional design
●
Specify
●
Design
●
Implement
(in MVC)
16© Joomlapolis.com 2004-2014
…Unrelated !
30.05.14 © Joomlapolis – 2004 - 2014 17
AHAWOW
More
Community Builder 2.0
 5Years of research
at Joomlapolis Labs!
18© Joomlapolis.com 2004-2014
Related !
2012-05-20 19© Joomlapolis.com 2004-2014
NO Implementation!
No <?PHP ?> code!
No <script /> code!
No SQL queries!
Look Ma !
INTRODUCING…
AHA?
© Joomlapolis.com 2004-2014 20
Automatc
Homogenous
Applicatons
Web
Optmized
Workfows? !
WOW!™
AHA? …Compare… WOW!
Classical (H)MVC:
 Model+View+Controller
implementation
 + Helpers
 and Javascript helpers
 Nothierarchical
 Not agonistic (PHP)
 “COPY-PASTE” code
 Lot of layouting
 Notformal
AHA?WOW!™ MVC:
 Specifcation only
 Hierarchical – MVC
 Agonistic (portable)
 DRY, no specifc code
(or very little)
 Formal
© Joomlapolis.com 2004-2014 21
AHA?WOA!
So……?
…The 2’ Example:
Currency rates browser
© Joomlapolis.com 2004-2014 22
More
❶ Model:
<table name="#__currencies" class="Currency">
<columns>
<column name="id" type="sql:int(11)" label="Currency Id" />
<column name="base_currency" type="sql:varchar(3)" label="Base currency" />
<column name="currency" type="sql:varchar(3)" label="Target currency" />
<column name="rate" type="sql:foat" null="true" label="Exchange rate" />
</columns>
</table>
23© Joomlapolis.com 2004-2014
This installs / upgrades database !
More
❷ Controller:
<action name="show_currencies" request="view" requestparams="showcur" >
<showview view="showcurrencies" mode="show">
<data name="currencies" table="#__currencies">
</showview>
</action>
24© Joomlapolis.com 2004-2014
Controller links Model with View
More
❸ View:
<view name="showcurrencies" type="params" ui="admin" label="Currencies">
<tablebrowser name="currenciesbrowser" label="Currency exchange rates">
<listfelds>
<rows type="standard" height="auto" limit="15" >
<feld name="" type="rownumber" width="20px" align="right" label="#" />
<feld name="id" type="primarycheckbox" width="20px" />
<feld name="currency" type="string" width="10%" label="Currency" />
<feld name="base_currency" type="string" width="30%" label="Base currency" />
<feld name="rate" type="foat" width="30%" label="Exchange rate" />
<feld name="id" type="int" width="20%" label="Id" />
</rows>
</listfelds>
</tablebrowser>
</view>
25© Joomlapolis.com 2004-2014
Views defne Items to display & Layout
THERESULT
 The result:
© Joomlapolis.com 2004-2014 26
27© Joomlapolis.com 2004-2014
CBSubs GPL 3.0
uses already
AHA?WOW!™
CB 2.0 now too !
CBSubs Administration: 0 lines of specifc code
2012-05-20 © Joomlapolis.com 2004-2014 28
 6900 lines of specifcations (core CBSubs CB plugin) only
– 41 controllers
– 50 views
– 56 models
– 397 “queries”
– 650 settings
`ONE’ MORE THING…
 AHA?WOW DOES MUCH MORE:
 includes:
– Database-agonistic query-compiler and schema
– Formal dataset query specifcations
– Inheritence
– Permissions &View Access Levels handling
 Handles 100% of the Admin interface
– Toolbar, Menus
– Online Help
– All feldTypes
– Tables, Graphs, Widgets, …
 And is event-driven and event-triggering
2012-05-20 © Joomlapolis.com 2004-2014 29
Database scheme description
●
Handles:
●
Creation
●
Checks
●
Upgrades
●
Downgrades
automaticaly
<table name="#__comprofiler_tabs" class="" strict="false" drop="never">
<columns>
<column name="tabid" type="sql:int(11)" auto_increment="23" />
<column name="title" type="sql:varchar(50)" />
<column name="description" type="sql:text" null="true" />
<column name="ordering" type="sql:int(11)" />
<column name="ordering_register" type="sql:int(11)" default="10" />
<column name="width" type="sql:varchar(10)" default=".5" />
<column name="enabled" type="sql:tinyint(1)" default="1" />
<column name="pluginclass" type="sql:varchar(255)" null="true" />
<column name="pluginid" type="sql:int(11)" null="true" />
<column name="fields" type="sql:tinyint(1)" default="1" />
<column name="params" type="sql:mediumtext" null="true" />
<column name="sys" type="sql:tinyint(4)" />
<column name="displaytype" type="sql:varchar(255)" />
<column name="position" type="sql:varchar(255)" />
<column name="viewaccesslevel" type="sql:int(10)" unsigned="true" initialvalue="1" initialvaluetype="int" />
<column name="useraccessgroupid" type="sql:int(9)" default="-2" mandatory="false" />
<column name="cssclass" type="sql:varchar(255)" null="true" />
</columns>
<indexes>
<index name="PRIMARY" type="primary">
<column name="tabid" />
</index>
<index name="enabled_position_ordering">
<column name="enabled" />
<column name="position" />
<column name="ordering" />
</index>
<index name="orderreg_enabled_pos_order">
<column name="enabled" />
<column name="ordering_register" />
<column name="position" />
<column name="ordering" />
</index>
</indexes>
</table>
© Joomlapolis.com 2004-2014
Database queries compiler
Handles automatically:
• SQL queries • Mix-ins • Searches • Filters
<filter name="tabid" value="tabid" valuetype="sql:string" type="data">
<data name="tab" type="sql:multiplerows" table="#__comprofiler_tabs" key="id">
<rows>
<field name="tabid" as="value" />
<field name="title" as="text" />
</rows>
<orderby>
<field name="position" ordering="ASC" />
<field name="ordering" ordering="ASC" />
</orderby>
<where>
<column name="fields" operator="=" value="1" type="sql:field" valuetype="const:int" />
</where>
</data>
</filter>
XML Query can be used inTableBrowser:
Example: CB 2.0 Tab Manager, with “Tools”
JDAY-FR-2014 © Joomlapolis.com 2004-2014 32
3/4/2011 © Joomlapolis.com 2004-2014 33
More
XML TableBrowser example: CBSubs™ plans
 Presentation:
– Hierarchieswithsub-plans
– Yes-noradios/clickabletoggles
– Links
– Cssclasses
– Textformatting
– Hiddencolumns
– Permissions
– Dynamicattributes
33
Extending and Inheriting
Two-way inherience: Extend and inherit:
• Explicit (<extend>) • Implicit (<inherit>)
<extend toxpathnode="/cbxml/types" fromxpathnode="/*/types/type" file="xml/models/model.blogs" />
<extend toxpathnode="../following-sibling::*[1]/params/fieldset"
fromxpathnode="/cbxml/views/view[@name=&quot;radiosettings&quot;]/*"
file="xml/admin.lib.processors" mode="prepend">
<inherit name="editgatewayinherit" from="/*/views/view[@name='editgenericgateway']">
Extension example 1: CB Privacy on CB Field
3/4/2011 © Joomlapolis.com 2004-2014 36
More
Extension example 2: CBSubs™ integrations
 CBSubs™ plan edit is automatically extended with available
integrations. By pure XML AHAWOW magic:
36
Extension example 3: CB 2.0 plugins can extend Joomla menus
© Joomlapolis.com 2004-2014 37
Permissions andView Access Levels
Handles:
●
Confguring
●
Enforcing
<actions ui="admin" permission="core.manage" permissionasset="com_comprofiler">
<action name="users" request="task" action="showusers" permission="core.manage"
permissionasset="com_users">
<showview view="showusers" mode="show" />
</action>
</actions>
<tablebrowser name="fieldsbrowser" table="#__comprofiler_fields"
class="CBDatabaseTableFieldsTable" permissionasset="com_comprofiler.fields">
<param name="permissions_fields" type="permissions" assetname="com_comprofiler.fields" label="" display="2lines">
<permission name="core.manage" label="Manage" description="Allows viewing of Fields Management." />
<permission name="core.delete" label="Delete" description="Allows deleting of fields." />
<permission name="core.create" label="Create" description="Allows creating new fields." />
<permission name="core.edit" label="Edit" description="Allows editing existing fields and editing the state of existing fields." />
<permission name="core.edit.state" label="Edit State" description="Allows editing the state of existing fields." />
</param>
Toolbars and online Help
<toolbarmenu>:
<toolbarmenu>
<menu name="apply" action="apply" task="act=apply" label="Save" />
<menu name="save" action="save" task="act=save" label="Save &amp; Close" />
<menu name="cancel" action="linkAction" task="cancel" link="cb_action:fields" label="Cancel" />
<menu name="help" action="help" ref="https://www.joomlapolis.com/help/cb/2/permissions"
label="Help" />
</toolbarmenu>
Example XML toolbars: CB 2.0 Field edit
© Joomlapolis.com 2004-2014 40
Menu buttons
<menugroup>:
<menugroup name="mailersettingsmenu" type="buttonMenu" label="Mailer menu" description="">
<menu name="mailers" action="cb_action:show_mailers" label="Mailers" description="Configure Mailers">
<fields>
<field name="mailers_count" label="active mailers" type="int">
<data name="mailers_count" type="sql:count" table="#__cbsubs_mailer_automessages" key="published" value="1" valuetype="const:int" />
</field>
</fields>
</menu>
<menu name="mailerautomation" action="cb_action:mailer_sendmail" label="Automation Settings" description="Configure Automation for Mailers">
</menu>
<menu name="mailersentmessages" action="cb_action:show_mailersentmessages" label="Sent Messages" description="Show mailer sent
messages">
<fields>
<field name="mailer_used_count" label="messages sent" type="int">
<data name="mailer_used_count" type="sql:count" table="#__cbsubs_mailer_sentmails" key="state" value="A" valuetype="const:string" />
</field>
</fields>
</menu>
<showview name="integrationsglobals" mode="edit" type="plugins" groups="user/plug_cbpaidsubscriptions/plugin,user[cbsubs.]" action=""
path="payintegrationmailersettingsmenu" />
</menugroup>
30.05.14 © Joomlapolis.com 2004-2014 42
Example menus: CBSubs™ Panel
42
DEMO
Bar graphs and graphs
<feld type=”bargraph”> and <plot>:
<field name="graph_paid_amounts" type="bargraph" key="paid_mc_gross_total" width="10%" label="Completed" description="Relative amount to other days displayed."
align="left">
<data name="0" type="const:int" />
</field>
<field name="id" type="plot" rowspan="all" class="cbregAdminTotalGraph" width="50%" label="Graph" description="This graph shows the table content in a graphical way">
<plot name="front_plot">
<series>
<serie label="New">
<data missing="0">
<y name="newregs" type="int" />
<x name="time_paid_date" type="date" />
</data>
<lines show="true" />
<points show="true" />
</serie>
<serie label="Upgrades">
<data missing="0">
<y name="upgrades" type="int" />
<x name="time_paid_date" type="date" />
</data>
<lines show="true" />
<points show="true" />
</serie>
</series>
<format>
<yaxis min="0" tickDecimals="0" />
<xaxis mode="time" timeformat="%d %b %y" />
<grid markings="cbPlotWeekends" />
<legend noColumns="4" position="nw" container="th.cbregAdminTotalGraph" />
</format>
</plot>
</field>
30.05.14 © Joomlapolis.com 2004-2014 44
Example Bargraphs and graphs: CBSubs™ panel
 Shows detailed weekly activities:
●
In numbers, bar-graph and graphs,
●
Transactions, Payments, Registrations, Upgrades, renewals
44
Events generation
<trigger>:
<trigger group="user/plug_cbpaidsubscriptions/plugin"
event="onxmlBeforeCbSubsDisplayOrSaveInvoice" results="extend" toxpathnode="../fieldset"
mode="replaceorappend" keyattribute="name" />
30.05.14 © Joomlapolis.com 2004-2014 46
Community Builder 2.0 uses AHAWOW
●
Community Builder handles site members:
100 % Libre GPL !
●
Registration process,user profles, lists, photos, videos, ...
30.05.14 © Joomlapolis.com 2004-2014 47
CBSubs™ GPL 3.0 uses AHAWOW
47
DEMO
30.05.14 © Joomlapolis.com 2004-2014 48
CB 2.0 Software Architecture
Joomla!
CBLib 2.0 = CB Framework (Joomla library)
CB 2.0 (Joomla component, modules)
CB Plugin 2.0 (Joomla plugin)
30.05.14 © Joomlapolis.com 2004-2014 49
CB 2.0 Software Architecture
Joomla!
CBLibCms
CBLibCBLib
CBLibCB
CB 2.0 (component, modules)
CBLib
Composer
CB Plugin
Libraries
AhaWow
30.05.14 © Joomlapolis.com 2004-2014 50
CBLib 2.0 Software principles
●
CBLib 2.0 has a modern software architecture:
●
Leightweight (“Small is beautifull”, completely modular
●
Uses the new PHP 5.3 functionalities, in particular:
●
Namespacing
●
Interfaces
●
Closures and function variables
●
Uses extensively:
●
Depedency Injection Containers
●
Class Interfaces
●
Inversion of Control
●
Aspect Oriented Programming
●
Entity-Relation-Processor
●
Model-View-Controller
30.05.14 © Joomlapolis.com 2004-2014 51
CBLib 2.0 namespaced packages
●
CBLib 2.0 includes mostly independent packages:
●
AhaWow™ : Specifcation-based execution
●
Dependency Injection (DI) Containers
●
Observers+Mappers
●
Languages (incl. Pluralizations + Multi-keys)
●
Auto-loaders for PHP, XML and languages
●
Permissions and Access handler
●
Database Schema checker and upgrader
●
Database Query Compiler
●
Image Library
●
LESS + Bootstrap 3
●
Legacy Compatibility Layer
30.05.14 © Joomlapolis.com 2004-2014 53
Conclusion
Using a formal approach it is possible to specify software
instead of implementing it.
This has many advantages:
●
Beautiful
●
Functional
●
Consistent
●
Durable
●
Verifable
●
Auditable
And AHA?WOW! ™ is now here after 5 years of research!
Rings a bell ?
30.05.14 © Joomlapolis.com 2004-2014 54
Why Software System Architecture design ?
●
GoodArchitecture brings:
●
Beauty
●
Functionality
●
Consistency
●
Durability
●
Happyness !
●
Lack of architecture results in:
●
The reverse (unless you are very lucky !)
●
Good architects are hard to fnd and hard to keep.
Remember that slide ?
30.05.14 © Joomlapolis – 2004 - 2014 55
Thanks !
CBLibAhaWow and Community Builder 2.0:
An exciting software architecture!

Más contenido relacionado

Similar a JAB14 Honey I shrunk the code

The working architecture of node js applications open tech week javascript ...
The working architecture of node js applications   open tech week javascript ...The working architecture of node js applications   open tech week javascript ...
The working architecture of node js applications open tech week javascript ...Viktor Turskyi
 
An Introduction To Model  View  Controller In XPages
An Introduction To Model  View  Controller In XPagesAn Introduction To Model  View  Controller In XPages
An Introduction To Model  View  Controller In XPagesUlrich Krause
 
An online tool for requirements engineering, modeling and verification of dis...
An online tool for requirements engineering, modeling and verification of dis...An online tool for requirements engineering, modeling and verification of dis...
An online tool for requirements engineering, modeling and verification of dis...Sergey Staroletov
 
Deploying ML models in the enterprise
Deploying ML models in the enterpriseDeploying ML models in the enterprise
Deploying ML models in the enterprisedoppenhe
 
Viktor Turskyi "Effective NodeJS Application Development"
Viktor Turskyi "Effective NodeJS Application Development"Viktor Turskyi "Effective NodeJS Application Development"
Viktor Turskyi "Effective NodeJS Application Development"Fwdays
 
Rapid app building with loopback framework
Rapid app building with loopback frameworkRapid app building with loopback framework
Rapid app building with loopback frameworkThomas Papaspiros
 
Programming for non tech entrepreneurs
Programming for non tech entrepreneursProgramming for non tech entrepreneurs
Programming for non tech entrepreneursRodrigo Gil
 
MWLUG 2015 - An Introduction to MVC
MWLUG 2015 - An Introduction to MVCMWLUG 2015 - An Introduction to MVC
MWLUG 2015 - An Introduction to MVCUlrich Krause
 
Counterclockwise past present future
Counterclockwise  past present futureCounterclockwise  past present future
Counterclockwise past present futurelolopetit
 
It's Not Infernal: Dante's Nine Circles of XPages Heaven
It's Not Infernal: Dante's Nine Circles of XPages HeavenIt's Not Infernal: Dante's Nine Circles of XPages Heaven
It's Not Infernal: Dante's Nine Circles of XPages HeavenTeamstudio
 
"The working architecture of NodeJs applications" Viktor Turskyi
"The working architecture of NodeJs applications" Viktor Turskyi"The working architecture of NodeJs applications" Viktor Turskyi
"The working architecture of NodeJs applications" Viktor TurskyiJulia Cherniak
 
Deccan ruby-conf-talk
Deccan ruby-conf-talkDeccan ruby-conf-talk
Deccan ruby-conf-talkprchaudhari
 
Angular JS - Introduction
Angular JS - IntroductionAngular JS - Introduction
Angular JS - IntroductionSagar Acharya
 
[DevDay2018] Liferay DXP – A powerful Enterprise Solution - By Vy Bui, Develo...
[DevDay2018] Liferay DXP – A powerful Enterprise Solution - By Vy Bui, Develo...[DevDay2018] Liferay DXP – A powerful Enterprise Solution - By Vy Bui, Develo...
[DevDay2018] Liferay DXP – A powerful Enterprise Solution - By Vy Bui, Develo...DevDay.org
 
[JogjaJS] Single Page Application nganggo Angular.js
[JogjaJS] Single Page Application nganggo Angular.js [JogjaJS] Single Page Application nganggo Angular.js
[JogjaJS] Single Page Application nganggo Angular.js Yanuar W
 
The magic ingredient for successful automation - Chapter 2
The magic ingredient for successful automation - Chapter 2The magic ingredient for successful automation - Chapter 2
The magic ingredient for successful automation - Chapter 2Bonitasoft
 
Twelve Tasks Made Easier with IBM Domino XPages
Twelve Tasks Made Easier with IBM Domino XPagesTwelve Tasks Made Easier with IBM Domino XPages
Twelve Tasks Made Easier with IBM Domino XPagesTeamstudio
 

Similar a JAB14 Honey I shrunk the code (20)

The working architecture of node js applications open tech week javascript ...
The working architecture of node js applications   open tech week javascript ...The working architecture of node js applications   open tech week javascript ...
The working architecture of node js applications open tech week javascript ...
 
RealDay: Angular.js
RealDay: Angular.jsRealDay: Angular.js
RealDay: Angular.js
 
An Introduction To Model  View  Controller In XPages
An Introduction To Model  View  Controller In XPagesAn Introduction To Model  View  Controller In XPages
An Introduction To Model  View  Controller In XPages
 
An online tool for requirements engineering, modeling and verification of dis...
An online tool for requirements engineering, modeling and verification of dis...An online tool for requirements engineering, modeling and verification of dis...
An online tool for requirements engineering, modeling and verification of dis...
 
Deploying ML models in the enterprise
Deploying ML models in the enterpriseDeploying ML models in the enterprise
Deploying ML models in the enterprise
 
Viktor Turskyi "Effective NodeJS Application Development"
Viktor Turskyi "Effective NodeJS Application Development"Viktor Turskyi "Effective NodeJS Application Development"
Viktor Turskyi "Effective NodeJS Application Development"
 
Rapid app building with loopback framework
Rapid app building with loopback frameworkRapid app building with loopback framework
Rapid app building with loopback framework
 
Programming for non tech entrepreneurs
Programming for non tech entrepreneursProgramming for non tech entrepreneurs
Programming for non tech entrepreneurs
 
MWLUG 2015 - An Introduction to MVC
MWLUG 2015 - An Introduction to MVCMWLUG 2015 - An Introduction to MVC
MWLUG 2015 - An Introduction to MVC
 
Counterclockwise past present future
Counterclockwise  past present futureCounterclockwise  past present future
Counterclockwise past present future
 
May 2014-webinar
May 2014-webinarMay 2014-webinar
May 2014-webinar
 
It's Not Infernal: Dante's Nine Circles of XPages Heaven
It's Not Infernal: Dante's Nine Circles of XPages HeavenIt's Not Infernal: Dante's Nine Circles of XPages Heaven
It's Not Infernal: Dante's Nine Circles of XPages Heaven
 
"The working architecture of NodeJs applications" Viktor Turskyi
"The working architecture of NodeJs applications" Viktor Turskyi"The working architecture of NodeJs applications" Viktor Turskyi
"The working architecture of NodeJs applications" Viktor Turskyi
 
Deccan ruby-conf-talk
Deccan ruby-conf-talkDeccan ruby-conf-talk
Deccan ruby-conf-talk
 
Angular JS Training Agenda
Angular JS Training AgendaAngular JS Training Agenda
Angular JS Training Agenda
 
Angular JS - Introduction
Angular JS - IntroductionAngular JS - Introduction
Angular JS - Introduction
 
[DevDay2018] Liferay DXP – A powerful Enterprise Solution - By Vy Bui, Develo...
[DevDay2018] Liferay DXP – A powerful Enterprise Solution - By Vy Bui, Develo...[DevDay2018] Liferay DXP – A powerful Enterprise Solution - By Vy Bui, Develo...
[DevDay2018] Liferay DXP – A powerful Enterprise Solution - By Vy Bui, Develo...
 
[JogjaJS] Single Page Application nganggo Angular.js
[JogjaJS] Single Page Application nganggo Angular.js [JogjaJS] Single Page Application nganggo Angular.js
[JogjaJS] Single Page Application nganggo Angular.js
 
The magic ingredient for successful automation - Chapter 2
The magic ingredient for successful automation - Chapter 2The magic ingredient for successful automation - Chapter 2
The magic ingredient for successful automation - Chapter 2
 
Twelve Tasks Made Easier with IBM Domino XPages
Twelve Tasks Made Easier with IBM Domino XPagesTwelve Tasks Made Easier with IBM Domino XPages
Twelve Tasks Made Easier with IBM Domino XPages
 

Más de CB Team @ Joomlapolis

Community Builder 2.0 Preview Webinar
Community Builder 2.0 Preview WebinarCommunity Builder 2.0 Preview Webinar
Community Builder 2.0 Preview WebinarCB Team @ Joomlapolis
 
Juk 2013-getting-started-with-cbsubs
Juk 2013-getting-started-with-cbsubsJuk 2013-getting-started-with-cbsubs
Juk 2013-getting-started-with-cbsubsCB Team @ Joomlapolis
 
Civicon london-2013: Joomla 2 CiviCRM plugin and CB Auto Actions
Civicon london-2013: Joomla 2 CiviCRM plugin and CB Auto ActionsCivicon london-2013: Joomla 2 CiviCRM plugin and CB Auto Actions
Civicon london-2013: Joomla 2 CiviCRM plugin and CB Auto ActionsCB Team @ Joomlapolis
 
Joomla Day Switzerland 2013 Presentation Slides
Joomla Day Switzerland 2013 Presentation SlidesJoomla Day Switzerland 2013 Presentation Slides
Joomla Day Switzerland 2013 Presentation SlidesCB Team @ Joomlapolis
 
Implementation without coding using Community Builder framework tools
Implementation without coding using Community Builder framework tools Implementation without coding using Community Builder framework tools
Implementation without coding using Community Builder framework tools CB Team @ Joomlapolis
 
Community Builder 2.0: Using a new way to build Web-Apps
Community Builder 2.0:Using a new way to build Web-AppsCommunity Builder 2.0:Using a new way to build Web-Apps
Community Builder 2.0: Using a new way to build Web-AppsCB Team @ Joomlapolis
 
CB Workshop with uddeIM, Kunena, GroupJive and CBSubs
CB Workshop with uddeIM, Kunena, GroupJive and CBSubsCB Workshop with uddeIM, Kunena, GroupJive and CBSubs
CB Workshop with uddeIM, Kunena, GroupJive and CBSubsCB Team @ Joomlapolis
 

Más de CB Team @ Joomlapolis (20)

Community Builder 2.0 Preview Webinar
Community Builder 2.0 Preview WebinarCommunity Builder 2.0 Preview Webinar
Community Builder 2.0 Preview Webinar
 
Cb subs gpl-membership-sites
Cb subs gpl-membership-sitesCb subs gpl-membership-sites
Cb subs gpl-membership-sites
 
Juk 2013-getting-started-with-cbsubs
Juk 2013-getting-started-with-cbsubsJuk 2013-getting-started-with-cbsubs
Juk 2013-getting-started-with-cbsubs
 
JUK 2013-implementation-wo-coding
JUK 2013-implementation-wo-codingJUK 2013-implementation-wo-coding
JUK 2013-implementation-wo-coding
 
Civicon london-2013: Joomla 2 CiviCRM plugin and CB Auto Actions
Civicon london-2013: Joomla 2 CiviCRM plugin and CB Auto ActionsCivicon london-2013: Joomla 2 CiviCRM plugin and CB Auto Actions
Civicon london-2013: Joomla 2 CiviCRM plugin and CB Auto Actions
 
Joomla Day Switzerland 2013 Presentation Slides
Joomla Day Switzerland 2013 Presentation SlidesJoomla Day Switzerland 2013 Presentation Slides
Joomla Day Switzerland 2013 Presentation Slides
 
Implementation without coding using Community Builder framework tools
Implementation without coding using Community Builder framework tools Implementation without coding using Community Builder framework tools
Implementation without coding using Community Builder framework tools
 
Joomla daytoulouse2013 talk-slides
Joomla daytoulouse2013 talk-slidesJoomla daytoulouse2013 talk-slides
Joomla daytoulouse2013 talk-slides
 
Jd gr-2012-workshop
Jd gr-2012-workshopJd gr-2012-workshop
Jd gr-2012-workshop
 
Jd greece-2012-joomla-community-abc
Jd greece-2012-joomla-community-abcJd greece-2012-joomla-community-abc
Jd greece-2012-joomla-community-abc
 
Jab 2012-contribute
Jab 2012-contributeJab 2012-contribute
Jab 2012-contribute
 
Community Builder 2.0: Using a new way to build Web-Apps
Community Builder 2.0:Using a new way to build Web-AppsCommunity Builder 2.0:Using a new way to build Web-Apps
Community Builder 2.0: Using a new way to build Web-Apps
 
CB Workshop with uddeIM, Kunena, GroupJive and CBSubs
CB Workshop with uddeIM, Kunena, GroupJive and CBSubsCB Workshop with uddeIM, Kunena, GroupJive and CBSubs
CB Workshop with uddeIM, Kunena, GroupJive and CBSubs
 
Jpb kunena-quickstart
Jpb kunena-quickstartJpb kunena-quickstart
Jpb kunena-quickstart
 
Jpb joomla25-quickstart
Jpb joomla25-quickstartJpb joomla25-quickstart
Jpb joomla25-quickstart
 
Jpb cb admin-nav-quickstart
Jpb cb admin-nav-quickstartJpb cb admin-nav-quickstart
Jpb cb admin-nav-quickstart
 
Jpb group jive-quickstart
Jpb group jive-quickstartJpb group jive-quickstart
Jpb group jive-quickstart
 
Jpb cb-user list-quickstart
Jpb cb-user list-quickstartJpb cb-user list-quickstart
Jpb cb-user list-quickstart
 
Jpb cb-connections-quickstart
Jpb cb-connections-quickstartJpb cb-connections-quickstart
Jpb cb-connections-quickstart
 
Jpb community builder-quickstart
Jpb community builder-quickstartJpb community builder-quickstart
Jpb community builder-quickstart
 

Último

FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 

Último (20)

FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 

JAB14 Honey I shrunk the code

  • 1. Honey, I shrunk the code ! JandBeyond 2014, Königstein, 30 May 2014 2004 - 20142004 - 2014
  • 2. Hi ! :-) 2 Beat  Joomler since 12 years (ok, Mambo dinosaur ;-)  Top-20 Joomla 1.0.15 and 3.2.0 contributor (“App-Store” install from web + JUX team)  Membre Joomla Security JSST and JBS  ‘beat’ on forums, otherwise in Switzerland  PhD Swiss Federal Institute ofTech. & Bell Labs  Datacoms, Internet, Sécurité & web-apps  “Make it as simple as possible, but no less” I love open-source and work with the community
  • 3. 30.05.14 © Joomlapolis.com 2004-2014 3 Today… Why are… ● Open-source… ● Software System Architecture and Design… ● Abstraction, Consistency, DRY… ● Evolution of Software Engineering… ● Methodology and specifcations before implementation… …so important ? ● 2014: Introducing AHA!WOW? ● Features, Examples from CB 2.0 and CBSubs GPL 3.0 ● Conclusions 3
  • 4. 30.05.14 © Joomlapolis.com 2004-2014 4 Why Open-source ? ● Freedom 0. run for any purposes ● Freedom 1. study & change to your wish ● Freedom 2. redistribute to help your neighbor ● Freedom. 3. redistribute modifed copies ● You control your computer. Not the other way around! ● You own and control your own data: Open-data ● The SaaS problem ● Google Reader, Posterous, Google Wave, … ● The free SaaS problem ● next: Google Mail ???
  • 5. 30.05.14 © Joomlapolis.com 2004-2014 5 Why Software System Architecture design ? ● GoodArchitecture brings: ● Beauty ● Functionality ● Consistency ● Durability ● Happyness ! ● Lack of architecture results in: ● The reverse (unless you are very lucky !) ● Good architects are hard to fnd and hard to keep.
  • 6. 30.05.14 © Joomlapolis.com 2004-2014 6 Why Software System Architecture design ? ● In software good architecture translates in: ● Clean vs messy code ● Re-usability of code and libraries vs dedicated purpose ● Consistent genericAPI vs unconsistent dedicatedAPI ● No copy-paste (DRY) vs copy-pasted redundant code ● Aspect-oriented code vs mixed-aspects code ● Independant parts vsTightly-coupled inter-dependant parts
  • 7. 30.05.14 © Joomlapolis.com 2004-2014 7 Why Software System Architecture design ? ● Easy ? ● Yes, in theory! ● In practice, no! : ● History ● Can't rewrite all all the time ● Need for backwards-compatibility ● Lack of time ● Large changes and refactorings needed ● To complicated to review (thus to be committed) ● But doable! ● Example: Observers and Mapper Pattern I introduced for Tags ● Used without changes for Content History !
  • 8. 30.05.14 © Joomlapolis.com 2004-2014 8 Why Abstraction, Consistency, DRY ? ● Abstraction is boring ● Requires understanding benefts of modelisation ● But allows reuse in diferent, unexpected situations ● Consistency is not easy ● Requires understanding of the existing and examples ● But is a big win for the user experience and new features ● DRY is more work at the frst copy ● Hard to understand for graduates of the “Copy-Paste University” ● But brings maintenability and code-reduction ● Less code, Simpler code, Easier to maintain.
  • 9. 30.05.14 © Joomlapolis.com 2004-2014 9 Evolution of Software Engineering ● Pionneering eras ● Permanent Software crisis since the seventies: ● Budgets, schedule, productivity, quality, security ● Reaching limits of current paradigms and architectures ● Reaching limits of current software methodology ● 80's and 90's: No silver bullet ● 80's: Software maintenance = 2x development cost ● 90's: Costs raised +30% ● 95 survey: 50% of operational software not considered as successful ● Average software project overshoots by 50% ● 75% of large software are unused or do not meet specs.
  • 10. 30.05.14 © Joomlapolis.com 2004-2014 10 Evolution of Software Engineering ● Houston, we still have a problem: A 10+ Million $ software project has 100% chances to: ● Run late ● Be over budget ● Be unproductive ● Unusable ● Have quality issues ● Have security (sometimes lethal) issues IF it even succeeds one day !
  • 11. 30.05.14 © Joomlapolis.com 2004-2014 11 Evolution of Software Engineering ● Many trials to circumvent the crisis: ● Methods: ● Structured ● Object-oriented ● Unit-tests ● Output-tests ● Tools (IDE, lint, testing) ● Discipline and professionalism ● Formal methods ● Processes ● No Silver Bullet yet found! ● And there is no single solution to the crisis.
  • 12. 30.05.14 © Joomlapolis.com 2004-2014 12 Evolution of Software Engineering ● Current trends: ● Aspects (Aspect Oriented Programming) ● Entity – Relation - Processor ● Hierarchical Model – View - Controller ● Model-driven design ● Model transformation ● Code generation ● Dependency Injection Containers ● Agile ● Extreme Programming ● Lightweight coding ● Formal methods ● Code-generators
  • 13. 30.05.14 © Joomlapolis.com 2004-2014 13 Evolution of Software Engineering ● Next trends: (my own forecast) ● Formal Description Languages ● Specifcations-driven interpreters and code-generators ● Automated Dependency Injection Containers ● Lightweight coding ● Domain-specifc Languages ● And in Web User Experience: ● More natural interactions ● Simpler Uis, but more powerful ● Workfow-oriented Uis ● Mobile frst
  • 14. 30.05.14 © Joomlapolis.com 2004-2014 14 Why Methodology and specs before implementation ? ● Well… ● It's like building a house without drawings ! ● Will it hold tight ? ● Will workers be happy to frst build then go through a design review process ? ● Will it: ● Look beautiful ? ● Be functional ? ● Be consistent ? ● Durable ? ● Will its users be happy ? ● With careful planning and specs:Yes !
  • 15. 30.05.14 © Joomlapolis.com 2004-2014 15 Enough with problems!… But is there a solution ? ● Remember: There is no silver bullet… ● But we can do much, much, much, much better ! ● How ? ● Easy: 1. Specify functionality 2. Review specifcation 3. Design software 4. Review design to respect specs 3. Implement according to design 4. Verify that implementation respects design ● Is that easy ? ● Does it guarantee that implementation respects specs ?
  • 17. 30.05.14 © Joomlapolis – 2004 - 2014 17 AHAWOW
  • 18. More Community Builder 2.0  5Years of research at Joomlapolis Labs! 18© Joomlapolis.com 2004-2014 Related !
  • 19. 2012-05-20 19© Joomlapolis.com 2004-2014 NO Implementation! No <?PHP ?> code! No <script /> code! No SQL queries! Look Ma !
  • 20. INTRODUCING… AHA? © Joomlapolis.com 2004-2014 20 Automatc Homogenous Applicatons Web Optmized Workfows? ! WOW!™
  • 21. AHA? …Compare… WOW! Classical (H)MVC:  Model+View+Controller implementation  + Helpers  and Javascript helpers  Nothierarchical  Not agonistic (PHP)  “COPY-PASTE” code  Lot of layouting  Notformal AHA?WOW!™ MVC:  Specifcation only  Hierarchical – MVC  Agonistic (portable)  DRY, no specifc code (or very little)  Formal © Joomlapolis.com 2004-2014 21
  • 22. AHA?WOA! So……? …The 2’ Example: Currency rates browser © Joomlapolis.com 2004-2014 22
  • 23. More ❶ Model: <table name="#__currencies" class="Currency"> <columns> <column name="id" type="sql:int(11)" label="Currency Id" /> <column name="base_currency" type="sql:varchar(3)" label="Base currency" /> <column name="currency" type="sql:varchar(3)" label="Target currency" /> <column name="rate" type="sql:foat" null="true" label="Exchange rate" /> </columns> </table> 23© Joomlapolis.com 2004-2014 This installs / upgrades database !
  • 24. More ❷ Controller: <action name="show_currencies" request="view" requestparams="showcur" > <showview view="showcurrencies" mode="show"> <data name="currencies" table="#__currencies"> </showview> </action> 24© Joomlapolis.com 2004-2014 Controller links Model with View
  • 25. More ❸ View: <view name="showcurrencies" type="params" ui="admin" label="Currencies"> <tablebrowser name="currenciesbrowser" label="Currency exchange rates"> <listfelds> <rows type="standard" height="auto" limit="15" > <feld name="" type="rownumber" width="20px" align="right" label="#" /> <feld name="id" type="primarycheckbox" width="20px" /> <feld name="currency" type="string" width="10%" label="Currency" /> <feld name="base_currency" type="string" width="30%" label="Base currency" /> <feld name="rate" type="foat" width="30%" label="Exchange rate" /> <feld name="id" type="int" width="20%" label="Id" /> </rows> </listfelds> </tablebrowser> </view> 25© Joomlapolis.com 2004-2014 Views defne Items to display & Layout
  • 26. THERESULT  The result: © Joomlapolis.com 2004-2014 26
  • 27. 27© Joomlapolis.com 2004-2014 CBSubs GPL 3.0 uses already AHA?WOW!™ CB 2.0 now too !
  • 28. CBSubs Administration: 0 lines of specifc code 2012-05-20 © Joomlapolis.com 2004-2014 28  6900 lines of specifcations (core CBSubs CB plugin) only – 41 controllers – 50 views – 56 models – 397 “queries” – 650 settings
  • 29. `ONE’ MORE THING…  AHA?WOW DOES MUCH MORE:  includes: – Database-agonistic query-compiler and schema – Formal dataset query specifcations – Inheritence – Permissions &View Access Levels handling  Handles 100% of the Admin interface – Toolbar, Menus – Online Help – All feldTypes – Tables, Graphs, Widgets, …  And is event-driven and event-triggering 2012-05-20 © Joomlapolis.com 2004-2014 29
  • 30. Database scheme description ● Handles: ● Creation ● Checks ● Upgrades ● Downgrades automaticaly <table name="#__comprofiler_tabs" class="" strict="false" drop="never"> <columns> <column name="tabid" type="sql:int(11)" auto_increment="23" /> <column name="title" type="sql:varchar(50)" /> <column name="description" type="sql:text" null="true" /> <column name="ordering" type="sql:int(11)" /> <column name="ordering_register" type="sql:int(11)" default="10" /> <column name="width" type="sql:varchar(10)" default=".5" /> <column name="enabled" type="sql:tinyint(1)" default="1" /> <column name="pluginclass" type="sql:varchar(255)" null="true" /> <column name="pluginid" type="sql:int(11)" null="true" /> <column name="fields" type="sql:tinyint(1)" default="1" /> <column name="params" type="sql:mediumtext" null="true" /> <column name="sys" type="sql:tinyint(4)" /> <column name="displaytype" type="sql:varchar(255)" /> <column name="position" type="sql:varchar(255)" /> <column name="viewaccesslevel" type="sql:int(10)" unsigned="true" initialvalue="1" initialvaluetype="int" /> <column name="useraccessgroupid" type="sql:int(9)" default="-2" mandatory="false" /> <column name="cssclass" type="sql:varchar(255)" null="true" /> </columns> <indexes> <index name="PRIMARY" type="primary"> <column name="tabid" /> </index> <index name="enabled_position_ordering"> <column name="enabled" /> <column name="position" /> <column name="ordering" /> </index> <index name="orderreg_enabled_pos_order"> <column name="enabled" /> <column name="ordering_register" /> <column name="position" /> <column name="ordering" /> </index> </indexes> </table> © Joomlapolis.com 2004-2014
  • 31. Database queries compiler Handles automatically: • SQL queries • Mix-ins • Searches • Filters <filter name="tabid" value="tabid" valuetype="sql:string" type="data"> <data name="tab" type="sql:multiplerows" table="#__comprofiler_tabs" key="id"> <rows> <field name="tabid" as="value" /> <field name="title" as="text" /> </rows> <orderby> <field name="position" ordering="ASC" /> <field name="ordering" ordering="ASC" /> </orderby> <where> <column name="fields" operator="=" value="1" type="sql:field" valuetype="const:int" /> </where> </data> </filter>
  • 32. XML Query can be used inTableBrowser: Example: CB 2.0 Tab Manager, with “Tools” JDAY-FR-2014 © Joomlapolis.com 2004-2014 32
  • 33. 3/4/2011 © Joomlapolis.com 2004-2014 33 More XML TableBrowser example: CBSubs™ plans  Presentation: – Hierarchieswithsub-plans – Yes-noradios/clickabletoggles – Links – Cssclasses – Textformatting – Hiddencolumns – Permissions – Dynamicattributes 33
  • 34. Extending and Inheriting Two-way inherience: Extend and inherit: • Explicit (<extend>) • Implicit (<inherit>) <extend toxpathnode="/cbxml/types" fromxpathnode="/*/types/type" file="xml/models/model.blogs" /> <extend toxpathnode="../following-sibling::*[1]/params/fieldset" fromxpathnode="/cbxml/views/view[@name=&quot;radiosettings&quot;]/*" file="xml/admin.lib.processors" mode="prepend"> <inherit name="editgatewayinherit" from="/*/views/view[@name='editgenericgateway']">
  • 35. Extension example 1: CB Privacy on CB Field
  • 36. 3/4/2011 © Joomlapolis.com 2004-2014 36 More Extension example 2: CBSubs™ integrations  CBSubs™ plan edit is automatically extended with available integrations. By pure XML AHAWOW magic: 36
  • 37. Extension example 3: CB 2.0 plugins can extend Joomla menus © Joomlapolis.com 2004-2014 37
  • 38. Permissions andView Access Levels Handles: ● Confguring ● Enforcing <actions ui="admin" permission="core.manage" permissionasset="com_comprofiler"> <action name="users" request="task" action="showusers" permission="core.manage" permissionasset="com_users"> <showview view="showusers" mode="show" /> </action> </actions> <tablebrowser name="fieldsbrowser" table="#__comprofiler_fields" class="CBDatabaseTableFieldsTable" permissionasset="com_comprofiler.fields"> <param name="permissions_fields" type="permissions" assetname="com_comprofiler.fields" label="" display="2lines"> <permission name="core.manage" label="Manage" description="Allows viewing of Fields Management." /> <permission name="core.delete" label="Delete" description="Allows deleting of fields." /> <permission name="core.create" label="Create" description="Allows creating new fields." /> <permission name="core.edit" label="Edit" description="Allows editing existing fields and editing the state of existing fields." /> <permission name="core.edit.state" label="Edit State" description="Allows editing the state of existing fields." /> </param>
  • 39. Toolbars and online Help <toolbarmenu>: <toolbarmenu> <menu name="apply" action="apply" task="act=apply" label="Save" /> <menu name="save" action="save" task="act=save" label="Save &amp; Close" /> <menu name="cancel" action="linkAction" task="cancel" link="cb_action:fields" label="Cancel" /> <menu name="help" action="help" ref="https://www.joomlapolis.com/help/cb/2/permissions" label="Help" /> </toolbarmenu>
  • 40. Example XML toolbars: CB 2.0 Field edit © Joomlapolis.com 2004-2014 40
  • 41. Menu buttons <menugroup>: <menugroup name="mailersettingsmenu" type="buttonMenu" label="Mailer menu" description=""> <menu name="mailers" action="cb_action:show_mailers" label="Mailers" description="Configure Mailers"> <fields> <field name="mailers_count" label="active mailers" type="int"> <data name="mailers_count" type="sql:count" table="#__cbsubs_mailer_automessages" key="published" value="1" valuetype="const:int" /> </field> </fields> </menu> <menu name="mailerautomation" action="cb_action:mailer_sendmail" label="Automation Settings" description="Configure Automation for Mailers"> </menu> <menu name="mailersentmessages" action="cb_action:show_mailersentmessages" label="Sent Messages" description="Show mailer sent messages"> <fields> <field name="mailer_used_count" label="messages sent" type="int"> <data name="mailer_used_count" type="sql:count" table="#__cbsubs_mailer_sentmails" key="state" value="A" valuetype="const:string" /> </field> </fields> </menu> <showview name="integrationsglobals" mode="edit" type="plugins" groups="user/plug_cbpaidsubscriptions/plugin,user[cbsubs.]" action="" path="payintegrationmailersettingsmenu" /> </menugroup>
  • 42. 30.05.14 © Joomlapolis.com 2004-2014 42 Example menus: CBSubs™ Panel 42 DEMO
  • 43. Bar graphs and graphs <feld type=”bargraph”> and <plot>: <field name="graph_paid_amounts" type="bargraph" key="paid_mc_gross_total" width="10%" label="Completed" description="Relative amount to other days displayed." align="left"> <data name="0" type="const:int" /> </field> <field name="id" type="plot" rowspan="all" class="cbregAdminTotalGraph" width="50%" label="Graph" description="This graph shows the table content in a graphical way"> <plot name="front_plot"> <series> <serie label="New"> <data missing="0"> <y name="newregs" type="int" /> <x name="time_paid_date" type="date" /> </data> <lines show="true" /> <points show="true" /> </serie> <serie label="Upgrades"> <data missing="0"> <y name="upgrades" type="int" /> <x name="time_paid_date" type="date" /> </data> <lines show="true" /> <points show="true" /> </serie> </series> <format> <yaxis min="0" tickDecimals="0" /> <xaxis mode="time" timeformat="%d %b %y" /> <grid markings="cbPlotWeekends" /> <legend noColumns="4" position="nw" container="th.cbregAdminTotalGraph" /> </format> </plot> </field>
  • 44. 30.05.14 © Joomlapolis.com 2004-2014 44 Example Bargraphs and graphs: CBSubs™ panel  Shows detailed weekly activities: ● In numbers, bar-graph and graphs, ● Transactions, Payments, Registrations, Upgrades, renewals 44
  • 45. Events generation <trigger>: <trigger group="user/plug_cbpaidsubscriptions/plugin" event="onxmlBeforeCbSubsDisplayOrSaveInvoice" results="extend" toxpathnode="../fieldset" mode="replaceorappend" keyattribute="name" />
  • 46. 30.05.14 © Joomlapolis.com 2004-2014 46 Community Builder 2.0 uses AHAWOW ● Community Builder handles site members: 100 % Libre GPL ! ● Registration process,user profles, lists, photos, videos, ...
  • 47. 30.05.14 © Joomlapolis.com 2004-2014 47 CBSubs™ GPL 3.0 uses AHAWOW 47 DEMO
  • 48. 30.05.14 © Joomlapolis.com 2004-2014 48 CB 2.0 Software Architecture Joomla! CBLib 2.0 = CB Framework (Joomla library) CB 2.0 (Joomla component, modules) CB Plugin 2.0 (Joomla plugin)
  • 49. 30.05.14 © Joomlapolis.com 2004-2014 49 CB 2.0 Software Architecture Joomla! CBLibCms CBLibCBLib CBLibCB CB 2.0 (component, modules) CBLib Composer CB Plugin Libraries AhaWow
  • 50. 30.05.14 © Joomlapolis.com 2004-2014 50 CBLib 2.0 Software principles ● CBLib 2.0 has a modern software architecture: ● Leightweight (“Small is beautifull”, completely modular ● Uses the new PHP 5.3 functionalities, in particular: ● Namespacing ● Interfaces ● Closures and function variables ● Uses extensively: ● Depedency Injection Containers ● Class Interfaces ● Inversion of Control ● Aspect Oriented Programming ● Entity-Relation-Processor ● Model-View-Controller
  • 51. 30.05.14 © Joomlapolis.com 2004-2014 51 CBLib 2.0 namespaced packages ● CBLib 2.0 includes mostly independent packages: ● AhaWow™ : Specifcation-based execution ● Dependency Injection (DI) Containers ● Observers+Mappers ● Languages (incl. Pluralizations + Multi-keys) ● Auto-loaders for PHP, XML and languages ● Permissions and Access handler ● Database Schema checker and upgrader ● Database Query Compiler ● Image Library ● LESS + Bootstrap 3 ● Legacy Compatibility Layer
  • 52. 30.05.14 © Joomlapolis.com 2004-2014 53 Conclusion Using a formal approach it is possible to specify software instead of implementing it. This has many advantages: ● Beautiful ● Functional ● Consistent ● Durable ● Verifable ● Auditable And AHA?WOW! ™ is now here after 5 years of research! Rings a bell ?
  • 53. 30.05.14 © Joomlapolis.com 2004-2014 54 Why Software System Architecture design ? ● GoodArchitecture brings: ● Beauty ● Functionality ● Consistency ● Durability ● Happyness ! ● Lack of architecture results in: ● The reverse (unless you are very lucky !) ● Good architects are hard to fnd and hard to keep. Remember that slide ?
  • 54. 30.05.14 © Joomlapolis – 2004 - 2014 55 Thanks ! CBLibAhaWow and Community Builder 2.0: An exciting software architecture!