SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
Building a Web Application to Monitor PubMed
Retraction Notices
Neil Saunders
CSIRO Mathematics, Informatics and Statistics
Building E6B, Macquarie University Campus
North Ryde

December 1, 2011
Retraction Watch
Project Aims

Monitor PubMed for retractions
Retrieve retraction data and store locally for analysis
Develop web application to display retraction data
PubMed - advanced search, RSS and send-to-file
Updates in Google Reader
PubMed - MeSH
PubMed - EUtils

http://www.ncbi.nlm.nih.gov/books/NBK25501/
EInfo example script

#!/usr/bin/ruby
require ’rubygems’
require ’bio’
require ’hpricot’
require ’open-uri’
Bio::NCBI.default_email = "me@me.com"
ncbi = Bio::NCBI::REST.new
url = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/einfo.fcgi?db="
ncbi.einfo.each do |db|
puts "Processing #{db}..."
File.open("#{db}.txt", "w") do |f|
doc = Hpricot(open("#{url + db}"))
(doc/’//fieldlist/field’).each do |field|
name = (field/’/name’).inner_html
fullname = (field/’/fullname’).inner_html
description = (field/’description’).inner_html
f.write("#{name},#{fullname},#{description}n")
end
end
end
EInfo script - output

ALL,All Fields,All terms from all searchable fields
UID,UID,Unique number assigned to publication
FILT,Filter,Limits the records
TITL,Title,Words in title of publication
WORD,Text Word,Free text associated with publication
MESH,MeSH Terms,Medical Subject Headings assigned to publication
MAJR,MeSH Major Topic,MeSH terms of major importance to publication
AUTH,Author,Author(s) of publication
JOUR,Journal,Journal abbreviation of publication
AFFL,Affiliation,Author’s institutional affiliation and address
...
MongoDB Overview

MongoDB is a so-called “NoSQL” database
Key features:
Document-oriented
Schema-free
Documents stored in collections
http://www.mongodb.org/
Saving to a database collection: ecount

#!/usr/bin/ruby
require "rubygems"
require "bio"
require "mongo"
db = Mongo::Connection.new.db(’pubmed’)
col = db.collection(’ecount’)
Bio::NCBI.default_email = "me@me.com"
ncbi = Bio::NCBI::REST.new
1977.upto(Time.now.year) do |year|
all
= ncbi.esearch_count("#{year}[dp]", {"db" => "pubmed"})
term
= ncbi.esearch_count("Retraction of Publication[ptyp] #{year}[dp]",
{"db" => "pubmed"})
record = {"_id" => year, "year" => year, "total" => all,
"retracted" => term, "updated_at" => Time.now}
col.save(record)
puts "#{year}..."
end
puts "Saved #{col.count} records."
ecount collection

> db.ecount.findOne()
{
"_id" : 1977,
"retracted" : 3,
"updated_at" : ISODate("2011-11-15T03:58:10.729Z"),
"total" : 260517,
"year" : 1977
}
Saving to a database collection: entries

#!/usr/bin/ruby
require "rubygems"
require "mongo"
require "crack"
db = Mongo::Connection.new.db("pubmed")
col = db.collection(’entries’)
col.drop
xmlfile = "#{ENV[’HOME’]}/Dropbox/projects/pubmed/retractions/data/retract.xml"
xml
= Crack::XML.parse(File.read(xmlfile))
xml[’PubmedArticleSet’][’PubmedArticle’].each do |article|
article[’_id’] = article[’MedlineCitation’][’PMID’]
col.save(article)
end
puts "Saved #{col.count} articles."
entries collection
{
"_id" : "22106469",
"PubmedData" : {
"PublicationStatus" : "ppublish",
"ArticleIdList" : {
"ArticleId" : "22106469"
},
"History" : {
"PubMedPubDate" : [
{
"Minute" : "0",
"Month" : "11",
"PubStatus" : "entrez",
"Day" : "23",
"Hour" : "6",
"Year" : "2011"
},
{
"Minute" : "0",
"Month" : "11",
"PubStatus" : "pubmed",
"Day" : "23",
"Hour" : "6",
"Year" : "2011"
},
...
Saving to a database collection: timeline

#!/usr/bin/ruby
require "rubygems"
require "mongo"
require "date"
db
= Mongo::Connection.new.db(’pubmed’)
entries = db.collection(’entries’)
timeline = db.collection(’timeline’)
dates = entries.find.map { |entry| entry[’MedlineCitation’][’DateCreated’] }
dates.map! { |d| Date.parse("#{d[’Year’]}-#{d[’Month’]}-#{d[’Day’]}") }
dates.sort!
data = (dates.first..dates.last).inject(Hash.new(0)) { |h, date| h[date] = 0; h }
dates.each { |date| data[date] += 1}
data = data.sort
data.map! {|e| ["Date.UTC(#{e[0].year},#{e[0].month - 1},#{e[0].day})", e[1]] }
data.each do |date|
timeline.save({"_id" => date[0].gsub(".", "_"), "date" => date[0], "count" => date[1]})
end
puts "Saved #{timeline.count} dates in timeline."
timeline collection

> db.timeline.findOne()
{
"_id" : "Date_UTC(1977,7,12)",
"date" : "Date.UTC(1977,7,12)",
"count" : 1
}
Sinatra: minimal example

require "rubygems"
require "sinatra"
get "/" do
"Hello World"
end
# ruby myapp.rb
# http://localhost:4567
Highcharts: minimal example code

var chart = new Highcharts.Chart({
chart: {
renderTo: ’container’,
defaultSeriesType: ’line’
},
xAxis: {
categories: [’Jan’, ’Feb’, ’Mar’, ’Apr’, ’May’, ’Jun’,
’Jul’, ’Aug’, ’Sep’, ’Oct’, ’Nov’, ’Dec’]
},
series: [{
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0,
135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
}]
});
// <div id="container" style="height: 400px"></div>
Highcharts: minimal example result
Web Application Overview
|---config.ru
|---Gemfile
|---main.rb
|---public
|
|---javascripts
|
|
|---dark-blue.js
|
|
|---dark-green.js
|
|
|---exporting.js
|
|
|---gray.js
|
|
|---grid.js
|
|
|---highcharts.js
|
|
|---jquery-1.4.2.min.js
|
|---stylesheets
|
|---main.css
|---Rakefile
|---statistics.rb
|---views
|---about.haml
|---byyear.haml
|---date.haml
|---error.haml
|---index.haml
|---journal.haml
|---journals.haml
|---layout.haml
|---test.haml
|---total.haml
Sinatra Application Code - main.rb

# main.rb
configure do
# a bunch of config stuff goes here
# DB = connection to MongoDB database
# timeline
timeline = DB.collection(’timeline’)
set :data, timeline.find.to_a.map { |e| [e[’date’], e[’count’]] }
end
# views
get "/" do
haml :index
end
Sinatra Views - index.haml
%h3 PubMed Retraction Notices - Timeline
%p Last update: #{options.updated_at}
%div#container(style="margin-left: auto; margin-right: auto; width: 800px;")
:javascript
$(function () {
new Highcharts.Chart({
chart: {
renderTo: ’container’,
defaultSeriesType: ’area’,
width: 800,
height: 600,
zoomType: ’x’,
marginTop: 80
},
legend: { enabled: false },
title: { text: ’Retractions by date’ },
xAxis: { type: ’datetime’},
yAxis: { title:
{ text: ’Retractions’ }
},
series: [{
data: #{options.data.inspect.gsub(/"/,"")}
}],
// more stuff goes here...
});
});
Deployment: Heroku + MongoHQ
Heroku.com - free application hosting (for small apps)

Almost as simple as:
$ git remote add heroku git@heroku.com:appname.git
$ git push heroku master
MongoHQ.com - free MongoDB database hosting (up to 16 MB)
“Final” product

Application - http://pmretract.heroku.com
Code - http://github.com/neilfws/PubMed

Weitere ähnliche Inhalte

Was ist angesagt?

MongoDB: Intro & Application for Big Data
MongoDB: Intro & Application  for Big DataMongoDB: Intro & Application  for Big Data
MongoDB: Intro & Application for Big DataTakahiro Inoue
 
The Aggregation Framework
The Aggregation FrameworkThe Aggregation Framework
The Aggregation FrameworkMongoDB
 
Agg framework selectgroup feb2015 v2
Agg framework selectgroup feb2015 v2Agg framework selectgroup feb2015 v2
Agg framework selectgroup feb2015 v2MongoDB
 
Analytics with MongoDB Aggregation Framework and Hadoop Connector
Analytics with MongoDB Aggregation Framework and Hadoop ConnectorAnalytics with MongoDB Aggregation Framework and Hadoop Connector
Analytics with MongoDB Aggregation Framework and Hadoop ConnectorHenrik Ingo
 
The Aggregation Framework
The Aggregation FrameworkThe Aggregation Framework
The Aggregation FrameworkMongoDB
 
MongoDB Aggregation
MongoDB Aggregation MongoDB Aggregation
MongoDB Aggregation Amit Ghosh
 
Webinar: Exploring the Aggregation Framework
Webinar: Exploring the Aggregation FrameworkWebinar: Exploring the Aggregation Framework
Webinar: Exploring the Aggregation FrameworkMongoDB
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation FrameworkTyler Brock
 
Extending Slate Queries & Reports with JSON & JQUERY
Extending Slate Queries & Reports with JSON & JQUERYExtending Slate Queries & Reports with JSON & JQUERY
Extending Slate Queries & Reports with JSON & JQUERYJonathan Wehner
 
Operational Intelligence with MongoDB Webinar
Operational Intelligence with MongoDB WebinarOperational Intelligence with MongoDB Webinar
Operational Intelligence with MongoDB WebinarMongoDB
 
Mongodb Aggregation Pipeline
Mongodb Aggregation PipelineMongodb Aggregation Pipeline
Mongodb Aggregation Pipelinezahid-mian
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBNosh Petigara
 
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...MongoDB
 
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...MongoDB
 
Aggregation Framework
Aggregation FrameworkAggregation Framework
Aggregation FrameworkMongoDB
 
Aggregation Framework MongoDB Days Munich
Aggregation Framework MongoDB Days MunichAggregation Framework MongoDB Days Munich
Aggregation Framework MongoDB Days MunichNorberto Leite
 

Was ist angesagt? (20)

MongoDB: Intro & Application for Big Data
MongoDB: Intro & Application  for Big DataMongoDB: Intro & Application  for Big Data
MongoDB: Intro & Application for Big Data
 
The Aggregation Framework
The Aggregation FrameworkThe Aggregation Framework
The Aggregation Framework
 
Agg framework selectgroup feb2015 v2
Agg framework selectgroup feb2015 v2Agg framework selectgroup feb2015 v2
Agg framework selectgroup feb2015 v2
 
Analytics with MongoDB Aggregation Framework and Hadoop Connector
Analytics with MongoDB Aggregation Framework and Hadoop ConnectorAnalytics with MongoDB Aggregation Framework and Hadoop Connector
Analytics with MongoDB Aggregation Framework and Hadoop Connector
 
Mongo db dla administratora
Mongo db dla administratoraMongo db dla administratora
Mongo db dla administratora
 
The Aggregation Framework
The Aggregation FrameworkThe Aggregation Framework
The Aggregation Framework
 
MongoDB Aggregation
MongoDB Aggregation MongoDB Aggregation
MongoDB Aggregation
 
Webinar: Exploring the Aggregation Framework
Webinar: Exploring the Aggregation FrameworkWebinar: Exploring the Aggregation Framework
Webinar: Exploring the Aggregation Framework
 
MongoDB at GUL
MongoDB at GULMongoDB at GUL
MongoDB at GUL
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation Framework
 
Extending Slate Queries & Reports with JSON & JQUERY
Extending Slate Queries & Reports with JSON & JQUERYExtending Slate Queries & Reports with JSON & JQUERY
Extending Slate Queries & Reports with JSON & JQUERY
 
Operational Intelligence with MongoDB Webinar
Operational Intelligence with MongoDB WebinarOperational Intelligence with MongoDB Webinar
Operational Intelligence with MongoDB Webinar
 
Mongodb Aggregation Pipeline
Mongodb Aggregation PipelineMongodb Aggregation Pipeline
Mongodb Aggregation Pipeline
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...
 
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...
 
Moar tools for asynchrony!
Moar tools for asynchrony!Moar tools for asynchrony!
Moar tools for asynchrony!
 
Aggregation Framework
Aggregation FrameworkAggregation Framework
Aggregation Framework
 
Aggregation Framework MongoDB Days Munich
Aggregation Framework MongoDB Days MunichAggregation Framework MongoDB Days Munich
Aggregation Framework MongoDB Days Munich
 
hySON
hySONhySON
hySON
 

Andere mochten auch

EZZAT SHAHEEN CV.compressed
EZZAT SHAHEEN  CV.compressedEZZAT SHAHEEN  CV.compressed
EZZAT SHAHEEN CV.compressedEzzat Aljourdi
 
Building Skills to Monitor & Evaluate Performance & Outcomes
Building Skills to Monitor & Evaluate Performance & Outcomes Building Skills to Monitor & Evaluate Performance & Outcomes
Building Skills to Monitor & Evaluate Performance & Outcomes Lauren-Glenn Davitian
 
Webinar:Building an Agile Enterprise with Business Activity Monitor
Webinar:Building an Agile Enterprise with Business Activity Monitor Webinar:Building an Agile Enterprise with Business Activity Monitor
Webinar:Building an Agile Enterprise with Business Activity Monitor WSO2
 
A challenging job you
A challenging job youA challenging job you
A challenging job youDon Bury
 
What we learned building Campaign Monitor
What we learned building Campaign MonitorWhat we learned building Campaign Monitor
What we learned building Campaign MonitorWeb Directions
 
Building an Internet Connectivity Monitor
Building an Internet Connectivity MonitorBuilding an Internet Connectivity Monitor
Building an Internet Connectivity Monitoradrianommarques
 
Best Practices in Real-Time Energy Monitoring
Best Practices in Real-Time Energy MonitoringBest Practices in Real-Time Energy Monitoring
Best Practices in Real-Time Energy MonitoringLucid
 
Self-renewal: A Prototype Design for Urban-village Housing
Self-renewal: A Prototype Design for Urban-village HousingSelf-renewal: A Prototype Design for Urban-village Housing
Self-renewal: A Prototype Design for Urban-village HousingXinmin Zhuang
 
Building Enterprise Level End-To-End Monitor System with Open Source Solution...
Building Enterprise Level End-To-End Monitor System with Open Source Solution...Building Enterprise Level End-To-End Monitor System with Open Source Solution...
Building Enterprise Level End-To-End Monitor System with Open Source Solution...LivePerson
 

Andere mochten auch (12)

EZZAT SHAHEEN CV.compressed
EZZAT SHAHEEN  CV.compressedEZZAT SHAHEEN  CV.compressed
EZZAT SHAHEEN CV.compressed
 
Building Skills to Monitor & Evaluate Performance & Outcomes
Building Skills to Monitor & Evaluate Performance & Outcomes Building Skills to Monitor & Evaluate Performance & Outcomes
Building Skills to Monitor & Evaluate Performance & Outcomes
 
Webinar:Building an Agile Enterprise with Business Activity Monitor
Webinar:Building an Agile Enterprise with Business Activity Monitor Webinar:Building an Agile Enterprise with Business Activity Monitor
Webinar:Building an Agile Enterprise with Business Activity Monitor
 
A challenging job you
A challenging job youA challenging job you
A challenging job you
 
Amera Engineering Services Presentations
Amera Engineering Services PresentationsAmera Engineering Services Presentations
Amera Engineering Services Presentations
 
What we learned building Campaign Monitor
What we learned building Campaign MonitorWhat we learned building Campaign Monitor
What we learned building Campaign Monitor
 
Building an Internet Connectivity Monitor
Building an Internet Connectivity MonitorBuilding an Internet Connectivity Monitor
Building an Internet Connectivity Monitor
 
Best Practices in Real-Time Energy Monitoring
Best Practices in Real-Time Energy MonitoringBest Practices in Real-Time Energy Monitoring
Best Practices in Real-Time Energy Monitoring
 
Construction Supervising Site Engineer - Duties & Responsibilities
Construction Supervising Site Engineer - Duties & ResponsibilitiesConstruction Supervising Site Engineer - Duties & Responsibilities
Construction Supervising Site Engineer - Duties & Responsibilities
 
Self-renewal: A Prototype Design for Urban-village Housing
Self-renewal: A Prototype Design for Urban-village HousingSelf-renewal: A Prototype Design for Urban-village Housing
Self-renewal: A Prototype Design for Urban-village Housing
 
Building Enterprise Level End-To-End Monitor System with Open Source Solution...
Building Enterprise Level End-To-End Monitor System with Open Source Solution...Building Enterprise Level End-To-End Monitor System with Open Source Solution...
Building Enterprise Level End-To-End Monitor System with Open Source Solution...
 
Success is Broken
Success is BrokenSuccess is Broken
Success is Broken
 

Ähnlich wie Building A Web Application To Monitor PubMed Retraction Notices

Getting Started with MongoDB: 4 Application Designs
Getting Started with MongoDB: 4 Application DesignsGetting Started with MongoDB: 4 Application Designs
Getting Started with MongoDB: 4 Application DesignsDATAVERSITY
 
Practical JSON in MySQL 5.7 and Beyond
Practical JSON in MySQL 5.7 and BeyondPractical JSON in MySQL 5.7 and Beyond
Practical JSON in MySQL 5.7 and BeyondIke Walker
 
[Nuxeo World 2013] OPENING KEYNOTE - ERIC BARROCA, NUXEO CEO
[Nuxeo World 2013] OPENING KEYNOTE - ERIC BARROCA, NUXEO CEO[Nuxeo World 2013] OPENING KEYNOTE - ERIC BARROCA, NUXEO CEO
[Nuxeo World 2013] OPENING KEYNOTE - ERIC BARROCA, NUXEO CEONuxeo
 
Marc s01 e02-crud-database
Marc s01 e02-crud-databaseMarc s01 e02-crud-database
Marc s01 e02-crud-databaseMongoDB
 
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...MongoDB
 
Webinar: Building Your First Application with MongoDB
Webinar: Building Your First Application with MongoDBWebinar: Building Your First Application with MongoDB
Webinar: Building Your First Application with MongoDBMongoDB
 
Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...
Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...
Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...MongoDB
 
Conexión de MongoDB con Hadoop - Luis Alberto Giménez - CAPSiDE #DevOSSAzureDays
Conexión de MongoDB con Hadoop - Luis Alberto Giménez - CAPSiDE #DevOSSAzureDaysConexión de MongoDB con Hadoop - Luis Alberto Giménez - CAPSiDE #DevOSSAzureDays
Conexión de MongoDB con Hadoop - Luis Alberto Giménez - CAPSiDE #DevOSSAzureDaysCAPSiDE
 
Mongodb intro
Mongodb introMongodb intro
Mongodb introchristkv
 
9b. Document-Oriented Databases lab
9b. Document-Oriented Databases lab9b. Document-Oriented Databases lab
9b. Document-Oriented Databases labFabio Fumarola
 
Data science at the command line
Data science at the command lineData science at the command line
Data science at the command lineSharat Chikkerur
 
1403 app dev series - session 5 - analytics
1403   app dev series - session 5 - analytics1403   app dev series - session 5 - analytics
1403 app dev series - session 5 - analyticsMongoDB
 
Conceptos básicos. Seminario web 2: Su primera aplicación MongoDB
 Conceptos básicos. Seminario web 2: Su primera aplicación MongoDB Conceptos básicos. Seminario web 2: Su primera aplicación MongoDB
Conceptos básicos. Seminario web 2: Su primera aplicación MongoDBMongoDB
 
Implementing and Visualizing Clickstream data with MongoDB
Implementing and Visualizing Clickstream data with MongoDBImplementing and Visualizing Clickstream data with MongoDB
Implementing and Visualizing Clickstream data with MongoDBMongoDB
 
Eat whatever you can with PyBabe
Eat whatever you can with PyBabeEat whatever you can with PyBabe
Eat whatever you can with PyBabeDataiku
 
Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017Matthew Groves
 

Ähnlich wie Building A Web Application To Monitor PubMed Retraction Notices (20)

An introduction to MongoDB
An introduction to MongoDBAn introduction to MongoDB
An introduction to MongoDB
 
Getting Started with MongoDB: 4 Application Designs
Getting Started with MongoDB: 4 Application DesignsGetting Started with MongoDB: 4 Application Designs
Getting Started with MongoDB: 4 Application Designs
 
Practical JSON in MySQL 5.7 and Beyond
Practical JSON in MySQL 5.7 and BeyondPractical JSON in MySQL 5.7 and Beyond
Practical JSON in MySQL 5.7 and Beyond
 
[Nuxeo World 2013] OPENING KEYNOTE - ERIC BARROCA, NUXEO CEO
[Nuxeo World 2013] OPENING KEYNOTE - ERIC BARROCA, NUXEO CEO[Nuxeo World 2013] OPENING KEYNOTE - ERIC BARROCA, NUXEO CEO
[Nuxeo World 2013] OPENING KEYNOTE - ERIC BARROCA, NUXEO CEO
 
Marc s01 e02-crud-database
Marc s01 e02-crud-databaseMarc s01 e02-crud-database
Marc s01 e02-crud-database
 
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
 
Webinar: Building Your First Application with MongoDB
Webinar: Building Your First Application with MongoDBWebinar: Building Your First Application with MongoDB
Webinar: Building Your First Application with MongoDB
 
Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...
Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...
Lightning Talk: Why and How to Integrate MongoDB and NoSQL into Hadoop Big Da...
 
Analyse Yourself
Analyse YourselfAnalyse Yourself
Analyse Yourself
 
Conexión de MongoDB con Hadoop - Luis Alberto Giménez - CAPSiDE #DevOSSAzureDays
Conexión de MongoDB con Hadoop - Luis Alberto Giménez - CAPSiDE #DevOSSAzureDaysConexión de MongoDB con Hadoop - Luis Alberto Giménez - CAPSiDE #DevOSSAzureDays
Conexión de MongoDB con Hadoop - Luis Alberto Giménez - CAPSiDE #DevOSSAzureDays
 
LibreCat::Catmandu
LibreCat::CatmanduLibreCat::Catmandu
LibreCat::Catmandu
 
Mongodb intro
Mongodb introMongodb intro
Mongodb intro
 
9b. Document-Oriented Databases lab
9b. Document-Oriented Databases lab9b. Document-Oriented Databases lab
9b. Document-Oriented Databases lab
 
ACM BPM and elasticsearch AMIS25
ACM BPM and elasticsearch AMIS25ACM BPM and elasticsearch AMIS25
ACM BPM and elasticsearch AMIS25
 
Data science at the command line
Data science at the command lineData science at the command line
Data science at the command line
 
1403 app dev series - session 5 - analytics
1403   app dev series - session 5 - analytics1403   app dev series - session 5 - analytics
1403 app dev series - session 5 - analytics
 
Conceptos básicos. Seminario web 2: Su primera aplicación MongoDB
 Conceptos básicos. Seminario web 2: Su primera aplicación MongoDB Conceptos básicos. Seminario web 2: Su primera aplicación MongoDB
Conceptos básicos. Seminario web 2: Su primera aplicación MongoDB
 
Implementing and Visualizing Clickstream data with MongoDB
Implementing and Visualizing Clickstream data with MongoDBImplementing and Visualizing Clickstream data with MongoDB
Implementing and Visualizing Clickstream data with MongoDB
 
Eat whatever you can with PyBabe
Eat whatever you can with PyBabeEat whatever you can with PyBabe
Eat whatever you can with PyBabe
 
Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017
 

Mehr von Neil Saunders

Online bioinformatics forums: why do we keep asking the same questions?
Online bioinformatics forums: why do we keep asking the same questions?Online bioinformatics forums: why do we keep asking the same questions?
Online bioinformatics forums: why do we keep asking the same questions?Neil Saunders
 
Should I be dead? a very personal genomics
Should I be dead? a very personal genomicsShould I be dead? a very personal genomics
Should I be dead? a very personal genomicsNeil Saunders
 
Learning from complete strangers: social networking for bioinformaticians
Learning from complete strangers: social networking for bioinformaticiansLearning from complete strangers: social networking for bioinformaticians
Learning from complete strangers: social networking for bioinformaticiansNeil Saunders
 
SQL, noSQL or no database at all? Are databases still a core skill?
SQL, noSQL or no database at all? Are databases still a core skill?SQL, noSQL or no database at all? Are databases still a core skill?
SQL, noSQL or no database at all? Are databases still a core skill?Neil Saunders
 
Data Integration: What I Haven't Yet Achieved
Data Integration: What I Haven't Yet AchievedData Integration: What I Haven't Yet Achieved
Data Integration: What I Haven't Yet AchievedNeil Saunders
 
Version Control in Bioinformatics: Our Experience Using Git
Version Control in Bioinformatics: Our Experience Using GitVersion Control in Bioinformatics: Our Experience Using Git
Version Control in Bioinformatics: Our Experience Using GitNeil Saunders
 
What can science networking online do for you
What can science networking online do for youWhat can science networking online do for you
What can science networking online do for youNeil Saunders
 
Using structural information to predict protein-protein interaction and enyzm...
Using structural information to predict protein-protein interaction and enyzm...Using structural information to predict protein-protein interaction and enyzm...
Using structural information to predict protein-protein interaction and enyzm...Neil Saunders
 
Predikin and PredikinDB: tools to predict protein kinase peptide specificity
Predikin and PredikinDB:  tools to predict protein kinase peptide specificityPredikin and PredikinDB:  tools to predict protein kinase peptide specificity
Predikin and PredikinDB: tools to predict protein kinase peptide specificityNeil Saunders
 
The Viking labelled release experiment: life on Mars?
The Viking labelled release experiment:  life on Mars?The Viking labelled release experiment:  life on Mars?
The Viking labelled release experiment: life on Mars?Neil Saunders
 
Protein function and bioinformatics
Protein function and bioinformaticsProtein function and bioinformatics
Protein function and bioinformaticsNeil Saunders
 
Genomics of cold-adapted microorganisms
Genomics of cold-adapted microorganismsGenomics of cold-adapted microorganisms
Genomics of cold-adapted microorganismsNeil Saunders
 

Mehr von Neil Saunders (12)

Online bioinformatics forums: why do we keep asking the same questions?
Online bioinformatics forums: why do we keep asking the same questions?Online bioinformatics forums: why do we keep asking the same questions?
Online bioinformatics forums: why do we keep asking the same questions?
 
Should I be dead? a very personal genomics
Should I be dead? a very personal genomicsShould I be dead? a very personal genomics
Should I be dead? a very personal genomics
 
Learning from complete strangers: social networking for bioinformaticians
Learning from complete strangers: social networking for bioinformaticiansLearning from complete strangers: social networking for bioinformaticians
Learning from complete strangers: social networking for bioinformaticians
 
SQL, noSQL or no database at all? Are databases still a core skill?
SQL, noSQL or no database at all? Are databases still a core skill?SQL, noSQL or no database at all? Are databases still a core skill?
SQL, noSQL or no database at all? Are databases still a core skill?
 
Data Integration: What I Haven't Yet Achieved
Data Integration: What I Haven't Yet AchievedData Integration: What I Haven't Yet Achieved
Data Integration: What I Haven't Yet Achieved
 
Version Control in Bioinformatics: Our Experience Using Git
Version Control in Bioinformatics: Our Experience Using GitVersion Control in Bioinformatics: Our Experience Using Git
Version Control in Bioinformatics: Our Experience Using Git
 
What can science networking online do for you
What can science networking online do for youWhat can science networking online do for you
What can science networking online do for you
 
Using structural information to predict protein-protein interaction and enyzm...
Using structural information to predict protein-protein interaction and enyzm...Using structural information to predict protein-protein interaction and enyzm...
Using structural information to predict protein-protein interaction and enyzm...
 
Predikin and PredikinDB: tools to predict protein kinase peptide specificity
Predikin and PredikinDB:  tools to predict protein kinase peptide specificityPredikin and PredikinDB:  tools to predict protein kinase peptide specificity
Predikin and PredikinDB: tools to predict protein kinase peptide specificity
 
The Viking labelled release experiment: life on Mars?
The Viking labelled release experiment:  life on Mars?The Viking labelled release experiment:  life on Mars?
The Viking labelled release experiment: life on Mars?
 
Protein function and bioinformatics
Protein function and bioinformaticsProtein function and bioinformatics
Protein function and bioinformatics
 
Genomics of cold-adapted microorganisms
Genomics of cold-adapted microorganismsGenomics of cold-adapted microorganisms
Genomics of cold-adapted microorganisms
 

Kürzlich hochgeladen

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 

Kürzlich hochgeladen (20)

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 

Building A Web Application To Monitor PubMed Retraction Notices

  • 1. Building a Web Application to Monitor PubMed Retraction Notices Neil Saunders CSIRO Mathematics, Informatics and Statistics Building E6B, Macquarie University Campus North Ryde December 1, 2011
  • 3. Project Aims Monitor PubMed for retractions Retrieve retraction data and store locally for analysis Develop web application to display retraction data
  • 4. PubMed - advanced search, RSS and send-to-file
  • 8. EInfo example script #!/usr/bin/ruby require ’rubygems’ require ’bio’ require ’hpricot’ require ’open-uri’ Bio::NCBI.default_email = "me@me.com" ncbi = Bio::NCBI::REST.new url = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/einfo.fcgi?db=" ncbi.einfo.each do |db| puts "Processing #{db}..." File.open("#{db}.txt", "w") do |f| doc = Hpricot(open("#{url + db}")) (doc/’//fieldlist/field’).each do |field| name = (field/’/name’).inner_html fullname = (field/’/fullname’).inner_html description = (field/’description’).inner_html f.write("#{name},#{fullname},#{description}n") end end end
  • 9. EInfo script - output ALL,All Fields,All terms from all searchable fields UID,UID,Unique number assigned to publication FILT,Filter,Limits the records TITL,Title,Words in title of publication WORD,Text Word,Free text associated with publication MESH,MeSH Terms,Medical Subject Headings assigned to publication MAJR,MeSH Major Topic,MeSH terms of major importance to publication AUTH,Author,Author(s) of publication JOUR,Journal,Journal abbreviation of publication AFFL,Affiliation,Author’s institutional affiliation and address ...
  • 10. MongoDB Overview MongoDB is a so-called “NoSQL” database Key features: Document-oriented Schema-free Documents stored in collections http://www.mongodb.org/
  • 11. Saving to a database collection: ecount #!/usr/bin/ruby require "rubygems" require "bio" require "mongo" db = Mongo::Connection.new.db(’pubmed’) col = db.collection(’ecount’) Bio::NCBI.default_email = "me@me.com" ncbi = Bio::NCBI::REST.new 1977.upto(Time.now.year) do |year| all = ncbi.esearch_count("#{year}[dp]", {"db" => "pubmed"}) term = ncbi.esearch_count("Retraction of Publication[ptyp] #{year}[dp]", {"db" => "pubmed"}) record = {"_id" => year, "year" => year, "total" => all, "retracted" => term, "updated_at" => Time.now} col.save(record) puts "#{year}..." end puts "Saved #{col.count} records."
  • 12. ecount collection > db.ecount.findOne() { "_id" : 1977, "retracted" : 3, "updated_at" : ISODate("2011-11-15T03:58:10.729Z"), "total" : 260517, "year" : 1977 }
  • 13. Saving to a database collection: entries #!/usr/bin/ruby require "rubygems" require "mongo" require "crack" db = Mongo::Connection.new.db("pubmed") col = db.collection(’entries’) col.drop xmlfile = "#{ENV[’HOME’]}/Dropbox/projects/pubmed/retractions/data/retract.xml" xml = Crack::XML.parse(File.read(xmlfile)) xml[’PubmedArticleSet’][’PubmedArticle’].each do |article| article[’_id’] = article[’MedlineCitation’][’PMID’] col.save(article) end puts "Saved #{col.count} articles."
  • 14. entries collection { "_id" : "22106469", "PubmedData" : { "PublicationStatus" : "ppublish", "ArticleIdList" : { "ArticleId" : "22106469" }, "History" : { "PubMedPubDate" : [ { "Minute" : "0", "Month" : "11", "PubStatus" : "entrez", "Day" : "23", "Hour" : "6", "Year" : "2011" }, { "Minute" : "0", "Month" : "11", "PubStatus" : "pubmed", "Day" : "23", "Hour" : "6", "Year" : "2011" }, ...
  • 15. Saving to a database collection: timeline #!/usr/bin/ruby require "rubygems" require "mongo" require "date" db = Mongo::Connection.new.db(’pubmed’) entries = db.collection(’entries’) timeline = db.collection(’timeline’) dates = entries.find.map { |entry| entry[’MedlineCitation’][’DateCreated’] } dates.map! { |d| Date.parse("#{d[’Year’]}-#{d[’Month’]}-#{d[’Day’]}") } dates.sort! data = (dates.first..dates.last).inject(Hash.new(0)) { |h, date| h[date] = 0; h } dates.each { |date| data[date] += 1} data = data.sort data.map! {|e| ["Date.UTC(#{e[0].year},#{e[0].month - 1},#{e[0].day})", e[1]] } data.each do |date| timeline.save({"_id" => date[0].gsub(".", "_"), "date" => date[0], "count" => date[1]}) end puts "Saved #{timeline.count} dates in timeline."
  • 16. timeline collection > db.timeline.findOne() { "_id" : "Date_UTC(1977,7,12)", "date" : "Date.UTC(1977,7,12)", "count" : 1 }
  • 17. Sinatra: minimal example require "rubygems" require "sinatra" get "/" do "Hello World" end # ruby myapp.rb # http://localhost:4567
  • 18. Highcharts: minimal example code var chart = new Highcharts.Chart({ chart: { renderTo: ’container’, defaultSeriesType: ’line’ }, xAxis: { categories: [’Jan’, ’Feb’, ’Mar’, ’Apr’, ’May’, ’Jun’, ’Jul’, ’Aug’, ’Sep’, ’Oct’, ’Nov’, ’Dec’] }, series: [{ data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4] }] }); // <div id="container" style="height: 400px"></div>
  • 21. Sinatra Application Code - main.rb # main.rb configure do # a bunch of config stuff goes here # DB = connection to MongoDB database # timeline timeline = DB.collection(’timeline’) set :data, timeline.find.to_a.map { |e| [e[’date’], e[’count’]] } end # views get "/" do haml :index end
  • 22. Sinatra Views - index.haml %h3 PubMed Retraction Notices - Timeline %p Last update: #{options.updated_at} %div#container(style="margin-left: auto; margin-right: auto; width: 800px;") :javascript $(function () { new Highcharts.Chart({ chart: { renderTo: ’container’, defaultSeriesType: ’area’, width: 800, height: 600, zoomType: ’x’, marginTop: 80 }, legend: { enabled: false }, title: { text: ’Retractions by date’ }, xAxis: { type: ’datetime’}, yAxis: { title: { text: ’Retractions’ } }, series: [{ data: #{options.data.inspect.gsub(/"/,"")} }], // more stuff goes here... }); });
  • 23. Deployment: Heroku + MongoHQ Heroku.com - free application hosting (for small apps) Almost as simple as: $ git remote add heroku git@heroku.com:appname.git $ git push heroku master MongoHQ.com - free MongoDB database hosting (up to 16 MB)
  • 24. “Final” product Application - http://pmretract.heroku.com Code - http://github.com/neilfws/PubMed