Slide 1

Slide 1 text

Plone and Drupal: CMS Coexistence in Higher Education Calvin Hendryx-Parker CTO June 18th, 2014 #psm14

Slide 2

Slide 2 text

#psm14 And more...

Slide 3

Slide 3 text

#psm14

Slide 4

Slide 4 text

#psm14 Fast forward...

Slide 5

Slide 5 text

#psm14 Newly spawned websites...

Slide 6

Slide 6 text

#psm14 Built on various CMS...

Slide 7

Slide 7 text

#psm14 March 2014 Data 69% COEXISTENCE

Slide 8

Slide 8 text

#psm14 How do you control web branding, content & infrastructure? Source: http://www.jaquesamerica.com

Slide 9

Slide 9 text

#psm14 Consolidation may be very tempting... Source: http://www.jaquesamerica.com

Slide 10

Slide 10 text

#psm14 Consolidation

Slide 11

Slide 11 text

#psm14 Cons... • Expensive: • CMS Evaluation • Migration • Bit Rot • Training • Demotivating • Polarizing Credits: http://ekladata.com

Slide 12

Slide 12 text

#psm14 There is another option...

Slide 13

Slide 13 text

#psm14 Integration

Slide 14

Slide 14 text

#psm14 UCLA - Integration http://www.rosebowlstadium.com/teams/detail/ucla

Slide 15

Slide 15 text

#psm14 • PushHub Implementation: • Pyramid with ZODB • Redis • Feedparser • Solr What is PushHub?

Slide 16

Slide 16 text

#psm14 Standards

Slide 17

Slide 17 text

5/15/14 Webinar PHP I can’t believe I’m about to do this

Slide 18

Slide 18 text

#psm14 /** * Implements hook_node_insert(). */ function pushhub_node_insert($node) { if ($node->status && $node->promote) { pushhub_notify(array($node->nid), 'shared.xml'); } }

Slide 19

Slide 19 text

#psm14 /** * Put stuff in the queue */ function pushhub_notify($nids, $topic='shared.xml', $timeout=60){ $hub_url = variable_get('pushhub_huburl', 'http://example.com/hub'); Resque::setBackend('localhost:6379'); $headers = array('Content-Type' => 'application/x-www-form-urlencoded'); $topic_url = url("pushhub/" . $topic, array('absolute' => TRUE)); $payload = array('hub.mode' => 'publish', 'hub.url' => $topic_url); $hub_endpoint = $hub_url . "/publish"; # Add the job to the queue Resque::enqueue('default', 'Post', array($hub_endpoint, $payload, $headers, $timeout)); }

Slide 20

Slide 20 text

#psm14 class Post { public function perform() { $endpoint_url = $this->args[0]; $payload = $this->args[1]; $headers = $this->args[2]; $timeout = $this->args[3]; $request = Requests::post($endpoint_url, $headers, $payload, array('timeout' => $timeout)); } }

Slide 21

Slide 21 text

#psm14 import requests ! ! def post(endpoint, payload, headers, timeout=60): response = requests.post( endpoint, data=payload, headers=headers, timeout=timeout) return response.status_code

Slide 22

Slide 22 text

5/15/14 Webinar Demo

Slide 23

Slide 23 text

Check out sixfeetup.com/pushhub

Slide 24

Slide 24 text

Check out sixfeetup.com/pushhub

Slide 25

Slide 25 text

Check out sixfeetup.com/pushhub

Slide 26

Slide 26 text

Check out sixfeetup.com/pushhub

Slide 27

Slide 27 text

Check out sixfeetup.com/pushhub

Slide 28

Slide 28 text

Check out sixfeetup.com/pushhub

Slide 29

Slide 29 text

Check out sixfeetup.com/pushhub

Slide 30

Slide 30 text

Check out sixfeetup.com/pushhub

Slide 31

Slide 31 text

Check out sixfeetup.com/pushhub

Slide 32

Slide 32 text

#psm14 Learn More Download case studies at sixfeetup.com Talk to Sixies: Calvin Carol

Slide 33

Slide 33 text

Check out sixfeetup.com/pushhub