SlideShare a Scribd company logo
THE TECH SIDE OF
                        PROJECT ARGO
                Marc Lavallee                Wesley Lindamood
        Project ARGO tech. architect    Project ARGO web designer
                 @lavallee                      @lindamood
             mlavallee@npr.org             wlindamood@npr.org

                                 10/19/2010

Wednesday, October 20, 2010
OVERVIEW




Wednesday, October 20, 2010
BACKGROUND
       What is Project ARGO?




Wednesday, October 20, 2010
It’s designed to...

          "...beef up coverage of critical issues at the local
         level, and, second, to begin to establish an online
             network that can transform itself into a news
           powerhouse of unparalleled depth and quality."
                              -- Vivian Schiller, CEO and president of NPR




Wednesday, October 20, 2010
Our model

                 • Editorial Strategy
                 • Technology Platform
                 • Sustainability Plans




Wednesday, October 20, 2010
The pilot scope
    A network of twelve
    topical websites:

    • Staffed by a single
    blogger/editor
    • Associated with an NPR
    member station
    • Adding to that station’s
    web presence




Wednesday, October 20, 2010
Basically, we’re a startup




                                     flickr / Rev. Xanatos Satanicos Bombasticos




                              ... within

Wednesday, October 20, 2010
The ARGO Platform
                     Mostly                 , with some

                     Standard WP 3.0 with   Content aggregation app.
                     some customizations.   Hooked into WordPress:
                                            • admin widgets
                                            • settings panel
                                            • content widgets
   Combination gives us flexibility to use best tool for the job.



Wednesday, October 20, 2010
OUR STARTING POINT
                              Maintainability,
                              Structure and
                                Flexibility


Wednesday, October 20, 2010
Maintainability
                     OUR DEVELOPMENT TEAM



                              You’re looking at it...


Wednesday, October 20, 2010
Structure




                                      from Alaskan Dude via Flickr




Wednesday, October 20, 2010
Flexibility




                                      From Melvin Schlubman via Flickr




Wednesday, October 20, 2010
Develop as little
                        as possible


Wednesday, October 20, 2010
Modularity and
                               code reuse



Wednesday, October 20, 2010
Argo
           Theme
         framework

                                              Child
                                             Theme

                              Parent Theme
Wednesday, October 20, 2010
Giving the
     system
    structure
    and shape


                              dcentric.wamu.org

Wednesday, October 20, 2010
Featured Content




Wednesday, October 20, 2010
Featured Content
 // CUSTOM TAXONOMY
 add_action( 'init', 'argo_custom_taxonomies' );
 function argo_custom_taxonomies() {
    if ( ! taxonomy_exists( 'prominence' ) ) {
        register_taxonomy( 'prominence', 'post', array(
            'hierarchical' => true,
            'label' => 'Post Prominence',
            'query_var' => true,
            'rewrite' => true,
        ) );
        wp_insert_term( 'Featured', 'prominence' );
        wp_insert_term( 'National', 'prominence' );
    }
 }

 // FEATURED IMAGE AND OTHER CROPS
 add_action( 'after_setup_theme', 'argo_create_image_sizes' );
 function argo_create_image_sizes() {
     add_theme_support( 'post-thumbnails' );
     set_post_thumbnail_size( 140, 140, true ); // skybox thumbnail
     add_image_size( '60x60', 60, 60, true ); // argo network thumbnail
     add_image_size( '220', 220, 9999 ); // topic featured image
 }

Wednesday, October 20, 2010
Custom Menus




     http://codex.wordpress.org/Appearance_Menus_SubPanel

Wednesday, October 20, 2010
Mega Menu




Wednesday, October 20, 2010
Mega Menu
class Argo_Categories_Walker extends Walker {
   var $tree_type = array( 'post_type', 'taxonomy', 'custom' );
   var $db_fields = array( 'parent' => 'menu_item_parent', 'id' => 'db_id' );

     function start_el( &$output, $item, $depth, $args ) {
        $output .= '<li' . $li_class . '><a href="' . $item->url . '">' .
            $item->title . '</a>';
        ...
     }
     function end_el( &$output, $item, $depth ) {
        $output .= "</li>n";
     }
}
-----------------------------------------------------------------------------------
<?php wp_nav_menu( array( 'theme_location' => 'categories', 'container' => false,
'walker' => new Argo_Categories_Walker, ) );
?>


Wednesday, October 20, 2010
Post types like
        Audio




     SoundManager: schillmania.com/projects/soundmanager2
Wednesday, October 20, 2010
Audio
    // Create shortcode text for built-in audio link
    add_filter( 'audio_send_to_editor_url', 'argo_audio_editor_shortcode', 10, 3 );
    function argo_audio_editor_shortcode( $html, $href, $title ) {
          return sprintf( '[audio href="%s" title="%s"]Insert caption here[/audio]', $href, $title );
    }

    // Add handler for [audio] shortcode
    add_shortcode( 'audio', 'argo_audio_shortcode' );
    function argo_audio_editor_markup( $atts, $content );
        extract( $atts );

         $out = sprintf( '<ul class="%s"><li>', 'playlist' );
         $out .= sprintf( '<a href="%s" class="%s" title="%s">%s', $href, 'inline', $title, $title );
         if ( $caption ) {
             $out .= sprintf( '<span class="%s">%s</span></a>', 'caption', $caption );
         }
         $out .= sprintf( '<a href="%s" class="%s">%s</a>', $href,
             'exclude', 'Download' );
         $out .= "</li></ul>";

         return $out;
    }
Wednesday, October 20, 2010
Anatomy of a
                               template


Wednesday, October 20, 2010
html5boilerplate.com




     960.gs




Wednesday, October 20, 2010
CSS3- @font-face



   @font-face {
   ! font-family: 'LeagueGothicRegular';
   ! src: url('font/league_gothic-webfont.eot');
   ! src: local('☺'), url('font/league_gothic-webfont.woff')
   format('woff'), url('font/league_gothic-webfont.ttf') format
   ('truetype'), url('font/league_gothic-
   webfont.svg#webfontLe3hwYFq') format('svg');
   ! font-weight: normal;
   ! font-style: normal;
   }
Wednesday, October 20, 2010
Progressive
                              Enhancement
       <html lang="en" class=" js canvas canvastext geolocation crosswindowmessaging
       websqldatabase no-indexeddb hashchange historymanagement draganddrop websockets
       rgba hsla multiplebgs backgroundsize borderimage borderradius boxshadow opacity
       cssanimations csscolumns cssgradients cssreflections csstransforms
       csstransforms3d csstransitions video audio localstorage sessionstorage
       webworkers applicationcache svg smil svgclippaths">


       .borderradius #sidebar {
       background-color: #ddd;
       -moz-border-radius: 8px;
       -webkit-border-radius: 8px;
       border: 1px solid #e3e3e3;
       padding: 5px
       }                                                           modernizr.com
Wednesday, October 20, 2010
HTML5 semantic
                           template tags
               <header>
               <nav>
               <article>
               <aside>
               <section>
               <footer>              modernizr.com


Wednesday, October 20, 2010
Conditional
                                   comments
               <!--[if lt IE 7]> <html lang="en" class="no-js   ie6"> <![endif]-->
               <!--[if IE 7]>    <html lang="en" class="no-js   ie7"> <![endif]-->
               <!--[if IE 8]>    <html lang="en" class="no-js   ie8"> <![endif]-->
               <!--[if IE 9]>    <html lang="en" class="no-js   ie9"> <![endif]-->
               <!--[if (gt IE 9)|!(IE)]><!--> <html lang="en"   class="no-js"> <!--
               <![endif]-->




                              .ie6 .meta-gestures {width: 610px;}



Wednesday, October 20, 2010
Embracing the
                 Web as our CMS


Wednesday, October 20, 2010
The Status Quo




Wednesday, October 20, 2010
How can we improve it?
     For the blogger:
     • Create the right kind of glue between systems
     • Take away as much manual effort as possible
     For the user:
     • Don’t let the origin drive the placement




Wednesday, October 20, 2010
Example: Link Roundups
     and aggregation
 • Blogger saves links to
 Delicious
 • The aggregator
 automatically pulls in
 those links
 • Blogger sees links in
 WordPress admin




Wednesday, October 20, 2010
Link Roundups

 • Blogger edits links
 and sends to editor
 window.
 • Blogger adds video,
 does final check, and
 publishes.




Wednesday, October 20, 2010
Link Roundups




Wednesday, October 20, 2010
Aggregation
  If the Blogger uses certain
  tags, links automatically
  appear on other pages.

  Same system used for
  aggregating content from
  Daylife and Twitter.

  All external content lives
  in one database and can
  be used in multiple ways.


Wednesday, October 20, 2010
How this all
                                works


Wednesday, October 20, 2010
Hosting
   Hosted in the cloud, entirely with Amazon Web Services:
   Our “webserver” is two parts:
   • A “hard drive”: Elastic Block Storage (EBS)
   • A “CPU”: Elastic Computing instance (EC2)
   Our “database server” is the Relational Database Service
   (RDS)

   Ylastic for monitoring/alerts




Wednesday, October 20, 2010
Webserver setup
     • We run nginx, Apache, and Django on one server
     • nginx handles all requests from users, and
       • handles static content (.js, .css, etc) itself
       • dispatches PHP requests to Apache
       • dispatches aggregator requests to Django




Wednesday, October 20, 2010
WordPress architecture
            • WordPress 3.0.1
            • One MultiSite instance for all 12 blogs.
            • Each site has its own child theme.
            • Domain Mapping plugin for multiple domains.
            • Unfiltered MU plugin so bloggers can post videos.




Wednesday, October 20, 2010
Caching & Performance
            • nginx keeps the load off of Apache
            • W3 Total Cache plugin is the Swiss Army knife of
            caching.
              • we implement disk caching for pages
            • Not using Amazon’s S3 at this time; no immediate
            need.




Wednesday, October 20, 2010
Behind the scenes


                              from bagaball via Flickr

Wednesday, October 20, 2010
What’s next



Wednesday, October 20, 2010
We’re hiring
                              NPR is launching a similar project called
                                     “Impact of Government”

                                  • Application Developer
                                  • Editorial/Interactive Designer
                                  • Project Manager
                                  • Editorial Coordinators
           Talk to us or go to http://www.npr.org/about/careers/




Wednesday, October 20, 2010

More Related Content

PDF
dojo is bizarro jQuery
PDF
HTML 5: The Future of the Web
PDF
Opening up the Social Web - Standards that are bridging the Islands
PDF
Dr. Strangelove: or How I learned to love HTML, CSS, and Javascript
PDF
Mobile, Media & Touch
PDF
Large problems, Mostly Solved
PDF
Organizing Code with JavascriptMVC
PDF
Getting Started with Dojo Toolkit
dojo is bizarro jQuery
HTML 5: The Future of the Web
Opening up the Social Web - Standards that are bridging the Islands
Dr. Strangelove: or How I learned to love HTML, CSS, and Javascript
Mobile, Media & Touch
Large problems, Mostly Solved
Organizing Code with JavascriptMVC
Getting Started with Dojo Toolkit

What's hot (9)

PDF
Presentation to wdim_students
PDF
Ruby on-rails-workshop
PDF
Couchdbkit djangocong-20100425
KEY
jQuery('#knowledge').appendTo('#you');
PDF
Collective Amberjack - European Plone Symposium
PDF
Frontend Engineer Toolbox
PDF
Write Less Do More
PDF
Writing Reusable Web Components with jQuery and jQuery UI
PDF
Things to use, find and share
Presentation to wdim_students
Ruby on-rails-workshop
Couchdbkit djangocong-20100425
jQuery('#knowledge').appendTo('#you');
Collective Amberjack - European Plone Symposium
Frontend Engineer Toolbox
Write Less Do More
Writing Reusable Web Components with jQuery and jQuery UI
Things to use, find and share
Ad

Viewers also liked (7)

PDF
Appinions CRM Influence Study
PDF
{Case Study} Influence-Driven Content Marketing
PDF
{White Paper} Measuring Global Attention | Appinions
PDF
Instalación de Servidores GNU/Linux - PROXY SQUID (parte 3)
PDF
Wearable Devices Influence Study
PDF
Mis en Scene Analysis
Appinions CRM Influence Study
{Case Study} Influence-Driven Content Marketing
{White Paper} Measuring Global Attention | Appinions
Instalación de Servidores GNU/Linux - PROXY SQUID (parte 3)
Wearable Devices Influence Study
Mis en Scene Analysis
Ad

Similar to The Tech Side of Project Argo (20)

PDF
WordPress Front End Optimizations
PDF
CSS3: The Future is Now at Drupal Design Camp Boston
PDF
Introduction to HTML5
KEY
HTML5 Intro
PDF
Creating Lifelike Designs with CSS3
PDF
CSS3 now
PDF
A Primer on HTML 5 - By Nick Armstrong
PDF
谈一谈HTML5/CSS3 @ WebRebuild 2010
PDF
Presentation plone conference 2012
PDF
Browsers & Web Technology - an Opera talk
KEY
An Introduction to HTML5
PPT
Alfresco from an agile framework perspective
PDF
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
PDF
HTML5: About Damn Time
PDF
Cutting Edge CSS3 @ WebExpo Tour 2010
PPT
Praktik Pengembangan Konten E-Learning HTML5 Sederhana
PDF
So what's a web app? introduction to the chrome web store
PDF
Developing in HTML5: Widgetbox & Sencha Touch
PDF
Sencha Touch Workshop
PDF
Delivering a Responsive UI
WordPress Front End Optimizations
CSS3: The Future is Now at Drupal Design Camp Boston
Introduction to HTML5
HTML5 Intro
Creating Lifelike Designs with CSS3
CSS3 now
A Primer on HTML 5 - By Nick Armstrong
谈一谈HTML5/CSS3 @ WebRebuild 2010
Presentation plone conference 2012
Browsers & Web Technology - an Opera talk
An Introduction to HTML5
Alfresco from an agile framework perspective
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
HTML5: About Damn Time
Cutting Edge CSS3 @ WebExpo Tour 2010
Praktik Pengembangan Konten E-Learning HTML5 Sederhana
So what's a web app? introduction to the chrome web store
Developing in HTML5: Widgetbox & Sencha Touch
Sencha Touch Workshop
Delivering a Responsive UI

Recently uploaded (20)

PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Machine learning based COVID-19 study performance prediction
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
cuic standard and advanced reporting.pdf
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
Machine Learning_overview_presentation.pptx
PDF
Electronic commerce courselecture one. Pdf
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
Tartificialntelligence_presentation.pptx
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
A Presentation on Artificial Intelligence
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PDF
Assigned Numbers - 2025 - Bluetooth® Document
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Machine learning based COVID-19 study performance prediction
20250228 LYD VKU AI Blended-Learning.pptx
cuic standard and advanced reporting.pdf
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Building Integrated photovoltaic BIPV_UPV.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Spectral efficient network and resource selection model in 5G networks
MIND Revenue Release Quarter 2 2025 Press Release
Machine Learning_overview_presentation.pptx
Electronic commerce courselecture one. Pdf
Programs and apps: productivity, graphics, security and other tools
Tartificialntelligence_presentation.pptx
A comparative analysis of optical character recognition models for extracting...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
A Presentation on Artificial Intelligence
SOPHOS-XG Firewall Administrator PPT.pptx
Assigned Numbers - 2025 - Bluetooth® Document

The Tech Side of Project Argo

  • 1. THE TECH SIDE OF PROJECT ARGO Marc Lavallee Wesley Lindamood Project ARGO tech. architect Project ARGO web designer @lavallee @lindamood mlavallee@npr.org wlindamood@npr.org 10/19/2010 Wednesday, October 20, 2010
  • 3. BACKGROUND What is Project ARGO? Wednesday, October 20, 2010
  • 4. It’s designed to... "...beef up coverage of critical issues at the local level, and, second, to begin to establish an online network that can transform itself into a news powerhouse of unparalleled depth and quality." -- Vivian Schiller, CEO and president of NPR Wednesday, October 20, 2010
  • 5. Our model • Editorial Strategy • Technology Platform • Sustainability Plans Wednesday, October 20, 2010
  • 6. The pilot scope A network of twelve topical websites: • Staffed by a single blogger/editor • Associated with an NPR member station • Adding to that station’s web presence Wednesday, October 20, 2010
  • 7. Basically, we’re a startup flickr / Rev. Xanatos Satanicos Bombasticos ... within Wednesday, October 20, 2010
  • 8. The ARGO Platform Mostly , with some Standard WP 3.0 with Content aggregation app. some customizations. Hooked into WordPress: • admin widgets • settings panel • content widgets Combination gives us flexibility to use best tool for the job. Wednesday, October 20, 2010
  • 9. OUR STARTING POINT Maintainability, Structure and Flexibility Wednesday, October 20, 2010
  • 10. Maintainability OUR DEVELOPMENT TEAM You’re looking at it... Wednesday, October 20, 2010
  • 11. Structure from Alaskan Dude via Flickr Wednesday, October 20, 2010
  • 12. Flexibility From Melvin Schlubman via Flickr Wednesday, October 20, 2010
  • 13. Develop as little as possible Wednesday, October 20, 2010
  • 14. Modularity and code reuse Wednesday, October 20, 2010
  • 15. Argo Theme framework Child Theme Parent Theme Wednesday, October 20, 2010
  • 16. Giving the system structure and shape dcentric.wamu.org Wednesday, October 20, 2010
  • 18. Featured Content // CUSTOM TAXONOMY add_action( 'init', 'argo_custom_taxonomies' ); function argo_custom_taxonomies() { if ( ! taxonomy_exists( 'prominence' ) ) { register_taxonomy( 'prominence', 'post', array( 'hierarchical' => true, 'label' => 'Post Prominence', 'query_var' => true, 'rewrite' => true, ) ); wp_insert_term( 'Featured', 'prominence' ); wp_insert_term( 'National', 'prominence' ); } } // FEATURED IMAGE AND OTHER CROPS add_action( 'after_setup_theme', 'argo_create_image_sizes' ); function argo_create_image_sizes() { add_theme_support( 'post-thumbnails' ); set_post_thumbnail_size( 140, 140, true ); // skybox thumbnail add_image_size( '60x60', 60, 60, true ); // argo network thumbnail add_image_size( '220', 220, 9999 ); // topic featured image } Wednesday, October 20, 2010
  • 19. Custom Menus http://codex.wordpress.org/Appearance_Menus_SubPanel Wednesday, October 20, 2010
  • 21. Mega Menu class Argo_Categories_Walker extends Walker { var $tree_type = array( 'post_type', 'taxonomy', 'custom' ); var $db_fields = array( 'parent' => 'menu_item_parent', 'id' => 'db_id' ); function start_el( &$output, $item, $depth, $args ) { $output .= '<li' . $li_class . '><a href="' . $item->url . '">' . $item->title . '</a>'; ... } function end_el( &$output, $item, $depth ) { $output .= "</li>n"; } } ----------------------------------------------------------------------------------- <?php wp_nav_menu( array( 'theme_location' => 'categories', 'container' => false, 'walker' => new Argo_Categories_Walker, ) ); ?> Wednesday, October 20, 2010
  • 22. Post types like Audio SoundManager: schillmania.com/projects/soundmanager2 Wednesday, October 20, 2010
  • 23. Audio // Create shortcode text for built-in audio link add_filter( 'audio_send_to_editor_url', 'argo_audio_editor_shortcode', 10, 3 ); function argo_audio_editor_shortcode( $html, $href, $title ) { return sprintf( '[audio href="%s" title="%s"]Insert caption here[/audio]', $href, $title ); } // Add handler for [audio] shortcode add_shortcode( 'audio', 'argo_audio_shortcode' ); function argo_audio_editor_markup( $atts, $content ); extract( $atts ); $out = sprintf( '<ul class="%s"><li>', 'playlist' ); $out .= sprintf( '<a href="%s" class="%s" title="%s">%s', $href, 'inline', $title, $title ); if ( $caption ) { $out .= sprintf( '<span class="%s">%s</span></a>', 'caption', $caption ); } $out .= sprintf( '<a href="%s" class="%s">%s</a>', $href, 'exclude', 'Download' ); $out .= "</li></ul>"; return $out; } Wednesday, October 20, 2010
  • 24. Anatomy of a template Wednesday, October 20, 2010
  • 25. html5boilerplate.com 960.gs Wednesday, October 20, 2010
  • 26. CSS3- @font-face @font-face { ! font-family: 'LeagueGothicRegular'; ! src: url('font/league_gothic-webfont.eot'); ! src: local('☺'), url('font/league_gothic-webfont.woff') format('woff'), url('font/league_gothic-webfont.ttf') format ('truetype'), url('font/league_gothic- webfont.svg#webfontLe3hwYFq') format('svg'); ! font-weight: normal; ! font-style: normal; } Wednesday, October 20, 2010
  • 27. Progressive Enhancement <html lang="en" class=" js canvas canvastext geolocation crosswindowmessaging websqldatabase no-indexeddb hashchange historymanagement draganddrop websockets rgba hsla multiplebgs backgroundsize borderimage borderradius boxshadow opacity cssanimations csscolumns cssgradients cssreflections csstransforms csstransforms3d csstransitions video audio localstorage sessionstorage webworkers applicationcache svg smil svgclippaths"> .borderradius #sidebar { background-color: #ddd; -moz-border-radius: 8px; -webkit-border-radius: 8px; border: 1px solid #e3e3e3; padding: 5px } modernizr.com Wednesday, October 20, 2010
  • 28. HTML5 semantic template tags <header> <nav> <article> <aside> <section> <footer>  modernizr.com Wednesday, October 20, 2010
  • 29. Conditional comments <!--[if lt IE 7]> <html lang="en" class="no-js ie6"> <![endif]--> <!--[if IE 7]> <html lang="en" class="no-js ie7"> <![endif]--> <!--[if IE 8]> <html lang="en" class="no-js ie8"> <![endif]--> <!--[if IE 9]> <html lang="en" class="no-js ie9"> <![endif]--> <!--[if (gt IE 9)|!(IE)]><!--> <html lang="en" class="no-js"> <!-- <![endif]--> .ie6 .meta-gestures {width: 610px;} Wednesday, October 20, 2010
  • 30. Embracing the Web as our CMS Wednesday, October 20, 2010
  • 31. The Status Quo Wednesday, October 20, 2010
  • 32. How can we improve it? For the blogger: • Create the right kind of glue between systems • Take away as much manual effort as possible For the user: • Don’t let the origin drive the placement Wednesday, October 20, 2010
  • 33. Example: Link Roundups and aggregation • Blogger saves links to Delicious • The aggregator automatically pulls in those links • Blogger sees links in WordPress admin Wednesday, October 20, 2010
  • 34. Link Roundups • Blogger edits links and sends to editor window. • Blogger adds video, does final check, and publishes. Wednesday, October 20, 2010
  • 36. Aggregation If the Blogger uses certain tags, links automatically appear on other pages. Same system used for aggregating content from Daylife and Twitter. All external content lives in one database and can be used in multiple ways. Wednesday, October 20, 2010
  • 37. How this all works Wednesday, October 20, 2010
  • 38. Hosting Hosted in the cloud, entirely with Amazon Web Services: Our “webserver” is two parts: • A “hard drive”: Elastic Block Storage (EBS) • A “CPU”: Elastic Computing instance (EC2) Our “database server” is the Relational Database Service (RDS) Ylastic for monitoring/alerts Wednesday, October 20, 2010
  • 39. Webserver setup • We run nginx, Apache, and Django on one server • nginx handles all requests from users, and • handles static content (.js, .css, etc) itself • dispatches PHP requests to Apache • dispatches aggregator requests to Django Wednesday, October 20, 2010
  • 40. WordPress architecture • WordPress 3.0.1 • One MultiSite instance for all 12 blogs. • Each site has its own child theme. • Domain Mapping plugin for multiple domains. • Unfiltered MU plugin so bloggers can post videos. Wednesday, October 20, 2010
  • 41. Caching & Performance • nginx keeps the load off of Apache • W3 Total Cache plugin is the Swiss Army knife of caching. • we implement disk caching for pages • Not using Amazon’s S3 at this time; no immediate need. Wednesday, October 20, 2010
  • 42. Behind the scenes from bagaball via Flickr Wednesday, October 20, 2010
  • 44. We’re hiring NPR is launching a similar project called “Impact of Government” • Application Developer • Editorial/Interactive Designer • Project Manager • Editorial Coordinators Talk to us or go to http://www.npr.org/about/careers/ Wednesday, October 20, 2010