SlideShare a Scribd company logo
1 of 44
Download to read offline
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

What's hot

Presentation to wdim_students
Presentation to wdim_studentsPresentation to wdim_students
Presentation to wdim_studentsScott Motte
 
Ruby on-rails-workshop
Ruby on-rails-workshopRuby on-rails-workshop
Ruby on-rails-workshopRyan Abbott
 
Couchdbkit djangocong-20100425
Couchdbkit djangocong-20100425Couchdbkit djangocong-20100425
Couchdbkit djangocong-20100425guest4f2eea
 
jQuery('#knowledge').appendTo('#you');
jQuery('#knowledge').appendTo('#you');jQuery('#knowledge').appendTo('#you');
jQuery('#knowledge').appendTo('#you');mikehostetler
 
Collective Amberjack - European Plone Symposium
Collective Amberjack - European Plone SymposiumCollective Amberjack - European Plone Symposium
Collective Amberjack - European Plone SymposiumMassimo Azzolini
 
Frontend Engineer Toolbox
Frontend Engineer ToolboxFrontend Engineer Toolbox
Frontend Engineer ToolboxYnon Perek
 
Write Less Do More
Write Less Do MoreWrite Less Do More
Write Less Do MoreRemy Sharp
 
Writing Reusable Web Components with jQuery and jQuery UI
Writing Reusable Web Components with jQuery and jQuery UIWriting Reusable Web Components with jQuery and jQuery UI
Writing Reusable Web Components with jQuery and jQuery UIYnon Perek
 

What's hot (9)

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

Viewers also liked

Appinions CRM Influence Study
Appinions CRM Influence StudyAppinions CRM Influence Study
Appinions CRM Influence StudyAppinions
 
{Case Study} Influence-Driven Content Marketing
{Case Study} Influence-Driven Content Marketing{Case Study} Influence-Driven Content Marketing
{Case Study} Influence-Driven Content MarketingAppinions
 
{White Paper} Measuring Global Attention | Appinions
{White Paper} Measuring Global Attention | Appinions{White Paper} Measuring Global Attention | Appinions
{White Paper} Measuring Global Attention | AppinionsAppinions
 
Instalación de Servidores GNU/Linux - PROXY SQUID (parte 3)
Instalación de Servidores GNU/Linux - PROXY SQUID (parte 3)Instalación de Servidores GNU/Linux - PROXY SQUID (parte 3)
Instalación de Servidores GNU/Linux - PROXY SQUID (parte 3)Max Morales
 
Wearable Devices Influence Study
Wearable Devices Influence StudyWearable Devices Influence Study
Wearable Devices Influence StudyAppinions
 
Mis en Scene Analysis
Mis en Scene AnalysisMis en Scene Analysis
Mis en Scene Analysislavorhees
 

Viewers also liked (7)

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

Similar to The Tech Side of Project Argo

WordPress Front End Optimizations
WordPress Front End OptimizationsWordPress Front End Optimizations
WordPress Front End OptimizationsScott Taylor
 
CSS3: The Future is Now at Drupal Design Camp Boston
CSS3: The Future is Now at Drupal Design Camp BostonCSS3: The Future is Now at Drupal Design Camp Boston
CSS3: The Future is Now at Drupal Design Camp BostonJen Simmons
 
Introduction to HTML5
Introduction to HTML5Introduction to HTML5
Introduction to HTML5Adrian Olaru
 
Creating Lifelike Designs with CSS3
Creating Lifelike Designs with CSS3Creating Lifelike Designs with CSS3
Creating Lifelike Designs with CSS3Meagan Fisher
 
A Primer on HTML 5 - By Nick Armstrong
A Primer on HTML 5 - By Nick ArmstrongA Primer on HTML 5 - By Nick Armstrong
A Primer on HTML 5 - By Nick ArmstrongNick Armstrong
 
谈一谈HTML5/CSS3 @ WebRebuild 2010
谈一谈HTML5/CSS3 @ WebRebuild 2010谈一谈HTML5/CSS3 @ WebRebuild 2010
谈一谈HTML5/CSS3 @ WebRebuild 2010Zi Bin Cheah
 
Presentation plone conference 2012
Presentation plone conference 2012Presentation plone conference 2012
Presentation plone conference 2012Cornelis Kolbach
 
Browsers & Web Technology - an Opera talk
Browsers & Web Technology - an Opera talkBrowsers & Web Technology - an Opera talk
Browsers & Web Technology - an Opera talkZi Bin Cheah
 
An Introduction to HTML5
An Introduction to HTML5An Introduction to HTML5
An Introduction to HTML5Steven Chipman
 
Alfresco from an agile framework perspective
Alfresco from an agile framework perspectiveAlfresco from an agile framework perspective
Alfresco from an agile framework perspectiveJeff Potts
 
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5Sadaaki HIRAI
 
HTML5: About Damn Time
HTML5: About Damn TimeHTML5: About Damn Time
HTML5: About Damn TimeKevin Lawver
 
Cutting Edge CSS3 @ WebExpo Tour 2010
Cutting Edge CSS3 @ WebExpo Tour 2010Cutting Edge CSS3 @ WebExpo Tour 2010
Cutting Edge CSS3 @ WebExpo Tour 2010Zi Bin Cheah
 
Praktik Pengembangan Konten E-Learning HTML5 Sederhana
Praktik Pengembangan Konten E-Learning HTML5 SederhanaPraktik Pengembangan Konten E-Learning HTML5 Sederhana
Praktik Pengembangan Konten E-Learning HTML5 SederhanaMuhammad Yusuf
 
So what's a web app? introduction to the chrome web store
So what's a web app? introduction to the chrome web storeSo what's a web app? introduction to the chrome web store
So what's a web app? introduction to the chrome web storeEric Bidelman
 
Developing in HTML5: Widgetbox & Sencha Touch
Developing in HTML5: Widgetbox & Sencha TouchDeveloping in HTML5: Widgetbox & Sencha Touch
Developing in HTML5: Widgetbox & Sencha TouchSencha
 
Sencha Touch Workshop
Sencha Touch WorkshopSencha Touch Workshop
Sencha Touch WorkshopDavid Kaneda
 
Delivering a Responsive UI
Delivering a Responsive UIDelivering a Responsive UI
Delivering a Responsive UIRebecca Murphey
 

Similar to The Tech Side of Project Argo (20)

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

Recently uploaded

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 

Recently uploaded (20)

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 

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