How to build complex
web applications having fun?
How to build complex
web applications having fun?
How to build complex
web applications having fun?
Andrew MleczkoSoftware Integrator
Ferrara (Italy)
twitter: amleczko
author
the team
WHY this talk?
My Reasons to be here
★ Building complex web
applications could be fun
★ Architectural decisions are
more important than you
think
★ Promote
and
★ among the top 2% of all open source projects worldwide
★ more than 340 active core developers
★ developed since 2001
★ version 4.1 released 12 days ago
★ available in more than 40 languages
★ the best security track record of any major CMS
powered
the growing community
SMALL “Roughly 5000 lines of code”
SMALL
FAST
“Roughly 5000 lines of code”
SMALL
FAST
STABLE
“Roughly 5000 lines of code”
SMALL
TESTED
FAST
STABLE
“Roughly 5000 lines of code”
“100% statement coverage via unit and
integration tests”
SMALL
DOCUMENTED
TESTED
FAST
STABLE
“Roughly 5000 lines of code”
“100% statement coverage via unit and
integration tests”
“Literally nothingin Pyramid
is undocumented”
The Bad story
The Customer
★ Large public sectore
entity
★ > 1000 employees
★ Needs a complex intranet
★ Deadline: 2 years
The Team
The Team★ Mixed roles:
Tester
Developer
Project manager
Software architect
★ No development philosophy
technology★ Temptation to be on the
technological edge
★ The Learning Curve Effect
everything is a “prototype”
★ Technical design debt is...
... more then average
bad dec i s ions★ Project manager as
Software architect as
Tester
★ Technology didn't
fit in
★ no fun at all
The Good Story
The Customer
★ .
★ Born as a startup
★ Offices in Miami,
New York and Los Angeles
Water today
★ U.S. - the largest consumer market for
bottled water in the world
★ in 2011, the market is forecast to have a
value of $86,421.2 billion
“Bottled water has become the second largest commercial beverage category”
project requirements
paperless saleCRM
Sales
1
2
3
4
5
Warehouse
E-commerce
Support
paperless saleCRM
Sales
1
2
3
4
5
Warehouse
E-commerce
Support
★ Customer’s management (satisfaction, order status, etc.)
★ Reports (machine statistics, etc.)
★ Campaigns
paperless saleCRM
Sales
1
2
3
4
5
Warehouse
E-commerce
Support
★ Sales network management
★ Invoicing / accountancy
★ Revenue counter
★ Discount management
paperless saleCRM
Sales
1
2
3
4
5
Warehouse
E-commerce
Support
★ Catalog management
★ Warehouse management
★ Logistic tracking
★ Online shop (for beverages and accessories)
★ Machine configurator (interactive wizard)
★ Online payments
paperless saleCRM
Sales
1
2
3
4
5
Warehouse
E-commerce
Support
paperless saleCRM
Sales
1
2
3
4
5
Warehouse
E-commerce
Support
★ Machine maintenance (filter change)
★ Emergency services
★ Order / installation process
paperless saleCRM
Sales
1
2
3
4
5
Warehouse
E-commerce
Support
★ Machine maintenance (filter change)
★ Emergency services
★ Order / installation process
Support
CRM
Sales
Warehouse
E-commerce
paperless sale
Support
CRM
Sales
Warehouse
E-commerce
Intranet Extranet
paperless sale
Totally paperless ERP
project gotchas
project gotchas
★ Requirements are not rock solid
(it’s a startup) - project will grow with the customer
★ Customer is in U.S. - planning
regular meetings is essential
★ We need to find proper (new?)
framework
★ Only 5 months to delivery
project background
The DEV TEAM★ Software architect
★ database design
★ integration layer (data,
authentication)
★ Developers
★ Plone team
★ Pyramid team
★ Prototyping - the good way
★ Collecting specification and
keeping docs up-to-date
★ Software development having
fun
Arch i tectural dec i s ions
a n d
★ architecture is not so far away
from Zope
★ it supports SQLAlchemy out
of the box
★ great documentation and
active community
★ add’s some fresh air to your
architecture
why ?
★ Pyramid CRUD
★ Multi-upload widget
★ Metric units widget
★ Autocomplete widget
★ Multi-relation widget
★ ... and more
★ 75% jQuery code
why ?
why ?
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
Integrat ion
PostgreSQL
aeterna.models
SQ LA l chemy
auth storage
au then t i c a t ion - au thor iza t ionR
eque
st
PostgreSQL
repoze.who
pas.plugins.sa
auth storage
au then t i c a t ion - au thor iza t ion
★ users
★ groups
★ roles
PostgreSQL
single-sign-on
★ plone.session
★ repoze.who.plugins.auth_tkt
mod_auth_tkt
bu i l dout
[intranet-plone]
recipe = plone.recipe.zope2instance
eggs =
${intranet-plone:eggs} aeterna.models
[intranet-pyramid]
recipe = zc.recipe.egg
eggs =
${intranet-pyramid:eggs} aeterna.models
intranetextranet
T he b ig p i c ture
PostgreSQL
ZODB
Apa
che
repoze.who
pas.plugins.sa
beaker
why not other compet i tors?
django: no!★ less code more magic
★ not so flexible
(specification is growing)
★ using SQLAlchemy
could be tricky
drupal : no!★ security problems
(370 CVE entries)
★ integration is more
difficult
(PHP vs. Python)
★ missing features -
workflow, complex ACL, etc.
openerp : hmm★ quite complex: CRM, sales,
accounting and much more
★ not enough time
to fully investigate it
What matters
Proper Tools
Proper ROLES
What's next?
Pyramid CRUD
★ started from Sergey Volobuev
Kelpie (repoze.bfg crud prototype)
★ using SQLAlchemy, Formalchemy
and fa.jquery
★ known as pyramid_formalchemy
★ what is accomplished:
★ events hooks
★ view and action customizations
★ i18n support
★ autocomplete widget
★ paster templates
★ plans:
★ fanstatic integration
Sprint summary
>>> $ pip install pyramid_formalchemy
>>> $ paster create -t pyramid_fa myapp
pa s t er t emp la t e
more details:http://blog.redturtle.it/redturtle-blog/pyramid-crud-sprint-summary
★ sprinters:
★ Gaël Pasgrimaud [gawel]
★ Patrick Gerken [do3cc]
★ Me [amleczko]
★ new version of:
★ pyramid_formalchemy 0.4
★ fa.jquery 0.9.4
Sprint summary
Quest ions?
★ http://flickr.com/photos/mleczko
★ http://www.melaiphone.com/
★ http://static.iphoneitalia.com
★ http://www.theapplelounge.com
★ http://www.nonconvenzionale.com
★ http://craziestgadgets.com/
★ http://obsessivelystitching.blogspot.com/
★ http://theclockblog.blogspot.com/
★ http://www.scatoladeigiochi.altervista.org/
★ http://wallpapers.brothersoft.com/
★ www.prisionerodelpixel.com
★ http://jawaexpress.com/
★ http://mikehenneke.mvourtown.com/
★ http://android-apps.com/
Credits
Top Related