SlideShare ist ein Scribd-Unternehmen logo
1 von 55
Downloaden Sie, um offline zu lesen
ISSET INTERNET
PROFESSIONALS
How to approach CI projects which
go beyond the ‘homepage’
Who we are
 Jeroen van der Gulik
    Lead Developer Isset
    jeroen@isset.nl


 Rommert van Til
    Project Manager
    rommert@isset.nl
What we do
 Isset Internet Professionals targets companies with an
 ambition on the internet.
 We provide solutions for problems related to the web
 using internet technology.
 Isset only works with professionals who are up to date on
 current internet problems as well as solutions.
 We are purely functional and technical.
What we are currently doing
 Building custom web applications / websites.
 Building connectors/ middleware applications.
 Optimizing and monitoring SEO performance on a
 technical level (not ga).
 Migrating a large custom build webshop.
 We are currently developing an in house application that
 will be make sense of SEO / SEA.
Why we chose CodeIgniter
Avoiding the DreamWeaver effect.
The DreamWeaver Effect
General pros
 Lightweight
 Fast (!)
 Open Source
 Very good documentation
 Very good User Community
 Simple (KISS)
 MVC
What we think is important
 All we need is routing + database abstraction.
 Easily extendible/ adjustable.
 Simple Caching mechanism.
 Has few ‘conventions’.
 Has many ‘add-ons’.
 Easy to add external classes/ libraries
What we discovered
 Application framework, not a website framework.
 Forces a team to work in the same structure.
 CI is fast so you can write ‘sloppy’ code.
 CI plays nice (mostly) with Zend which is a good thing
 CodeIgniter is relaxed.
What we will talk about
Why not Expression Engine?

                                           Client server 2
Client server 1



                  Middleware application




        Client server N
Topics
 Making what the client needs
 Database Driven Development (DDD).
 How we design our projects
 Project file organization
 Source control management
 Extending Classes (Base Classes)
 DB routing
 Layout/ Templating
 ICF (Isset Content Framework)
 Logging
 Security (CLRF, AR)
 Making sense of SEO / SEM
The Client
Making the Client happy
 Force the client to participate.
 Three tier communication : developer(s), project
 manager, client(s)
 Make a ‘design’ document.
 Make sure both the client and the developer can
 understand the document.
 Use the project manager as mediator.
 Use feature list to determine if all requirements are made.
 Don’t use vague terminology.
 Prevent scope creep.
Database Driven Development
 Think about the data structure first.
 Generate template CRUD based on DB scheme
How we design our projects
 Making a test environment
 New project
 Migration
 Middleware / connector / webservice
Make a test environment
 Make sure that it matches the production environment.
 Replace all e-mail addresses and cell phone numbers
 with traceable test data.
 Don’t use offensive test data for fun, just don’t use it.
New Project
 Prerequisite : no database, no legacy system.
 Database Driven Development.
 Plan meeting(s) to write the design document with the
 client.
 Use agile approach (small iterations so the Client can see
 progress and test).
Migration
 Prerequisite: any project that has a database or legacy
 functionality.
 Should we migrate to CodeIgniter?
 What is the database scheme like? (DDD)
 What is the scope of the legacy functionality?
 How maintainable is the legacy code?
 Are their 3rd party components?
 What is the platform?
 Bottom line: start from scratch or migrate functionality
 over time.
Migration Path
 Make legacy application work next to CodeIgniter.
 Be aware of sessions (authentication).
 Be aware of absolute paths.
 Be aware of User Generated Content.
 Avoid changing existing code; move functionality into
 CodeIgniter.
Middleware / connector / webservice.
 Prerequisite; the application has to communicate with
 other applications.
 Demand (api) documentation up front.
 Log every transaction (request and response).
 Avoid connecting to third party databases directly.
 Clearly outline the responsibilities. (next slide)
Taking care of responsibilities
Project file organization
 Depends on scale and environment
 Learn about symlinks!
 Separate system from site root if possible
 Separate application from site root if possible
 Separate public (or assets)
 Use what works for you
Source control management
 Just do it.
 Git/ SVN/ Mercurial/ Bazar: Use what works for you
 We chose SVN because of general acceptance
 Use sensible commit messages
Extending Classes (base classes)
 Base Controllers will make your life easier
 For details: Jamie Rumbelow
 Use MY_Controller
    Use different base controllers according to the purpose of the
    (sub)application
    Alternatively use modules
MY_Controller
DB Routing / MY_Router
 How to match database records with controllers that do
 not exist.
 If a controller exist, the controller will be executed. Else
 it will do a db lookup.
 Make a table that has the external url eg
 http://mysite.tld/home with an internal controller e.g.
 pagecontroller/page/1
 Make exceptions for things like news, blog items etc. in
 the router file
 For heavy traffic websites, make a pre-system cache
 hook.
Example Lookup Table
Exceptions
Tackling the layout / template issue
 Default template
    Overwrite when needed with variations
 Little template partials like navigation, sidebars etc.
 Every partial can be associated with model(s) and/or
 view(s).
 INCMS uses db records to define the relation between
 pages and partials.
 Complete separation of logic en layout (mvc)
    Making a new layout for a site is easy.
Template sections
Issues with ‘standard’ solutions
 80% was easy (click ‘n go)
 15% was hard (modify base code/ write workarounds or
 custom modules/plugins)
 5% was not doable (restrictions by standard solution)
 Standard solutions that did work were either expensive
 or far too complex for the end user
 We hope that Ellis Labs will provide the ‘ultimate’
 solution with Expression Engine 2.0
ICF (Isset Content Framework)
 NOT a CMS
 Generating editable content sections.
 Using default template most of the time, specific
 templates when necessary.
 Best of both worlds: making basic content pages easy,
 making complex pages doable. (using standard CI
 framework).
 80% of a website is just content.
 20% of a website is custom made. No restrictions!
 Think custom ajaxified ‘shiny’ contact forms clients love
 to torture developers with.
ICF database scheme
Logging
 Especially important when making middleware.
 Helps when playing ‘the blame game’.
 Log incoming, outgoing requests.
 Log email / sms / whatever.
 Logging is cheap but provides valuable debug
 information.
 Logging 404 can help determine routing issues, SEO
 issues, hacking attempts.
 Logging executed queries can help find bottlenecks.
 Logging to a DB makes analyzing data easy.
Example E-Mail Logging
 ‘Build’ the email to send
 Save it to a database
 Pass it to an email queue / cronjob
 Update the record when send
 Log if any errors occur
Example Email Database Scheme
Security
 Sanitize input, escape output.
 Be aware of XSS (CI provides some security).
 Be aware of Cross-Site Request Forgery (CSRF).
 Be aware of (MySQL) typecasting when using Active
 Record.
Example 1 - PyroCMS
Example 2 - SyntaxCMS
<img src=“http://domain.tld/admin/users/delete/1” />
How to prevent CSRF
 Any destructive action should always be taken with a
 POST (update and delete).
 Cross Site POST is easy so gives no security.
 Use a token to verify that the send POST data is coming
 from the website.
 Michael Wales wrote extensively about it:
 http://www.michaelwales.com/codeigniter/protecting-
 against-csrf-exploit
Making sense of SEO / SEM efforts
 Keeping track of the position for a given landing page in
 combination with a search string
 Monitoring Google PageRank
 Measure cause and effect listing milestones in
 conversion / visitor timeline.
 Relate all search strings to conversions.
 Adding search strings to a campaign that are cheaper but
 also make a conversion
 Exclude search strings from a campaign that are
 expensive but never make a conversion.
You can (in a few months)
 Visit sedindex.com (next monday)
 Pre register
 Find more information
 We will get back to you in January 2010
Questions ?

Thanks for listening. We hope you enjoyed it

Weitere ähnliche Inhalte

Was ist angesagt?

Blue mix overview
Blue mix overviewBlue mix overview
Blue mix overviewLeon Henry
 
Ruby on Rails Plugins - Rich Collins
Ruby on Rails Plugins - Rich CollinsRuby on Rails Plugins - Rich Collins
Ruby on Rails Plugins - Rich CollinsRich Collins
 
Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)
Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)
Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)Vivek Chawla
 
A Gentle introduction to Web Development & Django
A Gentle introduction to Web Development & DjangoA Gentle introduction to Web Development & Django
A Gentle introduction to Web Development & DjangoPRASANNAVENK
 
Slipstream Rapid Application Design
Slipstream Rapid Application DesignSlipstream Rapid Application Design
Slipstream Rapid Application Designphptechtalk
 
SharePoint 2010 design and deploy
SharePoint  2010 design and deploySharePoint  2010 design and deploy
SharePoint 2010 design and deployChris Riley ☁
 
Fundamentals of Web for Non-Developers
Fundamentals of Web for Non-DevelopersFundamentals of Web for Non-Developers
Fundamentals of Web for Non-DevelopersLemi Orhan Ergin
 
Advanced PowerShell Automation
Advanced PowerShell AutomationAdvanced PowerShell Automation
Advanced PowerShell Automationkieranjacobsen
 
Introduction to MVC Web Framework with CodeIgniter
Introduction to MVC Web Framework with CodeIgniterIntroduction to MVC Web Framework with CodeIgniter
Introduction to MVC Web Framework with CodeIgniterPongsakorn U-chupala
 
Salesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Multitenant Architecture: How We Do the Magic We DoSalesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Multitenant Architecture: How We Do the Magic We DoSalesforce Developers
 
Unlock the Power of Streaming Data with Kinetica and Confluent Platform
Unlock the Power of Streaming Data with Kinetica and Confluent PlatformUnlock the Power of Streaming Data with Kinetica and Confluent Platform
Unlock the Power of Streaming Data with Kinetica and Confluent Platformconfluent
 
Using Cool New Frameworks in (Mobile) Domino Apps
Using Cool New Frameworks in (Mobile) Domino AppsUsing Cool New Frameworks in (Mobile) Domino Apps
Using Cool New Frameworks in (Mobile) Domino AppsTeamstudio
 

Was ist angesagt? (16)

Blue mix overview
Blue mix overviewBlue mix overview
Blue mix overview
 
3-18-11
3-18-113-18-11
3-18-11
 
Spring Mvc
Spring MvcSpring Mvc
Spring Mvc
 
Ruby on Rails Plugins - Rich Collins
Ruby on Rails Plugins - Rich CollinsRuby on Rails Plugins - Rich Collins
Ruby on Rails Plugins - Rich Collins
 
Interview questions
Interview questionsInterview questions
Interview questions
 
Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)
Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)
Five Enterprise Best Practices That EVERY Salesforce Org Can Use (DF15 Session)
 
A Gentle introduction to Web Development & Django
A Gentle introduction to Web Development & DjangoA Gentle introduction to Web Development & Django
A Gentle introduction to Web Development & Django
 
Slipstream Rapid Application Design
Slipstream Rapid Application DesignSlipstream Rapid Application Design
Slipstream Rapid Application Design
 
Top 10 web application development frameworks 2016
Top 10 web application development frameworks 2016Top 10 web application development frameworks 2016
Top 10 web application development frameworks 2016
 
SharePoint 2010 design and deploy
SharePoint  2010 design and deploySharePoint  2010 design and deploy
SharePoint 2010 design and deploy
 
Fundamentals of Web for Non-Developers
Fundamentals of Web for Non-DevelopersFundamentals of Web for Non-Developers
Fundamentals of Web for Non-Developers
 
Advanced PowerShell Automation
Advanced PowerShell AutomationAdvanced PowerShell Automation
Advanced PowerShell Automation
 
Introduction to MVC Web Framework with CodeIgniter
Introduction to MVC Web Framework with CodeIgniterIntroduction to MVC Web Framework with CodeIgniter
Introduction to MVC Web Framework with CodeIgniter
 
Salesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Multitenant Architecture: How We Do the Magic We DoSalesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Multitenant Architecture: How We Do the Magic We Do
 
Unlock the Power of Streaming Data with Kinetica and Confluent Platform
Unlock the Power of Streaming Data with Kinetica and Confluent PlatformUnlock the Power of Streaming Data with Kinetica and Confluent Platform
Unlock the Power of Streaming Data with Kinetica and Confluent Platform
 
Using Cool New Frameworks in (Mobile) Domino Apps
Using Cool New Frameworks in (Mobile) Domino AppsUsing Cool New Frameworks in (Mobile) Domino Apps
Using Cool New Frameworks in (Mobile) Domino Apps
 

Ähnlich wie How to Approach CI Projects Beyond the Homepage

Azure presentation nnug dec 2010
Azure presentation nnug  dec 2010Azure presentation nnug  dec 2010
Azure presentation nnug dec 2010Ethos Technologies
 
Clean architecture with asp.net core
Clean architecture with asp.net coreClean architecture with asp.net core
Clean architecture with asp.net coreSam Nasr, MCSA, MVP
 
Soprex framework on .net in action
Soprex framework on .net in actionSoprex framework on .net in action
Soprex framework on .net in actionMilan Vukoje
 
Actively looking for an opportunity to work as a challenging Dot Net Developer
Actively looking for an opportunity to work as a challenging Dot Net DeveloperActively looking for an opportunity to work as a challenging Dot Net Developer
Actively looking for an opportunity to work as a challenging Dot Net DeveloperKarthik Reddy
 
Actively looking for an opportunity to work as a challenging Dot Net Developer
Actively looking for an opportunity to work as a challenging Dot Net DeveloperActively looking for an opportunity to work as a challenging Dot Net Developer
Actively looking for an opportunity to work as a challenging Dot Net DeveloperKarthik Reddy
 
The Magic Of Application Lifecycle Management In Vs Public
The Magic Of Application Lifecycle Management In Vs PublicThe Magic Of Application Lifecycle Management In Vs Public
The Magic Of Application Lifecycle Management In Vs PublicDavid Solivan
 
ASAS 2014 - Simon Brown
ASAS 2014 - Simon BrownASAS 2014 - Simon Brown
ASAS 2014 - Simon BrownAvisi B.V.
 
Symfony - A Bird's Eye View
Symfony - A Bird's Eye ViewSymfony - A Bird's Eye View
Symfony - A Bird's Eye Viewcsushil
 
Ci tips and_tricks_linards_liepins
Ci tips and_tricks_linards_liepinsCi tips and_tricks_linards_liepins
Ci tips and_tricks_linards_liepinsLinards Liep
 
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
 
The Evolution of a Scrappy Startup to a Successful Web Service
The Evolution of a Scrappy Startup to a Successful Web ServiceThe Evolution of a Scrappy Startup to a Successful Web Service
The Evolution of a Scrappy Startup to a Successful Web ServicePoornima Vijayashanker
 
Livebase: a database for the web 2.0
Livebase: a database for the web 2.0Livebase: a database for the web 2.0
Livebase: a database for the web 2.0Antonio Leonforte
 
Best practice adoption (and lack there of)
Best practice adoption (and lack there of)Best practice adoption (and lack there of)
Best practice adoption (and lack there of)John Pape
 
Delivering value with cloud computing & model-driven code generation
Delivering value with cloud computing & model-driven code generationDelivering value with cloud computing & model-driven code generation
Delivering value with cloud computing & model-driven code generationCodemotion
 
Oracle UCM Implementation Patterns
Oracle UCM Implementation PatternsOracle UCM Implementation Patterns
Oracle UCM Implementation PatternsBrian Huff
 
Microservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsMicroservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsAraf Karsh Hamid
 

Ähnlich wie How to Approach CI Projects Beyond the Homepage (20)

Azure presentation nnug dec 2010
Azure presentation nnug  dec 2010Azure presentation nnug  dec 2010
Azure presentation nnug dec 2010
 
Clean architecture with asp.net core
Clean architecture with asp.net coreClean architecture with asp.net core
Clean architecture with asp.net core
 
Soprex framework on .net in action
Soprex framework on .net in actionSoprex framework on .net in action
Soprex framework on .net in action
 
Actively looking for an opportunity to work as a challenging Dot Net Developer
Actively looking for an opportunity to work as a challenging Dot Net DeveloperActively looking for an opportunity to work as a challenging Dot Net Developer
Actively looking for an opportunity to work as a challenging Dot Net Developer
 
Actively looking for an opportunity to work as a challenging Dot Net Developer
Actively looking for an opportunity to work as a challenging Dot Net DeveloperActively looking for an opportunity to work as a challenging Dot Net Developer
Actively looking for an opportunity to work as a challenging Dot Net Developer
 
The Magic Of Application Lifecycle Management In Vs Public
The Magic Of Application Lifecycle Management In Vs PublicThe Magic Of Application Lifecycle Management In Vs Public
The Magic Of Application Lifecycle Management In Vs Public
 
ASAS 2014 - Simon Brown
ASAS 2014 - Simon BrownASAS 2014 - Simon Brown
ASAS 2014 - Simon Brown
 
Symfony - A Bird's Eye View
Symfony - A Bird's Eye ViewSymfony - A Bird's Eye View
Symfony - A Bird's Eye View
 
Ci tips and_tricks_linards_liepins
Ci tips and_tricks_linards_liepinsCi tips and_tricks_linards_liepins
Ci tips and_tricks_linards_liepins
 
Introduction To Symfony
Introduction To SymfonyIntroduction To Symfony
Introduction To Symfony
 
North east user group tour
North east user group tourNorth east user group tour
North east user group tour
 
Viktor Turskyi "Effective NodeJS Application Development"
Viktor Turskyi "Effective NodeJS Application Development"Viktor Turskyi "Effective NodeJS Application Development"
Viktor Turskyi "Effective NodeJS Application Development"
 
The Evolution of a Scrappy Startup to a Successful Web Service
The Evolution of a Scrappy Startup to a Successful Web ServiceThe Evolution of a Scrappy Startup to a Successful Web Service
The Evolution of a Scrappy Startup to a Successful Web Service
 
Livebase: a database for the web 2.0
Livebase: a database for the web 2.0Livebase: a database for the web 2.0
Livebase: a database for the web 2.0
 
Best practice adoption (and lack there of)
Best practice adoption (and lack there of)Best practice adoption (and lack there of)
Best practice adoption (and lack there of)
 
Delivering value with cloud computing & model-driven code generation
Delivering value with cloud computing & model-driven code generationDelivering value with cloud computing & model-driven code generation
Delivering value with cloud computing & model-driven code generation
 
Sindhumathi Vellaidurai
Sindhumathi VellaiduraiSindhumathi Vellaidurai
Sindhumathi Vellaidurai
 
CODE IGNITER
CODE IGNITERCODE IGNITER
CODE IGNITER
 
Oracle UCM Implementation Patterns
Oracle UCM Implementation PatternsOracle UCM Implementation Patterns
Oracle UCM Implementation Patterns
 
Microservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsMicroservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native Apps
 

Kürzlich hochgeladen

DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 

Kürzlich hochgeladen (20)

DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 

How to Approach CI Projects Beyond the Homepage

  • 1. ISSET INTERNET PROFESSIONALS How to approach CI projects which go beyond the ‘homepage’
  • 2. Who we are Jeroen van der Gulik Lead Developer Isset jeroen@isset.nl Rommert van Til Project Manager rommert@isset.nl
  • 3. What we do Isset Internet Professionals targets companies with an ambition on the internet. We provide solutions for problems related to the web using internet technology. Isset only works with professionals who are up to date on current internet problems as well as solutions. We are purely functional and technical.
  • 4. What we are currently doing Building custom web applications / websites. Building connectors/ middleware applications. Optimizing and monitoring SEO performance on a technical level (not ga). Migrating a large custom build webshop. We are currently developing an in house application that will be make sense of SEO / SEA.
  • 5. Why we chose CodeIgniter Avoiding the DreamWeaver effect.
  • 7. General pros Lightweight Fast (!) Open Source Very good documentation Very good User Community Simple (KISS) MVC
  • 8. What we think is important All we need is routing + database abstraction. Easily extendible/ adjustable. Simple Caching mechanism. Has few ‘conventions’. Has many ‘add-ons’. Easy to add external classes/ libraries
  • 9. What we discovered Application framework, not a website framework. Forces a team to work in the same structure. CI is fast so you can write ‘sloppy’ code. CI plays nice (mostly) with Zend which is a good thing CodeIgniter is relaxed.
  • 10. What we will talk about
  • 11. Why not Expression Engine? Client server 2 Client server 1 Middleware application Client server N
  • 12. Topics Making what the client needs Database Driven Development (DDD). How we design our projects Project file organization Source control management Extending Classes (Base Classes) DB routing Layout/ Templating ICF (Isset Content Framework) Logging Security (CLRF, AR) Making sense of SEO / SEM
  • 14. Making the Client happy Force the client to participate. Three tier communication : developer(s), project manager, client(s) Make a ‘design’ document. Make sure both the client and the developer can understand the document. Use the project manager as mediator. Use feature list to determine if all requirements are made. Don’t use vague terminology. Prevent scope creep.
  • 15. Database Driven Development Think about the data structure first. Generate template CRUD based on DB scheme
  • 16.
  • 17. How we design our projects Making a test environment New project Migration Middleware / connector / webservice
  • 18. Make a test environment Make sure that it matches the production environment. Replace all e-mail addresses and cell phone numbers with traceable test data. Don’t use offensive test data for fun, just don’t use it.
  • 19. New Project Prerequisite : no database, no legacy system. Database Driven Development. Plan meeting(s) to write the design document with the client. Use agile approach (small iterations so the Client can see progress and test).
  • 20. Migration Prerequisite: any project that has a database or legacy functionality. Should we migrate to CodeIgniter? What is the database scheme like? (DDD) What is the scope of the legacy functionality? How maintainable is the legacy code? Are their 3rd party components? What is the platform? Bottom line: start from scratch or migrate functionality over time.
  • 21. Migration Path Make legacy application work next to CodeIgniter. Be aware of sessions (authentication). Be aware of absolute paths. Be aware of User Generated Content. Avoid changing existing code; move functionality into CodeIgniter.
  • 22. Middleware / connector / webservice. Prerequisite; the application has to communicate with other applications. Demand (api) documentation up front. Log every transaction (request and response). Avoid connecting to third party databases directly. Clearly outline the responsibilities. (next slide)
  • 23. Taking care of responsibilities
  • 24. Project file organization Depends on scale and environment Learn about symlinks! Separate system from site root if possible Separate application from site root if possible Separate public (or assets) Use what works for you
  • 25. Source control management Just do it. Git/ SVN/ Mercurial/ Bazar: Use what works for you We chose SVN because of general acceptance Use sensible commit messages
  • 26. Extending Classes (base classes) Base Controllers will make your life easier For details: Jamie Rumbelow Use MY_Controller Use different base controllers according to the purpose of the (sub)application Alternatively use modules
  • 28.
  • 29.
  • 30. DB Routing / MY_Router How to match database records with controllers that do not exist. If a controller exist, the controller will be executed. Else it will do a db lookup. Make a table that has the external url eg http://mysite.tld/home with an internal controller e.g. pagecontroller/page/1 Make exceptions for things like news, blog items etc. in the router file For heavy traffic websites, make a pre-system cache hook.
  • 31.
  • 33.
  • 35. Tackling the layout / template issue Default template Overwrite when needed with variations Little template partials like navigation, sidebars etc. Every partial can be associated with model(s) and/or view(s). INCMS uses db records to define the relation between pages and partials. Complete separation of logic en layout (mvc) Making a new layout for a site is easy.
  • 37. Issues with ‘standard’ solutions 80% was easy (click ‘n go) 15% was hard (modify base code/ write workarounds or custom modules/plugins) 5% was not doable (restrictions by standard solution) Standard solutions that did work were either expensive or far too complex for the end user We hope that Ellis Labs will provide the ‘ultimate’ solution with Expression Engine 2.0
  • 38. ICF (Isset Content Framework) NOT a CMS Generating editable content sections. Using default template most of the time, specific templates when necessary. Best of both worlds: making basic content pages easy, making complex pages doable. (using standard CI framework). 80% of a website is just content. 20% of a website is custom made. No restrictions! Think custom ajaxified ‘shiny’ contact forms clients love to torture developers with.
  • 40. Logging Especially important when making middleware. Helps when playing ‘the blame game’. Log incoming, outgoing requests. Log email / sms / whatever. Logging is cheap but provides valuable debug information. Logging 404 can help determine routing issues, SEO issues, hacking attempts. Logging executed queries can help find bottlenecks. Logging to a DB makes analyzing data easy.
  • 41. Example E-Mail Logging ‘Build’ the email to send Save it to a database Pass it to an email queue / cronjob Update the record when send Log if any errors occur
  • 43.
  • 44. Security Sanitize input, escape output. Be aware of XSS (CI provides some security). Be aware of Cross-Site Request Forgery (CSRF). Be aware of (MySQL) typecasting when using Active Record.
  • 45. Example 1 - PyroCMS
  • 46. Example 2 - SyntaxCMS
  • 48. How to prevent CSRF Any destructive action should always be taken with a POST (update and delete). Cross Site POST is easy so gives no security. Use a token to verify that the send POST data is coming from the website. Michael Wales wrote extensively about it: http://www.michaelwales.com/codeigniter/protecting- against-csrf-exploit
  • 49.
  • 50.
  • 51.
  • 52.
  • 53. Making sense of SEO / SEM efforts Keeping track of the position for a given landing page in combination with a search string Monitoring Google PageRank Measure cause and effect listing milestones in conversion / visitor timeline. Relate all search strings to conversions. Adding search strings to a campaign that are cheaper but also make a conversion Exclude search strings from a campaign that are expensive but never make a conversion.
  • 54. You can (in a few months) Visit sedindex.com (next monday) Pre register Find more information We will get back to you in January 2010
  • 55. Questions ? Thanks for listening. We hope you enjoyed it