SlideShare a Scribd company logo
1 of 78
Download to read offline
How to build complex
web applications having   fun?
author
         Andrew Mleczko
         Software Integrator
         Ferrara (Italy)
         twitter: amleczko
         amleczko@redturtle.it
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   “Roughly 5000 lines
             of code”
FAST
SMALL    “Roughly 5000 lines
              of code”
FAST
STABLE
SMALL    “Roughly 5000 lines
              of code”
FAST
                “100% statement
STABLE
               coverage via unit and
TESTED           integration tests”
SMALL        “Roughly 5000 lines
                  of code”
FAST
                    “100% statement
STABLE
                   coverage via unit and
TESTED               integration tests”


DOCUMENTED    “Literally nothing
                  in Pyramid
              is undocumented”
The   Bad   story
Th e Cus to mer
★   Large    public sectore
    entity


★   >   1000 employees

★   Needs a complex   intranet

★   Deadline:   2 years
T he T eam
Th e T eam
             ★   Mixed    roles:

                          Software
                          architect

                                           Project
                 Tester                    manager



                              Developer


             ★   No development       philosophy
t ec h no lo g y
★   Temptation to be on the

    technological   edge

★   The   Learning      Curve Effect

    everything is a “prototype”


★   Technical design   debt   is...


           ... more then average
bad deci si ons
             ★   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 sale
1      CRM



2     Sales



3   Warehouse



4   E-commerce



5    Support
paperless sale
1      CRM       ★   Customer’s management
                     (satisfaction, order status,
                     etc.)
2     Sales
                 ★   Reports (machine statistics,
                     etc.)
3   Warehouse
                 ★   Campaigns

4   E-commerce



5    Support
paperless sale
1      CRM       ★   Sales network management


                 ★   Invoicing / accountancy
2     Sales
                 ★   Revenue counter

3   Warehouse    ★   Discount management


4   E-commerce



5    Support
paperless sale
1      CRM       ★   Catalog management


                 ★   Warehouse management
2     Sales
                 ★   Logistic tracking

3   Warehouse



4   E-commerce



5    Support
paperless sale
1      CRM       ★   Online shop (for beverages
                     and accessories)


2     Sales      ★   Machine configurator
                     (interactive wizard)

3   Warehouse    ★   Online payments



4   E-commerce



5    Support
paperless sale
1      CRM       ★   Machine maintenance (filter
                     change)


2     Sales      ★   Emergency services


                 ★   Order / installation process
3   Warehouse



4   E-commerce



5    Support
paperless sale
1      CRM       ★   Machine maintenance (filter
                     change)


2     Sales      ★   Emergency services


                 ★   Order / installation process
3   Warehouse



4   E-commerce



5    Support
paperless sale


    Warehouse     Support



      CRM        E-commerce




      Sales
paperless sale
   Intranet      Extranet

    Warehouse     Support



      CRM        E-commerce




      Sales
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
proj ect backg round
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
Arc hi t e ct u ral dec i si ons
and
why                                   ?
★   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                             ?
★   The Best CMS


★   Enterprise ready


★   1595 addons (and counting...)
    on plone.org/products
why                             ?
★   The Best CMS


★   Enterprise ready


★   1595 addons (and counting...)
    on plone.org/products

     ★   PloneFormGen

     ★   Poi

     ★   Diazo

     ★   LinguaPlone
why                             ?
★   The Best CMS


★   Enterprise ready


★   1595 addons (and counting...)
    on plone.org/products

     ★   PloneFormGen

     ★   Poi

     ★   Diazo

     ★   LinguaPlone
why                             ?
★   The Best CMS


★   Enterprise ready


★   1595 addons (and counting...)
    on plone.org/products

     ★   PloneFormGen

     ★   Poi

     ★   Diazo

     ★   LinguaPlone
why                             ?
★   The Best CMS


★   Enterprise ready


★   1595 addons (and counting...)
    on plone.org/products

     ★   PloneFormGen

     ★   Poi

     ★   Diazo

     ★   LinguaPlone
why                             ?
★   The Best CMS


★   Enterprise ready


★   1595 addons (and counting...)
    on plone.org/products

     ★   PloneFormGen

     ★   Poi

     ★   Diazo

     ★   LinguaPlone
why                             ?
★   The Best CMS


★   Enterprise ready


★   1595 addons (and counting...)
    on plone.org/products

     ★   PloneFormGen

     ★   Poi

     ★   Diazo

     ★   LinguaPlone
why                             ?
★   The Best CMS


★   Enterprise ready


★   1595 addons (and counting...)
    on plone.org/products

     ★   PloneFormGen

     ★   Poi

     ★   Diazo

     ★   LinguaPlone
why                             ?
★   The Best CMS


★   Enterprise ready


★   1595 addons (and counting...)
    on plone.org/products

     ★   PloneFormGen

     ★   Poi

     ★   Diazo

     ★   LinguaPlone
I nt eg r at i o n
SQL A lchemy

         aeterna.models




         PostgreSQL
authentication - authorization
           auth storage
 Request




            pas.plugins.sa




             repoze.who




            PostgreSQL
authentication - authorization
      auth storage        single-sign-on
 ★   users           ★   plone.session

                     ★   repoze.who.plugins.auth_tkt
 ★   groups

 ★   roles
                            mod_auth_tkt



       PostgreSQL
buildout
[intranet-plone]
recipe = plone.recipe.zope2instance
eggs =
    ${intranet-plone:eggs} aeterna.models


[intranet-pyramid]
recipe = zc.recipe.egg
eggs =
    ${intranet-pyramid:eggs} aeterna.models
The big picture




                                                 extranet
                  pas.plugins.
                       sa

                                          ZODB
Apache




         beaker              PostgreSQL




                                                 intranet
                   repoze.
                     who
why not o t h er c o mpet i t o rs?
d j ang o :             no!
★   less   code more magic

★   not so   flexible
    (specification is growing)


★   using   SQLAlchemy
    could be tricky
d r u pal:              no!
★   security problems
    (370 CVE entries)


★   integration is more
    difficult
    (PHP vs. Python)


★   missing features -
    workflow, complex ACL, etc.
o pen erp :                   hmm
★   quite complex: CRM , sales,
    accounting and much more


★   not enough   time
    to fully investigate it
What mat t ers
Proper Tools
Proper R O L ES
What's next?
Pyramid CRUD
★   started from Sergey Volobuev
    Kelpie (repoze.bfg crud prototype)


★   using SQLAlchemy, Formalchemy
    and fa.jquery


★   known as pyramid_formalchemy
Sprint summary
                 ★   what is   accomplished:

                     ★   events hooks

                     ★   view and action customizations

                     ★   i18n support

                     ★   autocomplete widget

                     ★   paster templates

                 ★   plans:

                     ★   fanstatic integration
paster template


>>> $ pip install pyramid_formalchemy
>>> $ paster create -t pyramid_fa myapp




     more details:
     http://blog.redturtle.it/redturtle-blog/pyramid-crud-sprint-summary
Sprint summary
                 ★   sprinters:

                     ★   Gaël Pasgrimaud [gawel]

                     ★   Patrick Gerken [do3cc]

                     ★   Me [amleczko]

                 ★   new version of:

                     ★   pyramid_formalchemy 0.4

                     ★   fa.jquery 0.9.4
Qu est i ons?
Credits
★   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/

More Related Content

What's hot

JavaScript Libraries: The Big Picture
JavaScript Libraries: The Big PictureJavaScript Libraries: The Big Picture
JavaScript Libraries: The Big Picture
Simon Willison
 

What's hot (20)

The Future Of Web Frameworks
The Future Of Web FrameworksThe Future Of Web Frameworks
The Future Of Web Frameworks
 
The Many Ways to Test Your React App
The Many Ways to Test Your React AppThe Many Ways to Test Your React App
The Many Ways to Test Your React App
 
Attacking and Defending Mobile Applications
Attacking and Defending Mobile ApplicationsAttacking and Defending Mobile Applications
Attacking and Defending Mobile Applications
 
MWLUG - Universal Java
MWLUG  -  Universal JavaMWLUG  -  Universal Java
MWLUG - Universal Java
 
Zend con 2016 bdd with behat for beginners
Zend con 2016   bdd with behat for beginnersZend con 2016   bdd with behat for beginners
Zend con 2016 bdd with behat for beginners
 
Your Future HTML: The Evolution of Site Design with Web Components
Your Future HTML: The Evolution of Site Design with Web ComponentsYour Future HTML: The Evolution of Site Design with Web Components
Your Future HTML: The Evolution of Site Design with Web Components
 
Learning from the Best jQuery Plugins
Learning from the Best jQuery PluginsLearning from the Best jQuery Plugins
Learning from the Best jQuery Plugins
 
30 Skills to Master to Become a Senior Software Engineer
30 Skills to Master to Become a Senior Software Engineer30 Skills to Master to Become a Senior Software Engineer
30 Skills to Master to Become a Senior Software Engineer
 
Introduction to Web Development with Ruby on Rails
Introduction to Web Development with Ruby on RailsIntroduction to Web Development with Ruby on Rails
Introduction to Web Development with Ruby on Rails
 
The Continuous PHP Pipeline
The Continuous PHP PipelineThe Continuous PHP Pipeline
The Continuous PHP Pipeline
 
[English version] JavaFX and Web Integration
[English version] JavaFX and Web Integration[English version] JavaFX and Web Integration
[English version] JavaFX and Web Integration
 
Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0
 
Better and Faster: A Journey Toward Clean Code and Enjoyment
Better and Faster: A Journey Toward Clean Code and EnjoymentBetter and Faster: A Journey Toward Clean Code and Enjoyment
Better and Faster: A Journey Toward Clean Code and Enjoyment
 
JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014
 
Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7
 
Hack the Future
Hack the FutureHack the Future
Hack the Future
 
JavaScript Libraries: The Big Picture
JavaScript Libraries: The Big PictureJavaScript Libraries: The Big Picture
JavaScript Libraries: The Big Picture
 
Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)
 
Web components - The Future is Here
Web components - The Future is HereWeb components - The Future is Here
Web components - The Future is Here
 
Agility Requires Safety
Agility Requires SafetyAgility Requires Safety
Agility Requires Safety
 

Similar to EuroPython 2011 - How to build complex web applications having fun?

Gearman: A Job Server made for Scale
Gearman: A Job Server made for ScaleGearman: A Job Server made for Scale
Gearman: A Job Server made for Scale
Mike Willbanks
 
Django: Beyond Basics
Django: Beyond BasicsDjango: Beyond Basics
Django: Beyond Basics
arunvr
 

Similar to EuroPython 2011 - How to build complex web applications having fun? (20)

Alexandr Vronskiy "Evolution of Ecommerce Application"
Alexandr Vronskiy "Evolution of Ecommerce Application"Alexandr Vronskiy "Evolution of Ecommerce Application"
Alexandr Vronskiy "Evolution of Ecommerce Application"
 
Run stuff, Deploy Stuff, Jax London 2017 Edition
Run stuff, Deploy Stuff, Jax London 2017 EditionRun stuff, Deploy Stuff, Jax London 2017 Edition
Run stuff, Deploy Stuff, Jax London 2017 Edition
 
Managing Technical Debt
Managing Technical DebtManaging Technical Debt
Managing Technical Debt
 
Pipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as CodePipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as Code
 
Idi2018 - Serverless does not mean Opsless
Idi2018 - Serverless does not mean OpslessIdi2018 - Serverless does not mean Opsless
Idi2018 - Serverless does not mean Opsless
 
Software Engineering in Startups
Software Engineering in StartupsSoftware Engineering in Startups
Software Engineering in Startups
 
Achieving Technical Excellence in Your Software Teams - from Devternity
Achieving Technical Excellence in Your Software Teams - from Devternity Achieving Technical Excellence in Your Software Teams - from Devternity
Achieving Technical Excellence in Your Software Teams - from Devternity
 
Shift Left Security
Shift Left SecurityShift Left Security
Shift Left Security
 
Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...
Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...
Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...
 
Devops with Python by Yaniv Cohen DevopShift
Devops with Python by Yaniv Cohen DevopShiftDevops with Python by Yaniv Cohen DevopShift
Devops with Python by Yaniv Cohen DevopShift
 
Application Deployment on IBM i
Application Deployment on IBM iApplication Deployment on IBM i
Application Deployment on IBM i
 
TechUG Glasgow talk 22/Feb/17 Configuration Management Best Practices
TechUG Glasgow talk 22/Feb/17 Configuration Management Best PracticesTechUG Glasgow talk 22/Feb/17 Configuration Management Best Practices
TechUG Glasgow talk 22/Feb/17 Configuration Management Best Practices
 
Continuous Delivery of (y)our infrastructure.
Continuous Delivery of (y)our infrastructure.Continuous Delivery of (y)our infrastructure.
Continuous Delivery of (y)our infrastructure.
 
Gearman: A Job Server made for Scale
Gearman: A Job Server made for ScaleGearman: A Job Server made for Scale
Gearman: A Job Server made for Scale
 
Automating MySQL operations with Puppet
Automating MySQL operations with PuppetAutomating MySQL operations with Puppet
Automating MySQL operations with Puppet
 
Django: Beyond Basics
Django: Beyond BasicsDjango: Beyond Basics
Django: Beyond Basics
 
Scrum methodology how to build the Death Star
Scrum methodology   how to build the Death StarScrum methodology   how to build the Death Star
Scrum methodology how to build the Death Star
 
Kku2011
Kku2011Kku2011
Kku2011
 
Continous Delivery of your Infrastructure
Continous Delivery of your InfrastructureContinous Delivery of your Infrastructure
Continous Delivery of your Infrastructure
 
Agile dideliu mastu. NFQ. "Agile pagal HomeToGo, arba receptas technologijų s...
Agile dideliu mastu. NFQ. "Agile pagal HomeToGo, arba receptas technologijų s...Agile dideliu mastu. NFQ. "Agile pagal HomeToGo, arba receptas technologijų s...
Agile dideliu mastu. NFQ. "Agile pagal HomeToGo, arba receptas technologijų s...
 

More from Andrew Mleczko

Lost in o auth? learn velruse and get your life back
Lost in o auth? learn velruse and get your life backLost in o auth? learn velruse and get your life back
Lost in o auth? learn velruse and get your life back
Andrew Mleczko
 
Bootstrap your app in 45 seconds
Bootstrap your app in 45 secondsBootstrap your app in 45 seconds
Bootstrap your app in 45 seconds
Andrew Mleczko
 
PyconUA - How to build ERP application having fun?
PyconUA - How to build ERP application having fun?PyconUA - How to build ERP application having fun?
PyconUA - How to build ERP application having fun?
Andrew Mleczko
 
Needle in an enterprise haystack
Needle in an enterprise haystackNeedle in an enterprise haystack
Needle in an enterprise haystack
Andrew Mleczko
 
Fast content import in Plone
Fast content import in PloneFast content import in Plone
Fast content import in Plone
Andrew Mleczko
 
Plone TuneUp challenges
Plone TuneUp challengesPlone TuneUp challenges
Plone TuneUp challenges
Andrew Mleczko
 

More from Andrew Mleczko (10)

Lost in o auth? learn velruse and get your life back
Lost in o auth? learn velruse and get your life backLost in o auth? learn velruse and get your life back
Lost in o auth? learn velruse and get your life back
 
Celery and the social networks
Celery and the social networksCelery and the social networks
Celery and the social networks
 
PloneConf2012 - Are you in a hole and still digging? Or how to become an agil...
PloneConf2012 - Are you in a hole and still digging? Or how to become an agil...PloneConf2012 - Are you in a hole and still digging? Or how to become an agil...
PloneConf2012 - Are you in a hole and still digging? Or how to become an agil...
 
Project management software of your dreams
Project management software of your dreamsProject management software of your dreams
Project management software of your dreams
 
Bootstrap your app in 45 seconds
Bootstrap your app in 45 secondsBootstrap your app in 45 seconds
Bootstrap your app in 45 seconds
 
PyconUA - How to build ERP application having fun?
PyconUA - How to build ERP application having fun?PyconUA - How to build ERP application having fun?
PyconUA - How to build ERP application having fun?
 
Future is bright, future is Plone
Future is bright, future is PloneFuture is bright, future is Plone
Future is bright, future is Plone
 
Needle in an enterprise haystack
Needle in an enterprise haystackNeedle in an enterprise haystack
Needle in an enterprise haystack
 
Fast content import in Plone
Fast content import in PloneFast content import in Plone
Fast content import in Plone
 
Plone TuneUp challenges
Plone TuneUp challengesPlone TuneUp challenges
Plone TuneUp challenges
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
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...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 

EuroPython 2011 - How to build complex web applications having fun?

  • 1. How to build complex web applications having fun?
  • 2. author Andrew Mleczko Software Integrator Ferrara (Italy) twitter: amleczko amleczko@redturtle.it
  • 3. the team
  • 5. My Reasons to be here ★ Building complex web applications could be fun ★ Architectural decisions are more important than you think ★ Promote and
  • 6. 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
  • 7.
  • 8. available in more than 40 languages ★ the best security track record of any major CMS
  • 10. the growing community
  • 11.
  • 12.
  • 13. SMALL “Roughly 5000 lines of code”
  • 14. SMALL “Roughly 5000 lines of code” FAST
  • 15. SMALL “Roughly 5000 lines of code” FAST STABLE
  • 16. SMALL “Roughly 5000 lines of code” FAST “100% statement STABLE coverage via unit and TESTED integration tests”
  • 17. SMALL “Roughly 5000 lines of code” FAST “100% statement STABLE coverage via unit and TESTED integration tests” DOCUMENTED “Literally nothing in Pyramid is undocumented”
  • 18. The Bad story
  • 19. Th e Cus to mer ★ Large public sectore entity ★ > 1000 employees ★ Needs a complex intranet ★ Deadline: 2 years
  • 20. T he T eam
  • 21. Th e T eam ★ Mixed roles: Software architect Project Tester manager Developer ★ No development philosophy
  • 22. t ec h no lo g y ★ Temptation to be on the technological edge ★ The Learning Curve Effect everything is a “prototype” ★ Technical design debt is... ... more then average
  • 23. bad deci si ons ★ Project manager as Software architect as Tester ★ Technology didn't fit in ★ no fun at all
  • 25. The Customer ★ . ★ Born as a startup ★ Offices in Miami, New York and Los Angeles
  • 26. 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”
  • 27.
  • 28.
  • 30.
  • 31. paperless sale 1 CRM 2 Sales 3 Warehouse 4 E-commerce 5 Support
  • 32. paperless sale 1 CRM ★ Customer’s management (satisfaction, order status, etc.) 2 Sales ★ Reports (machine statistics, etc.) 3 Warehouse ★ Campaigns 4 E-commerce 5 Support
  • 33. paperless sale 1 CRM ★ Sales network management ★ Invoicing / accountancy 2 Sales ★ Revenue counter 3 Warehouse ★ Discount management 4 E-commerce 5 Support
  • 34. paperless sale 1 CRM ★ Catalog management ★ Warehouse management 2 Sales ★ Logistic tracking 3 Warehouse 4 E-commerce 5 Support
  • 35. paperless sale 1 CRM ★ Online shop (for beverages and accessories) 2 Sales ★ Machine configurator (interactive wizard) 3 Warehouse ★ Online payments 4 E-commerce 5 Support
  • 36. paperless sale 1 CRM ★ Machine maintenance (filter change) 2 Sales ★ Emergency services ★ Order / installation process 3 Warehouse 4 E-commerce 5 Support
  • 37. paperless sale 1 CRM ★ Machine maintenance (filter change) 2 Sales ★ Emergency services ★ Order / installation process 3 Warehouse 4 E-commerce 5 Support
  • 38. paperless sale Warehouse Support CRM E-commerce Sales
  • 39. paperless sale Intranet Extranet Warehouse Support CRM E-commerce Sales
  • 42. 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
  • 43. proj ect backg round
  • 44. The DEV TEAM ★ Software architect ★ database design ★ integration layer (data, authentication) ★ Developers ★ Plone team ★ Pyramid team
  • 45. Prototyping - the good way ★ Collecting specification and keeping docs up-to-date ★ Software development having fun
  • 46. Arc hi t e ct u ral dec i si ons
  • 47. and
  • 48. why ? ★ 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
  • 49. why ? ★ Pyramid CRUD ★ Multi-upload widget ★ Metric units widget ★ Autocomplete widget ★ Multi-relation widget ★ ... and more ★ 75% jQuery code
  • 50. why ? ★ The Best CMS ★ Enterprise ready ★ 1595 addons (and counting...) on plone.org/products
  • 51. why ? ★ The Best CMS ★ Enterprise ready ★ 1595 addons (and counting...) on plone.org/products ★ PloneFormGen ★ Poi ★ Diazo ★ LinguaPlone
  • 52. why ? ★ The Best CMS ★ Enterprise ready ★ 1595 addons (and counting...) on plone.org/products ★ PloneFormGen ★ Poi ★ Diazo ★ LinguaPlone
  • 53. why ? ★ The Best CMS ★ Enterprise ready ★ 1595 addons (and counting...) on plone.org/products ★ PloneFormGen ★ Poi ★ Diazo ★ LinguaPlone
  • 54. why ? ★ The Best CMS ★ Enterprise ready ★ 1595 addons (and counting...) on plone.org/products ★ PloneFormGen ★ Poi ★ Diazo ★ LinguaPlone
  • 55. why ? ★ The Best CMS ★ Enterprise ready ★ 1595 addons (and counting...) on plone.org/products ★ PloneFormGen ★ Poi ★ Diazo ★ LinguaPlone
  • 56. why ? ★ The Best CMS ★ Enterprise ready ★ 1595 addons (and counting...) on plone.org/products ★ PloneFormGen ★ Poi ★ Diazo ★ LinguaPlone
  • 57. why ? ★ The Best CMS ★ Enterprise ready ★ 1595 addons (and counting...) on plone.org/products ★ PloneFormGen ★ Poi ★ Diazo ★ LinguaPlone
  • 58. why ? ★ The Best CMS ★ Enterprise ready ★ 1595 addons (and counting...) on plone.org/products ★ PloneFormGen ★ Poi ★ Diazo ★ LinguaPlone
  • 59. I nt eg r at i o n
  • 60. SQL A lchemy aeterna.models PostgreSQL
  • 61. authentication - authorization auth storage Request pas.plugins.sa repoze.who PostgreSQL
  • 62. authentication - authorization auth storage single-sign-on ★ users ★ plone.session ★ repoze.who.plugins.auth_tkt ★ groups ★ roles mod_auth_tkt PostgreSQL
  • 63. buildout [intranet-plone] recipe = plone.recipe.zope2instance eggs = ${intranet-plone:eggs} aeterna.models [intranet-pyramid] recipe = zc.recipe.egg eggs = ${intranet-pyramid:eggs} aeterna.models
  • 64. The big picture extranet pas.plugins. sa ZODB Apache beaker PostgreSQL intranet repoze. who
  • 65. why not o t h er c o mpet i t o rs?
  • 66. d j ang o : no! ★ less code more magic ★ not so flexible (specification is growing) ★ using SQLAlchemy could be tricky
  • 67. d r u pal: no! ★ security problems (370 CVE entries) ★ integration is more difficult (PHP vs. Python) ★ missing features - workflow, complex ACL, etc.
  • 68. o pen erp : hmm ★ quite complex: CRM , sales, accounting and much more ★ not enough time to fully investigate it
  • 69. What mat t ers
  • 71. Proper R O L ES
  • 73. Pyramid CRUD ★ started from Sergey Volobuev Kelpie (repoze.bfg crud prototype) ★ using SQLAlchemy, Formalchemy and fa.jquery ★ known as pyramid_formalchemy
  • 74. Sprint summary ★ what is accomplished: ★ events hooks ★ view and action customizations ★ i18n support ★ autocomplete widget ★ paster templates ★ plans: ★ fanstatic integration
  • 75. paster template >>> $ pip install pyramid_formalchemy >>> $ paster create -t pyramid_fa myapp more details: http://blog.redturtle.it/redturtle-blog/pyramid-crud-sprint-summary
  • 76. Sprint summary ★ sprinters: ★ Gaël Pasgrimaud [gawel] ★ Patrick Gerken [do3cc] ★ Me [amleczko] ★ new version of: ★ pyramid_formalchemy 0.4 ★ fa.jquery 0.9.4
  • 77. Qu est i ons?
  • 78. Credits ★ 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/