The document provides an overview of Zappos' use of Drupal over time, starting with their first Drupal project in 2008 and continuing to their current use. It discusses their migration from Clearspace to Drupal, the creation of advanced landing pages (ALPs) in Drupal, the development of the Baffin platform to support ALPs, and how Drupal is currently used across various teams at Zappos.
Your visitors interact with content, not with your website. Content consistency is crucial to a successful user experience. Re-publishing is one option but it’s an inside-out action that relies on the authority controlling where the information goes. An API frees your data and the responsibility to where it is published and accessed. Mobile is a major consumer for your API but not every API is setup to handle the mass of requests coming from those devices. Learn how to mobile devices consume API’s with limited or low bandwidth and how to to tailor your API to be as efficient and effective as possible.
http://environmentsforhumans.com/2012/doteduguru-summit/
Scaling Microsites for the Enterprise with Drupal GardensAcquia
Organizations no longer manage one or two websites. Every department has multiple sites - to collaborate with customers and partners, to launch products and marketing campaigns quickly, to deliver customer support and communicate with multiple audiences. However, this proliferation of microsites raises challenges. Drupal Gardens offers a scalable Drupal-as-a-Service platform tailored to the needs of enterprise customers who need to deploy and manage their library of microsites while complimenting their primary web properties.
Using Cool New Frameworks in (Mobile) Domino AppsTeamstudio
Did you know there's an abundance of cool CSS and JS frameworks out there? Have you ever wanted to find out how you can use them in your own (mobile) Domino apps? Theo Heselmans shows real world applications from his customers using some of these powerful frameworks inside Domino. Explore with us on how they integrated Bootstrap, Ratchet.js, Knockout.js, Backbone.js, Underscore.js, jQuery.js and more!
Building Responsive Applications Using XPagesTeamstudio
Let Connect come to you! In this webinar, Brian Gleeson and Martin Donnelly from the IBM Development Team present their Connect 2016 session.
Bootstrap was integrated into the XPages Extension Library in 2014 and has continued to rapidly evolve ever since. This responsive design capability empowers you to build the slickest Domino Web applications ever - where the user experience dynamically adapts for the desktop, tablet, or smaller mobile devices. Brian and Martin will show you how to quickly and easily transform your old applications into something that will impress your end users (and your boss)!
Your visitors interact with content, not with your website. Content consistency is crucial to a successful user experience. Re-publishing is one option but it’s an inside-out action that relies on the authority controlling where the information goes. An API frees your data and the responsibility to where it is published and accessed. Mobile is a major consumer for your API but not every API is setup to handle the mass of requests coming from those devices. Learn how to mobile devices consume API’s with limited or low bandwidth and how to to tailor your API to be as efficient and effective as possible.
http://environmentsforhumans.com/2012/doteduguru-summit/
Scaling Microsites for the Enterprise with Drupal GardensAcquia
Organizations no longer manage one or two websites. Every department has multiple sites - to collaborate with customers and partners, to launch products and marketing campaigns quickly, to deliver customer support and communicate with multiple audiences. However, this proliferation of microsites raises challenges. Drupal Gardens offers a scalable Drupal-as-a-Service platform tailored to the needs of enterprise customers who need to deploy and manage their library of microsites while complimenting their primary web properties.
Using Cool New Frameworks in (Mobile) Domino AppsTeamstudio
Did you know there's an abundance of cool CSS and JS frameworks out there? Have you ever wanted to find out how you can use them in your own (mobile) Domino apps? Theo Heselmans shows real world applications from his customers using some of these powerful frameworks inside Domino. Explore with us on how they integrated Bootstrap, Ratchet.js, Knockout.js, Backbone.js, Underscore.js, jQuery.js and more!
Building Responsive Applications Using XPagesTeamstudio
Let Connect come to you! In this webinar, Brian Gleeson and Martin Donnelly from the IBM Development Team present their Connect 2016 session.
Bootstrap was integrated into the XPages Extension Library in 2014 and has continued to rapidly evolve ever since. This responsive design capability empowers you to build the slickest Domino Web applications ever - where the user experience dynamically adapts for the desktop, tablet, or smaller mobile devices. Brian and Martin will show you how to quickly and easily transform your old applications into something that will impress your end users (and your boss)!
Keep Your Code Organized! WordCamp Montreal 2013 Presentation slidesJer Clarke
These are the slides from my talk at WordCamp Montreal 2013.
Talk description:
==Keep your code organized! Templates, functions.php and custom plugins==
If you've written PHP for a theme you should know by now that you need to keep anything complicated outside the templates. Functions.php can be a good place for this but there are many pitfalls and considerations you should keep in mind before (over)using it. This talk will examine your choices for organizing the code that makes up a WP site, ensuring you have plugin code in plugins and theme code in themes (it's not hard!).
Learn how to build your own PWA enabled page in under 5 minutes ⚡️, what SPAs' have to do with PWA and how Shopware implements their headless commerce solution!
"Flexible web publishing with Expression Engine". Delivered by Johannes Booy, Jeff Ausura, and Michael Witwicki of Booyant, on April 14th, 2010 at Lamont Library, Forum Room.
Engage - Expanding XPages with Bootstrap Plugins for ultimate usabilityJohnny Oldenburger
Develop highly user friendly responsive web (XPages) applications by making use of Bootstrap and JQuery Plugins as Select2, DateTimePickers, Multiselect, Confirmation, Modals, Popovers and Notifications for ultimate usability based on the latest versions of these plugins, including solutions for the AMD problem. Expect more of XPages Applications and go beyond the basics and create applications that nobody ever thought possible using XPages. Comprehensive demos of several plugins are shown within an XPages application.
Janne Kalliola from Exove compares Drupal to other PHP based open source content management systems, such as WordPress, Joomla, eZ Publish, and Concrete5.
Mobile applications Development - Lecture 8
Anatomy of an HTML 5 mobile web app
PhoneGap
This presentation has been developed in the context of the Mobile Applications Development course at the Computer Science Department of the University of L’Aquila (Italy).
http://www.di.univaq.it/malavolta
A panel of XPages experts - Mike McGarel, David Leedy, and Nathan Freeman - each give a short presentation, then answer XPages questions from attendees. For the recording, please visit: https://youtu.be/jBaRSM9Ng_o
Getting Started with the OpenNTF Domino APITeamstudio
Do you use Java in your XPages applications? Want to have a better way to access Domino data? Over the last year, more and more developers have started using the OpenNTF Domino Java API. In this webinar, Paul Withers and Jesse Gallagher, part of the team of developers working on this open source software project, explain why you should be using the Domino API. Get a jumpstart into the Domino API and improve your XPages development experience!
Optimus XPages: An Explosion of Techniques and Best PracticesTeamstudio
Are you starting a new XPages project, but not sure it’s going to be done right the first time? Do you have an existing application that doesn’t seem to have that “X” Factor? In this webinar, John Jardin demonstrates how XPages developers can apply proven techniques and best practices to take their applications to a game-changing level.
You'll learn how to:
-Rapidly develop responsive applications,
-Improve user experience and response times with background and multi-threaded operations,
-Keep your XPages lightweight with code injection,
-Create scheduled tasks the XPages way,
-And much more.
In this webinar, John Jardin continues his series, "Optimus XPages: An Explosion of Techniques and Best Practices,” by providing an end-to-end, deep dive demonstration on how to apply the methods described in the initial webinar presented in March 2016. This follow-up webinar favours the techies; see a fast-paced demo showing off live design and coding where everything is explained on the fly.
John starts with a brand new XPages design and ends with a Cloud-ready, single page application. "Not enough," you say? Fear not. John ends the webinar with some Easter egg giveaways that you don’t want to miss!
Online communities are powerful but often out of reach to the poor and geographically isolated for technical and literacy reasons. Mobile phones can address both of these gaps. Stanford Engineering Professor Scott Klemmer and colleagues have pioneered voice-based social media tools to help rural communities connect online.
Keep Your Code Organized! WordCamp Montreal 2013 Presentation slidesJer Clarke
These are the slides from my talk at WordCamp Montreal 2013.
Talk description:
==Keep your code organized! Templates, functions.php and custom plugins==
If you've written PHP for a theme you should know by now that you need to keep anything complicated outside the templates. Functions.php can be a good place for this but there are many pitfalls and considerations you should keep in mind before (over)using it. This talk will examine your choices for organizing the code that makes up a WP site, ensuring you have plugin code in plugins and theme code in themes (it's not hard!).
Learn how to build your own PWA enabled page in under 5 minutes ⚡️, what SPAs' have to do with PWA and how Shopware implements their headless commerce solution!
"Flexible web publishing with Expression Engine". Delivered by Johannes Booy, Jeff Ausura, and Michael Witwicki of Booyant, on April 14th, 2010 at Lamont Library, Forum Room.
Engage - Expanding XPages with Bootstrap Plugins for ultimate usabilityJohnny Oldenburger
Develop highly user friendly responsive web (XPages) applications by making use of Bootstrap and JQuery Plugins as Select2, DateTimePickers, Multiselect, Confirmation, Modals, Popovers and Notifications for ultimate usability based on the latest versions of these plugins, including solutions for the AMD problem. Expect more of XPages Applications and go beyond the basics and create applications that nobody ever thought possible using XPages. Comprehensive demos of several plugins are shown within an XPages application.
Janne Kalliola from Exove compares Drupal to other PHP based open source content management systems, such as WordPress, Joomla, eZ Publish, and Concrete5.
Mobile applications Development - Lecture 8
Anatomy of an HTML 5 mobile web app
PhoneGap
This presentation has been developed in the context of the Mobile Applications Development course at the Computer Science Department of the University of L’Aquila (Italy).
http://www.di.univaq.it/malavolta
A panel of XPages experts - Mike McGarel, David Leedy, and Nathan Freeman - each give a short presentation, then answer XPages questions from attendees. For the recording, please visit: https://youtu.be/jBaRSM9Ng_o
Getting Started with the OpenNTF Domino APITeamstudio
Do you use Java in your XPages applications? Want to have a better way to access Domino data? Over the last year, more and more developers have started using the OpenNTF Domino Java API. In this webinar, Paul Withers and Jesse Gallagher, part of the team of developers working on this open source software project, explain why you should be using the Domino API. Get a jumpstart into the Domino API and improve your XPages development experience!
Optimus XPages: An Explosion of Techniques and Best PracticesTeamstudio
Are you starting a new XPages project, but not sure it’s going to be done right the first time? Do you have an existing application that doesn’t seem to have that “X” Factor? In this webinar, John Jardin demonstrates how XPages developers can apply proven techniques and best practices to take their applications to a game-changing level.
You'll learn how to:
-Rapidly develop responsive applications,
-Improve user experience and response times with background and multi-threaded operations,
-Keep your XPages lightweight with code injection,
-Create scheduled tasks the XPages way,
-And much more.
In this webinar, John Jardin continues his series, "Optimus XPages: An Explosion of Techniques and Best Practices,” by providing an end-to-end, deep dive demonstration on how to apply the methods described in the initial webinar presented in March 2016. This follow-up webinar favours the techies; see a fast-paced demo showing off live design and coding where everything is explained on the fly.
John starts with a brand new XPages design and ends with a Cloud-ready, single page application. "Not enough," you say? Fear not. John ends the webinar with some Easter egg giveaways that you don’t want to miss!
Online communities are powerful but often out of reach to the poor and geographically isolated for technical and literacy reasons. Mobile phones can address both of these gaps. Stanford Engineering Professor Scott Klemmer and colleagues have pioneered voice-based social media tools to help rural communities connect online.
Esta presentación es la versión simplificada de la que se utilizó en las primeras Jornadas Symfony. Puedes ver la grabación en vídeo de la presentación original en http://bit.ly/symfony2
- - - - - - -
This is the simplified version of the presentation used at the first Spanish Symfony Conference. You can watch the video recording of the original presentation at http://bit.ly/symfony2
Site Manager rocks! This presentation goes up to 11.
Presentation I gave at the T44U conference in Dublin (12-13 November 2009).about our tops tips for using the Site Manager Web content management system (http://www.terminalfour.com/)
Released under a Creative Commons Attribution-Share Alike 2.5 UK: Scotland Licence.
http://creativecommons.org/licenses/by-sa/2.5/scotland/
Upgrading your site from Drupal 6 to Drupal 7Andrew Martha
Wednesday, March 16, 2011, I gave a presentation at Duo Consulting in the Google Dearborn Plaza in Chicago, IL on upgrading your website from Drupal 6 to Drupal 7 for the Chicago Drupal Meetup Group. I hope you find it helpful, contact me if you have any questions or if you would like to hire me. Thanks!
Transform your Intranet with Drupal and Alfresco - by OptarosAlfresco Software
View the full webinar recording here: http://www.alfresco.com/about/events/ondemand
Learn how combining Drupal and Alfresco can give you a powerful platform with everything you need to revitalize your intranet with engaging community features, and rock-solid document management.
Optaros content management experts Chris Fuller and Jeff Potts will discuss how a game publisher was able to save time and money by leveraging open source for their intranet.
You’ll learn valuable insights that will help you take your Enterprise collaboration to the next level.
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013Mack Hardy
Mack Hardy, Dave Tarc, Damien Norris of Affinity Bridge presenting at Pacific Northwest Drupal Summit in Vancouver, October 5th, 2013. The presentation walks through management of releases, deployment strategies and build strategies with drupal features, git, and make files. Performance and caching is also covered, as well as specific tips and tricks for configuring apache and managing private files.
SUMMARY :
We all have the contradictory feeling to deliver not-so-bad projects, with no-so-bad performances.
But what really is an perfectly optimized project ?
For you : optimized PHP code & SQL queries
For your boss : the customer who never complains
For the customer : own experience on his workstation
For the business : who really know and care ?
For end-user : who can really know the end-user experience (could be millions of users) ?
Without losing interest on technical aspects (PHP, MySql, Solr, Varnish, CDN, etc.) & softwares (new relic, jmeter, etc.), this presentation will send a feedback from real projects to :
How to integrate performances within the project scope ?
What & how to measure & collect smart metrics ?
Enlarge the scope : from your dev workstation to the end-user… in china !
Experience level: Intermediate
Session Track: Performance
This is a slide to introduce something about Spree, which is an open source e-commerce framework for Ruby on Rails. Through it, I'll show something Spree allows we to do with it, such as, customize the views, models or controllers.
Extending SAP SuccessFactors in the Cloud and how not to do itChris Paine
Extending SAP SuccessFactors using SAP Cloud Platform is an excellent idea, but there are many pitfalls. This presentation explains what not to do when creating your own extension project and why sometimes you might not even want to go there.
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...Neo4j
Leonard Jayamohan, Partner & Generative AI Lead, Deloitte
This keynote will reveal how Deloitte leverages Neo4j’s graph power for groundbreaking digital twin solutions, achieving a staggering 100x performance boost. Discover the essential role knowledge graphs play in successful generative AI implementations. Plus, get an exclusive look at an innovative Neo4j + Generative AI solution Deloitte is developing in-house.
Unlocking Productivity: Leveraging the Potential of Copilot in Microsoft 365, a presentation by Christoforos Vlachos, Senior Solutions Manager – Modern Workplace, Uni Systems
Communications Mining Series - Zero to Hero - Session 1DianaGray10
This session provides introduction to UiPath Communication Mining, importance and platform overview. You will acquire a good understand of the phases in Communication Mining as we go over the platform with you. Topics covered:
• Communication Mining Overview
• Why is it important?
• How can it help today’s business and the benefits
• Phases in Communication Mining
• Demo on Platform overview
• Q/A
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Monitoring and observability aren’t traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current company’s observability stack.
While the dev and ops silo continues to crumble….many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionAggregage
Join Maher Hanafi, VP of Engineering at Betterworks, in this new session where he'll share a practical framework to transform Gen AI prototypes into impactful products! He'll delve into the complexities of data collection and management, model selection and optimization, and ensuring security, scalability, and responsible use.
Maruthi Prithivirajan, Head of ASEAN & IN Solution Architecture, Neo4j
Get an inside look at the latest Neo4j innovations that enable relationship-driven intelligence at scale. Learn more about the newest cloud integrations and product enhancements that make Neo4j an essential choice for developers building apps with interconnected data and generative AI.
In his public lecture, Christian Timmerer provides insights into the fascinating history of video streaming, starting from its humble beginnings before YouTube to the groundbreaking technologies that now dominate platforms like Netflix and ORF ON. Timmerer also presents provocative contributions of his own that have significantly influenced the industry. He concludes by looking at future challenges and invites the audience to join in a discussion.
GridMate - End to end testing is a critical piece to ensure quality and avoid...ThomasParaiso2
End to end testing is a critical piece to ensure quality and avoid regressions. In this session, we share our journey building an E2E testing pipeline for GridMate components (LWC and Aura) using Cypress, JSForce, FakerJS…
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!SOFTTECHHUB
As the digital landscape continually evolves, operating systems play a critical role in shaping user experiences and productivity. The launch of Nitrux Linux 3.5.0 marks a significant milestone, offering a robust alternative to traditional systems such as Windows 11. This article delves into the essence of Nitrux Linux 3.5.0, exploring its unique features, advantages, and how it stands as a compelling choice for both casual users and tech enthusiasts.
In the rapidly evolving landscape of technologies, XML continues to play a vital role in structuring, storing, and transporting data across diverse systems. The recent advancements in artificial intelligence (AI) present new methodologies for enhancing XML development workflows, introducing efficiency, automation, and intelligent capabilities. This presentation will outline the scope and perspective of utilizing AI in XML development. The potential benefits and the possible pitfalls will be highlighted, providing a balanced view of the subject.
We will explore the capabilities of AI in understanding XML markup languages and autonomously creating structured XML content. Additionally, we will examine the capacity of AI to enrich plain text with appropriate XML markup. Practical examples and methodological guidelines will be provided to elucidate how AI can be effectively prompted to interpret and generate accurate XML markup.
Further emphasis will be placed on the role of AI in developing XSLT, or schemas such as XSD and Schematron. We will address the techniques and strategies adopted to create prompts for generating code, explaining code, or refactoring the code, and the results achieved.
The discussion will extend to how AI can be used to transform XML content. In particular, the focus will be on the use of AI XPath extension functions in XSLT, Schematron, Schematron Quick Fixes, or for XML content refactoring.
The presentation aims to deliver a comprehensive overview of AI usage in XML development, providing attendees with the necessary knowledge to make informed decisions. Whether you’re at the early stages of adopting AI or considering integrating it in advanced XML development, this presentation will cover all levels of expertise.
By highlighting the potential advantages and challenges of integrating AI with XML development tools and languages, the presentation seeks to inspire thoughtful conversation around the future of XML development. We’ll not only delve into the technical aspects of AI-powered XML development but also discuss practical implications and possible future directions.
Building RAG with self-deployed Milvus vector database and Snowpark Container...Zilliz
This talk will give hands-on advice on building RAG applications with an open-source Milvus database deployed as a docker container. We will also introduce the integration of Milvus with Snowpark Container Services.
20 Comprehensive Checklist of Designing and Developing a WebsitePixlogix Infotech
Dive into the world of Website Designing and Developing with Pixlogix! Looking to create a stunning online presence? Look no further! Our comprehensive checklist covers everything you need to know to craft a website that stands out. From user-friendly design to seamless functionality, we've got you covered. Don't miss out on this invaluable resource! Check out our checklist now at Pixlogix and start your journey towards a captivating online presence today.
UiPath Test Automation using UiPath Test Suite series, part 6DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 6. In this session, we will cover Test Automation with generative AI and Open AI.
UiPath Test Automation with generative AI and Open AI webinar offers an in-depth exploration of leveraging cutting-edge technologies for test automation within the UiPath platform. Attendees will delve into the integration of generative AI, a test automation solution, with Open AI advanced natural language processing capabilities.
Throughout the session, participants will discover how this synergy empowers testers to automate repetitive tasks, enhance testing accuracy, and expedite the software testing life cycle. Topics covered include the seamless integration process, practical use cases, and the benefits of harnessing AI-driven automation for UiPath testing initiatives. By attending this webinar, testers, and automation professionals can gain valuable insights into harnessing the power of AI to optimize their test automation workflows within the UiPath ecosystem, ultimately driving efficiency and quality in software development processes.
What will you get from this session?
1. Insights into integrating generative AI.
2. Understanding how this integration enhances test automation within the UiPath platform
3. Practical demonstrations
4. Exploration of real-world use cases illustrating the benefits of AI-driven test automation for UiPath
Topics covered:
What is generative AI
Test Automation with generative AI and Open AI.
UiPath integration with generative AI
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
7. Typical Requests… "We need to change the 3rd sentence in the Terms and Conditions….baah! " "Please change the image and link on page..." "We need a simple FAQ..." Baaah! Photo by: Aunt Owwee http://www.flickr.com/photos/aunto
8.
9.
10. Development Team: - not easily customizable - strange template conventions - front-end issues End Users/Bloggers - Problematic rich text editor - Lack of 3rd party tools Sys Admins - Performance and logging issues - Tough upgrade path - Longer deploy cycles Blogs Feedback photo by Patricia van Casteren http://www.flickr.com/photos/patries71/
11.
12.
13.
14.
15. About.Zappos.com – POWERED BY Drupal - Easy updates and maintenance – no code pushes or deploys - Quick turnaround on projects - Customization and plugins easily available
16.
17.
18. Challenge 1: Combining two technology stacks into 1 experience Solution 1: Use our in-house proxy/rewrite engine to combine into 1 experience.
19. Challenge 2 : Dealing with common/shared code on both platforms. Make updates on both platforms? Solution 2: Parse blank Zeta template into Drupal to share common code.
20.
21. Challenge 1 : Pull information product catalog Solution 2: Make a bunch of calls to internal APIs including SOLR
22. Challenge 2 : Make an admin for non-technical users Solution 2: Use a variety of contributed Drupal modules including: - CCK - Filefield - Link - Nodehierachy - Views
45. Cat-Skillz Open Source Maybe? ...Hopefully? (probably not) Content Management System / ALP System Solidarity / Iterations Super awesomely cool stuff
This is the Drupal Case Study of Zappos. We’ve been using Drupal since early 2008 and while it doesn’t power transactional parts of the site currently a major player in our tech stack
- I’m Alex - Former head of Front-End Development and User Experience With Mobile team since June Talking about: History of Drupal and the progression of how we’ve gotten to where we are now Walkthrough the pre-CMS, pre-Drupal days. first Drupal project and beyond Geoff Technical look into Advanced Landing Pages, Baffin and what’s under the hood. Daniel Dynamic Components and building on top of the Baffin platform Stephen Application Support, End-User Support and Documentation with Drupal Progression
Our small front-end development team This is an actual picture of our team in a San Francisco Apple Store during our outing
10 plus sites to maintain including: international sites, lifestyle sites white label sites called Powered By Zappos, which were sites that were themed like the brand but were powered by the Zappos infrastructure and maintain by the front-end team Powered by Zappos program ended in 2010
Our old “classic platform” Perl/MySQL platform Lots of static and non-ecommerce content Lots of requests to make small link updates and changes
“ Please Change the image and link on page” Definitely got bogged down in small updates. Baaah!!! We need a CMS of some sort! Not sustainable
- First taste of a CMS - End of 2007 implemented a 3rd party Blogs platform for blogs.zappos.com - Clearspace, J2EE Enterprise Social Collaboration Platform - Used for blogs, but potentially planned for forums, wikis and customer interaction + Feature rich out of the box: User management, Forums, Wikis, Friends, Commenting, themeing + Nice to have content be manageable via a CMS Looked promising and I have diagrams of how we were potentially going to build out our future CMS strategy using Clearspace. But….
- Early 2008 had Blogs.Zappos.com in the wild In production for about 6 months 3 groups monkeying around with Clearspace Developers customizing/themeing Blogs Sys Admins managing servers, receiving traffic, deploying code Bloggers writing 3-4 blogs posts a day
But after 6 months of monkeying around…. Starting to get the sense that this isn’t a great fit for Zappos…. Developers : Tough to customize and weird templating Written without front-end developers on the team CSS appending (1 monster CSS file for all themes, bottom theme is the most active) Sys Admins : Performance laggy, many reboots, heavy logging Upgrade path tough with any customizations Deploys tougher with Java Bloggers: Rich text editor sucked Not a lot of great 3 rd party sharing and plugins
Why not Wordpress? Probably the most popular Blog platform Sys team questioned the " enterprise "ness of Wordpress Traffic concerns - Engineer: Single Sign-on easier with Java than with PHP - New site revamp is Java
- At SXSW 2008, session called Content Management System Roundup - SharePoint , Expression Engine , Collage and Drupal - Jeff Eaton , from Lullabot gave a great presentation on Drupal - He showcased of some higher profile sites that were running Drupal. - I was impressed with the variety of sites running Drupal and the fact that they were high-traffic sites. Sony BMG, MTV etc.. - I had a chance to talk to Jeff Eaton and Mike Essl after the sessions about the strengths and weaknesses of Drupal and Expression Engine - both agreed for the things we'd use a CMS for at Zappos, Drupal would be a solid solution. - A few months later at IA Summit I talked to Christian Crumlisch from Yahoo Curator of Design Patterns Library. He said it was a solid platform, flexible and feature rich but you would need somebody that understood the internals if you were going to customize and modify it a bit.
Tony had an idea to create a new site: About.Zappos.com Culture, Company information etc.. Great to try Drupal on because: - Primarily static content or content that needed easy updating by business users - No e-commerce parts - Stand-alone site - New site, not replacing - Little risk and can throttle traffic Let's give Drupal a try!
About.Zappos.com – also a compare project! 2 Developers and 2 CMS’s (Geoff new hire, really smart) - Let’s have both Fabio and Geoff work on both projects and compare the two systems - Fabio working on Themeing and building out new Blogs - Geoff working on About.Zappos.com - Switch half way through and continue at the end compare and contrast - Drupal wins
We have our first Drupal Site! - Easy to maintain and update Little code pushes Quick turnaround on projects Customization and plenty of plugins available Awesome to have a Content Management System!
Middle of 2008 we began redoing our Zappos site architecture Ground up redesign of the site From Perl/MySQL to JAVA/MySQL/SOLR New templating system, cleaner front-end code Let’s optimize the site to leverage a CMS, therefore making content more self-service Let’s use Drupal for all our Customer Service pages, Frequently Asked Questions and Legal pages!
Frequently Asked Questions, Customer Service Pages and Terms and Conditions were great to put into Drupal Simple static content that required frequent updates and additions No complicated functionality Pretty straight forward for Drupal to handle But we had some challenges to combine 2 platforms
Challenge #1: How do you combine two technology stacks into 1 seemless experience. Different URLs, different servers, linking between sites Solution: Use our in-house proxy and rewrite engine to combine the two stacks into one, unified experience.
Challenge 2 : Dealing with common/shared code on both platforms. Make updates on both platforms? Solution 2: Parse blank Zeta (JAVA) template into Drupal to share common code. Have this blank template from the Java platform that could be parsed by Drupal and inject it’s own content into the blank space
New Project We had a new Mission Advanced Landing Pages Requirements: Expose categories Independent management of links Image management Pull information dynamically from product catalog - Drupal wasn’t the automatic choice! - Drupal is a star but we have other contenders because of deep integration with e-commerce platform - Riot Family (JAVA as back-end) vs. Drupal (our static CMS star) - After a quick 1 week prototype we chose Drupal - Drupal wins again...first step to becoming a consumer of external API's (see Jeff Eaton's talk at DrupalCon DC)
Challenge 1 : Pull information product catalog Solution 2: Make a bunch of calls to internal APIs including SOLR
Challenge 2 : Make an admin for non-technical users Solution 2: Use a variety of contributed Drupal modules including: - CCK - Filefield - Link - Nodehierachy - Views Entire project was done very quickly. Geoff worked on it and it was in production after only 6 weeks of development Saw heavy traffic relatively soon and was serving up some of the 10 most visited landing pages on our site Geoff is going to do a brief overview of Advanced Landing Pages But also go into the second generation of Advanced Landing Pages called Baffin.
Use a platform that works for your company, culture and development style. Clearspace == Feature rich, out of the box, not meant to be modified heavily or often, not easily upgraded Zappos == we’re going to heavily customize our software, lots of iterative changes, lots of rapid deploys, We need a very flexible platform Drupal better fit for Zappos company and development style Leverage the creativity of your team to bend technologies to meet business needs Solutions don’t have to be documented or blessed Remote template Hybrid tech stack Usage of API’s Are all examples of using Drupal in a non-traditional way but in a way that meets our needs.
Quick Turn Around - Due to business deadlines, we didn't have much time for design and development. - Development time took about 4 weeks. This allowed us to get something out to market rather quickly. - However, the development and scaling of what was put together could have been done much better. - In having such a quick turn around, it was much "easier" for us to learn from what went wrong or what surprisingly went well. Automation isn ’t always the answer - Even though only a small portion of these pages were automated, the business was seeing unexpected/undesired products, search listing, and brand results. - For our purposes, it made sense for us to allow for the best of both worlds. The ability for our business users to automate when it makes sense but allow for manually intervention for the cases where it makes sense. Limitations of the existing toolset - Drupal offers quite a bit out of the box. In the interest of time, we used whatever we could at the time, i.e. out of the box functionality from views and CCK amongst a slew of other modules. - We learned that if we wanted to scale and extend the system, we needed to build on top of Drupal using the built in APIs. This also included the ability to theme on much granular levels. - Instead of using what is available (with limited flexibility), it made the most sense for Zappos to develop something that was more inline with our business that hooks into the underlining infrastructure of Drupal. Allow for more configuration within reason - Not much configuration or flexibility was given with this iteration of landing pages. - The business was asking for the ability to repurpose these pages for things outside of boutiques (although that was the purpose of them). - Instead of looking to create a mechanism for just building landing pages, it made sense to build out a platform on top of Drupal that would adhere to the way that Zappos operates. In this platform, boutique pages would be a consumer of this, along with various other types of pages that had been requested in the past.
Framework Approach - As previously mentioned, instead of tailoring towards a single solution (i.e. boutique pages), this second iteration would allow for the creation of boutiques but other types of pages with very minimal development work. - Like most frameworks, this approach would entail very little development (handle redundant tasks) and allow for flexibility where applicable. One of the big pluses to using Drupal and PHP.
Layouts Components - This approach would be broken out into two destinct parts, layouts and components. Both of these would come from one centralized moudle we refer to as Baffin. - Baffin takes on an MVC-like approach that is two layers deep (maybe talk about what MVC is?). The first layer is handled on a layout level where layouts render the top layer including any page specific and region specific. The second layer is the component level where the base information is passed to the component where the component can hit various APIs, do additional queries, processing, mesaging of the data, custom view work, and a bunch of other things which acts. Anything controller related is handled by the baffin module to help in automated redundant tasks. - Baffin is responsible for permissions, reordering, removing, configuration of layouts, grandular theming, the reusing of content, API related tasks, and to name a few. Baffin by itself does nothing, its the creation of layout and components that make it useful. Its geared towards developers developing on top of it verses it being an out of the box solution.
- Layouts are the initial starting point for baffin. Layout are responsible for: - Configuration for the layout - The output of assigned regions - The output handled on a layout level (verses component level) - The gathering of additional data on on a layout level and any additional views that are needed. - Each region contains a set of nodes which are broken down into components which will be discussed next.
- A component essentially is a content type. However, a content type is treated essentially as a template for a piece of content to a layout. - A component consists of two parts, a model and view. The model handles basic operations like making API calls, post processing of data, settings view variables, the handling of views, and so on. - The view_directory is being set within the baffin_component hook. The baffin_component hook acts as more as a configuration which includes a number of options such as what directory the backend components come from, what directory the views come from, whether the view should cascade to the active theme, and so on. - The base view is located based upon what is set when the baffin_component hook is invoked. Depending if the option has been set in the hook, there is a cascading system that relates to a specific view. It goes as following: theme/view_directory/layout -> theme/view_directory -> module/view_directory/layout -> module/view_directory - We use components instead of blocks because these components are based on a page level verses a site level and the maintenance would be a nightmare if it wasn't done on such a granular level.
- A component essentially is a content type. However, a content type is treated essentially as a template for a piece of content to a layout. - A component consists of two parts, a model and view. The model handles basic operations like making API calls, post processing of data, settings view variables, the handling of views, and so on. - The base view is located based upon what is set when the baffin_component hook is invoked. Depending if the option has been set in the hook, there is a cascading system that relates to a specific view. It goes as following: theme/view_directory/layout -> theme/view_directory -> module/view_directory/layout -> module/view_directory - The view_directory is being set within the baffin_component hook. The baffin_component hook acts as more as a configuration which includes a number of options such as what directory the backend components come from, what directory the views come from, whether the view should cascade to the active theme, and so on. - We use components instead of blocks because these components are based on a page level verses a site level and the maintenance would be a nightmare if it wasn't done on such a granular level.
Search - We created a CCK field that allows a user to perform a search, return back a set of facets, or just simply get back the results entered in by the user. Essentially the user will select a set of rules and the desired results are returned back. - In CCK, the settings form allows a user to select which fields a search can perform on (productTypeFacet, categoryFacet, subCategoryFacets, attributeFacets, and so on), the ability to facet on search results, provide a search term, sorting, field aliasing, and a slew of other things. - The field itself (the process callback) displays what parts have been selected from the settings. The field or filters selected on the settings dynamically update once an onchange event occurs. Therefore, if a user selects productTypeFacet = Shoes, then the categoryFacet would only contain facet values that correlate to that. This is being done with hitting the Zappos API through our taxonomy or product catalog. - The values that are selected as saved out to the database and serves basic search results. Where baffin comes into play is this CCK widget can be repurposed for various uses. For example: returning back facet values, displaying search results, obtaining brand information, or getting back the resutls and doing some JavaScript with it. In the cases of doing something with the data, we are hitting the Zappos API to get search results or facet values. Product - We have a simple CCK field that allows a user to enter in a single productId or styleId (a styleId is a productId + colorId). - The settings form allows for the use of selecting a productId or styleId for the business user. - The field itself (the process callback) contains what was reflected in the settings. - By default, the field displays the product and determines whether the product has stock or not. The field will talk to the Zappos API to obtain the product information. - In cases where the business wants to display an individual product, this works out quite well. However, like most things in life, products run out of stock, so in these cases, we will have a backup search that acts as a catch all. Generated Imagery - We have a bit more complex CCK field where you select a template and based upon what template has been selected, will display an unknown set of fields (based upon the idea of a discovery service approach). This template is managed and maintained from another internal tool and is used elsewhere for other services. - For example, if you select template xyz, template xyz may contain an angle, styleId, another styleId, or some other undetermined field at that point. Once these fields have been filled in, a preview option is available that will talk to another service to make sure the values that were filled in and are valid. If they are valid, based upon the values set on that template, an image will be dynamically generated based upon what is set in that template. Once the preview is valid, a user can enter in alt text, title, link, and a publish option will appear. Reviews - Our oldest CCK field of this kind talks to our Reviews Solr core to show reviews based upon our taxonomy (Make sure we can say Solr). - The field itself (the process callback) contains all the available fields based upon our taxonomy. - On the forward facing side, based upon what has been selected, we talk to the Reviews core based upon what has been selected by the business. Others - We have other CCK fields that aren't API related that we are using that benefit the business that Daniel will discuss in a bit.
- Discuss how the contents of the page contains a number of dynamic and static elements - Components to discuss: - Category Navigation: Using the search CCK Field on the backend and then talks to an internal API to display links. The back end component will read in the values from the node and talk to an internal API that will then pass the values to the front end component where it will be rendered. - Image Gallery: Builds ontop of filefield to create our own version of this CCK widget. This allows us to do things that does not affect or impact filefield. The images are static and the JavaScript that is used for this component is contained and rendered on the Java platform. - Recommendations: The business sets the rules for what sort of recommendation should be displayed. Then on the front end we talk to our recommendation engine based upon what is set by the business as to what should be displayed. - Product Feed: Uses the search CCK field to displays search results. The filters are set by the business. The back end component will then talk to the Zappos API to get the results set by the business where the view will render the result.
Geoff Covered: Basics / Fundamentals of Baffin Creating Components / Layouts with code Standard Zappos Page’s Components I’ll be covering Non-standard components Experimental / trying out ideas Common theme: Moving / Interactive But first I want to: Re-iterate or piggy back off Alex’s points Explain how we got to a point where we can: Experiment for the site Play with new ideas for the site
Moslow’s BG is Maslow Important Psychologist Born / raised in Brooklyn Human beings are naturally good Studied superb human beings rather than non-functional ones Hierarchy Human Needs Order in which attempted Typically Don’t Skip a step Water VS Belonging Air VS Friends
Physiological Needs: Food, Air Water For us: CMS Barraged with content updates We were just trying to get some AIR to breath! First Iteration of ALP’s
Safety Needs Shelter, Financial Security Personal Safety For US Second Iteration (Baffin) Solidification of Baffin through iteration Re-worked a quite a bit (API / Other Features)
Love / Belonging Belonging to social groups Making new friends Falling In Love, etc. For us Super awesomely cool stuff Really fun stuff Interactive, Flash, Moving Experimenting / Playing with new Idea’s
Esteem Seeking Recognition Attempting to win awards For us: Cat-skillz (mountain range) Next Iteration Probably Drupal 7/8
Self-Actualization Gandhi, Einstein, Ben Stein, and Nelson Mandela Attempting to win awards Not everyone reaches self-actualization For us: Just like Maslow thinks humans naturally good I think Zappos is inherently good as well Future: Open Source (Where it makes sense) Future: More Involved In Community We are definitely not anywhere near there yet
More Feature Requests / Solutions Completed The more solutions to future problems we have.
I have a couple of solid Examples of this But first Going to show just some stuff that “moves” or “animates” (This slide is pretty pointless)
Uses the Zappos API Specifically The Search Controller Admin uses “Patron Field” aka Zappos API Field, for filtering/faceting on results
Also the Zappos API Specifically The Statistics Controller (This API is open folks) Backend Magic Gives us rough City/State Information Admin Also “Patron Field” aka Zappos API Field, for filtering/faceting on results
Simple, yet cool. I love it Laurie who works a lot with video and multimedia Came up to me and showed me an example of what she wanted Code example: JavaScript from 1999 Uses HTML5 Video Fallback to Regular Hero Image
Result of abusing WYSIWYG’s in Drupal <object> for our video player doesn’t scale If we change our player, we are screwed / hard to find random pieces all over Used Community Module (Video filter, added our custom filter the module) Two ways: [video=http://example.flv] and Component
ZCLT: Exposure to and encourage adoption of Wiki usage PBZ: Drupal exposure, I was the business client for the front end team ASS: Helped facilitate all of the above and take it to the next level
ZCLT: Exposure to and encourage adoption of Wiki usage PBZ: Drupal exposure, I was the business client for the front end team ASS: Helped facilitate all of the above and take it to the next level
Started with About.Zappos.com Standalone site with static content Typical usage of Drupal, very similar to most Drupal installations out in the wild A few internal users and some light traffic from customers
Late 2008, Used Drupal to power Frequently Asked Questions, Terms and Conditions Still pulled in static content and had light traffic but was incorporated into the e-commerce site Used the remote template parsing I mentioned in my talk
Advanced Landing Pages was the first time we had to pull in product catalog information from SOLR, Databases and other internal API’s. Our information architecture team under UX was put in charge of managing the landing pages. We also started using Drupal on multiple sites for static content. Traffic wise, Drupal was hosting some of the most visited landing pages on Zappos.com
2010 brought Baffin, which is what Geoff did a deep dive on We continued to hit internal API’s and additionally started hitting some external API’s as well With the increasing number of end-users that were managing Advanced Landing Pages and then Baffin, we brought on App Support App Support is what Stephen Hayden talked about
By 2011 and currently, our stack looks something like this: We additionally hit a Dynamic Image Creation API that can generate images on the fly Baffin has increasingly been used as a platform to develop and extend upon. - Daniel talked about building Components on top of Baffin With the increased traffic we started seeing: Caching for performance Multivariate for testing Domain manager for multisite capability Finally we started to expose our Baffin content to be leveraged for our Mobile Apps
Do It With Us! We’re hiring for Drupal positions, check jobs.zappos.com! We have a booth here at Do It With Drupal. Both Jen and Tonya are attending it! We also have a prize wheel where you can win various prizes. Thanks for coming to our Do It With Drupal presentation