Merge branch 'master' of gitlab.odin.cse.buffalo.edu:odin-lab/Website
This commit is contained in:
commit
12f98e057c
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -3,3 +3,5 @@ build
|
||||||
*.aux
|
*.aux
|
||||||
*.log
|
*.log
|
||||||
artifacts
|
artifacts
|
||||||
|
*.pdf
|
||||||
|
*.tex
|
29
Rakefile
29
Rakefile
|
@ -149,3 +149,32 @@ directory "build/artifacts"
|
||||||
task :deploy => [:documents,:odin_lab,"build/artifacts"] do
|
task :deploy => [:documents,:odin_lab,"build/artifacts"] do
|
||||||
system("cp -r artifacts/*.{pdf,json} build/artifacts/")
|
system("cp -r artifacts/*.{pdf,json} build/artifacts/")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
###################### Specialized Stuff for Individual Use ######################
|
||||||
|
|
||||||
|
file "okennedy_short.tex" => (["db/cv/okennedy.json", "lib/cv.rb", "Rakefile"]+Dir["db/cv/okennedy/**"]) do
|
||||||
|
File.open("okennedy_short.tex", "w+") do |fh|
|
||||||
|
CV.make("okennedy", fh,
|
||||||
|
title: "Recent Activities",
|
||||||
|
since: {
|
||||||
|
education: 2008,
|
||||||
|
reviewer: 2015,
|
||||||
|
general_service: 2015,
|
||||||
|
volunteering: 2015,
|
||||||
|
talks: 2015,
|
||||||
|
courses: 2015,
|
||||||
|
publications: 2014
|
||||||
|
},
|
||||||
|
skip: [
|
||||||
|
:employment,
|
||||||
|
:memberships,
|
||||||
|
:dept_service,
|
||||||
|
:tech_reports
|
||||||
|
]
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
file "okennedy_short.pdf" => "okennedy_short.tex" do
|
||||||
|
system("pdflatex okennedy_short.tex")
|
||||||
|
end
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,10 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"honors" : [
|
"honors" : [
|
||||||
"The pVLDB 2012 paper titled \"DBToaster: Higher-order Delta Processing for Dynamic, Frequently Fresh Views\" was accepted to the \"Best of VLDB 2012\" issue of the VLDB Journal"
|
{ "description" :
|
||||||
|
"The pVLDB 2012 paper titled \"DBToaster: Higher-order Delta Processing for Dynamic, Frequently Fresh Views\" was accepted to the \"Best of VLDB 2012\" issue of the VLDB Journal",
|
||||||
|
"year" : 2012
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"reviewer" : [
|
"reviewer" : [
|
||||||
{ "venue" : "VLDBJ", "years" : [ 2013 ] },
|
{ "venue" : "VLDBJ", "years" : [ 2013 ] },
|
||||||
|
@ -165,8 +168,14 @@
|
||||||
{ "code" : "CSE 562",
|
{ "code" : "CSE 562",
|
||||||
"title" : "Graduate Database Systems (planned)",
|
"title" : "Graduate Database Systems (planned)",
|
||||||
"semester" : "Spring 2017" },
|
"semester" : "Spring 2017" },
|
||||||
|
{ "code" : "CSE 199",
|
||||||
|
"title" : "Undergraduate CS Seminar (Recitation)",
|
||||||
|
"semester" : "Fall 2016" },
|
||||||
|
{ "code" : "CSE 705",
|
||||||
|
"title" : "Database Research Seminar",
|
||||||
|
"semester" : "Fall 2016" },
|
||||||
{ "code" : "CSE 662",
|
{ "code" : "CSE 662",
|
||||||
"title" : "Languages and Runtimes for Big Data (planned)",
|
"title" : "Languages and Runtimes for Big Data",
|
||||||
"semester" : "Fall 2016" },
|
"semester" : "Fall 2016" },
|
||||||
{ "code" : "CSE 462",
|
{ "code" : "CSE 462",
|
||||||
"title" : "Undergraduate Database Systems",
|
"title" : "Undergraduate Database Systems",
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
[
|
[
|
||||||
|
{ "talk" : "TBD", "date" : "Oct. 2016",
|
||||||
|
"venue" : "Airbus" },
|
||||||
|
{ "talk" : "TBD", "date" : "Oct. 2016",
|
||||||
|
"venue" : "RIT" },
|
||||||
{ "talk" : "Just-In-Time Data Structures", "date" : "Jun. 2016",
|
{ "talk" : "Just-In-Time Data Structures", "date" : "Jun. 2016",
|
||||||
"venue" : "LogicBlox" },
|
"venue" : "LogicBlox" },
|
||||||
{ "talk" : "Embracing Uncertainty with Mimir", "date" : "May 2016",
|
{ "talk" : "Embracing Uncertainty with Mimir", "date" : "May. 2016",
|
||||||
"venue" : "NYU" },
|
"venue" : "NYU" },
|
||||||
{ "talk" : "Embracing Uncertainty with Mimir", "date" : "Mar. 2016",
|
{ "talk" : "Embracing Uncertainty with Mimir", "date" : "Mar. 2016",
|
||||||
"venue" : "HPE/Vertica" },
|
"venue" : "HPE/Vertica" },
|
||||||
|
|
20
db/lab.json
20
db/lab.json
|
@ -34,11 +34,6 @@
|
||||||
"projects" : ["mimir"],
|
"projects" : ["mimir"],
|
||||||
"ubit" : "poonamku"
|
"ubit" : "poonamku"
|
||||||
},
|
},
|
||||||
"Patrick Coonan" : {
|
|
||||||
"status" : "BS/MS",
|
|
||||||
"projects" : ["insider-threats"],
|
|
||||||
"ubit" : "pcoonan"
|
|
||||||
},
|
|
||||||
"William Spoth" : {
|
"William Spoth" : {
|
||||||
"status" : "PhD",
|
"status" : "PhD",
|
||||||
"projects" : ["mimir"],
|
"projects" : ["mimir"],
|
||||||
|
@ -73,10 +68,6 @@
|
||||||
"advisor" : ["Luke Ziarek", "Geoff Challen"],
|
"advisor" : ["Luke Ziarek", "Geoff Challen"],
|
||||||
"joint_advisor": true
|
"joint_advisor": true
|
||||||
},
|
},
|
||||||
"Michael Kulbacki" : {
|
|
||||||
"status" : "BS",
|
|
||||||
"projects" : ["mimir"]
|
|
||||||
},
|
|
||||||
"Jacob Varghese" : {
|
"Jacob Varghese" : {
|
||||||
"status" : "BS",
|
"status" : "BS",
|
||||||
"projects" : ["mimir"]
|
"projects" : ["mimir"]
|
||||||
|
@ -86,6 +77,17 @@
|
||||||
"projects" : ["mimir"]
|
"projects" : ["mimir"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"temp-leave" : {
|
||||||
|
"Michael Kulbacki" : {
|
||||||
|
"status" : "BS",
|
||||||
|
"projects" : ["mimir"]
|
||||||
|
},
|
||||||
|
"Patrick Coonan" : {
|
||||||
|
"status" : "BS/MS",
|
||||||
|
"projects" : ["insider-threats"],
|
||||||
|
"ubit" : "pcoonan"
|
||||||
|
}
|
||||||
|
},
|
||||||
"collaborators" : [
|
"collaborators" : [
|
||||||
"Lukasz Ziarek",
|
"Lukasz Ziarek",
|
||||||
"Geoff Challen",
|
"Geoff Challen",
|
||||||
|
|
180
lib/cv.rb
180
lib/cv.rb
|
@ -36,14 +36,19 @@ class CV < Latex::Builder
|
||||||
@who = who
|
@who = who
|
||||||
@include_rejected_grants = options.fetch(:include_rejected_grants, false)
|
@include_rejected_grants = options.fetch(:include_rejected_grants, false)
|
||||||
@include_pending_papers = options.fetch(:include_pending_papers, false)
|
@include_pending_papers = options.fetch(:include_pending_papers, false)
|
||||||
|
@title = options.fetch(:title, "Curriculum Vitae")
|
||||||
|
@since = Hash.new { |h,k| if h.has_key? :rest then h[:rest] else 0 end }
|
||||||
|
options[:since].each { |k, v| @since[k] = v } if options.has_key?(:since)
|
||||||
|
@skip = options.fetch(:skip, [])
|
||||||
|
|
||||||
gen
|
gen
|
||||||
end
|
end
|
||||||
|
|
||||||
def CV.make(who, out)
|
def CV.make(who, out, options = {})
|
||||||
CV.new(who, out)
|
CV.new(who, out, options)
|
||||||
end
|
end
|
||||||
|
|
||||||
def my_section(title)
|
def make_section(title)
|
||||||
section!(title)
|
section!(title)
|
||||||
print_direct "~"
|
print_direct "~"
|
||||||
endl("-0.4in")
|
endl("-0.4in")
|
||||||
|
@ -60,6 +65,7 @@ class CV < Latex::Builder
|
||||||
documentclass("11pt", "article")
|
documentclass("11pt", "article")
|
||||||
usepackage "fullpage"
|
usepackage "fullpage"
|
||||||
usepackage "bibentry"
|
usepackage "bibentry"
|
||||||
|
usepackage "enumitem"
|
||||||
|
|
||||||
document do
|
document do
|
||||||
pagestyle "empty"
|
pagestyle "empty"
|
||||||
|
@ -70,23 +76,38 @@ class CV < Latex::Builder
|
||||||
render_contact_details
|
render_contact_details
|
||||||
vspace! "-0.1in"
|
vspace! "-0.1in"
|
||||||
|
|
||||||
render_education
|
render_education unless skip?(:education)
|
||||||
render_employment_history
|
render_employment_history unless skip?(:employment)
|
||||||
render_honors
|
render_honors unless skip?(:honors)
|
||||||
render_professional_activities
|
render_professional_activities unless skip?(:service)
|
||||||
render_invited_talks
|
render_invited_talks unless skip?(:invited_talks)
|
||||||
render_courses_taught
|
render_courses_taught unless skip?(:courses)
|
||||||
render_grant_support
|
render_grant_support unless skip?(:grants)
|
||||||
render_pubs_and_artifacts
|
render_pubs_and_artifacts unless skip?(:pubs)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def filter_records(category, records)
|
||||||
|
records.select { |record|
|
||||||
|
duration_is_since?(record, @since[category])
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def build_filtered_itemize(category, records, *args)
|
||||||
|
args.unshift(filter_records(category, records))
|
||||||
|
build_itemize(*args) { |record| yield record }
|
||||||
|
end
|
||||||
|
|
||||||
|
def skip?(category)
|
||||||
|
@skip.include? category
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
############### HEADER ################
|
############### HEADER ################
|
||||||
|
|
||||||
def render_header
|
def render_header
|
||||||
noindent
|
noindent
|
||||||
textbf { huge; puts "Curriculum Vitae" }
|
textbf { huge; puts @title }
|
||||||
hfill
|
hfill
|
||||||
textbf { huge; puts @data["name"] }
|
textbf { huge; puts @data["name"] }
|
||||||
vspace "0.05in"
|
vspace "0.05in"
|
||||||
|
@ -128,8 +149,8 @@ class CV < Latex::Builder
|
||||||
############### EDUCATION ################
|
############### EDUCATION ################
|
||||||
|
|
||||||
def render_education
|
def render_education
|
||||||
my_section("Education")
|
make_section("Education")
|
||||||
build_itemize(@data["education"]) do |r|
|
build_filtered_itemize(:education, @data["education"], "label=,leftmargin=0mm") do |r|
|
||||||
textit { puts "#{r["degree"]}," }
|
textit { puts "#{r["degree"]}," }
|
||||||
puts "#{r["university"]}, #{r["city"]}"
|
puts "#{r["university"]}, #{r["city"]}"
|
||||||
hfill
|
hfill
|
||||||
|
@ -150,17 +171,9 @@ class CV < Latex::Builder
|
||||||
|
|
||||||
############### EMPLOYMENT HISTORY ################
|
############### EMPLOYMENT HISTORY ################
|
||||||
|
|
||||||
def render_employment_history(args = {})
|
def render_employment_history
|
||||||
employment = @data["employment"];
|
make_section("Employment History")
|
||||||
|
build_filtered_itemize(:employment, @data["employment"]) do |r|
|
||||||
if args.has_key?(:since) then
|
|
||||||
since = args[:since]
|
|
||||||
employment =
|
|
||||||
employment.select { |r| duration_is_since?(r, since) }
|
|
||||||
end
|
|
||||||
|
|
||||||
my_section("Employment History")
|
|
||||||
build_itemize(employment) do |r|
|
|
||||||
puts "#{r["title"]}, #{r["employer"]}"
|
puts "#{r["title"]}, #{r["employer"]}"
|
||||||
hfill
|
hfill
|
||||||
puts duration(r)
|
puts duration(r)
|
||||||
|
@ -170,15 +183,15 @@ class CV < Latex::Builder
|
||||||
############### HONORS ################
|
############### HONORS ################
|
||||||
|
|
||||||
def render_honors
|
def render_honors
|
||||||
my_section("Honors")
|
make_section("Honors")
|
||||||
build_itemize(@data["honors"]) do |r|
|
build_filtered_itemize(:honors, @data["honors"], "label=,leftmargin=0mm") do |r|
|
||||||
puts r
|
puts r["description"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
############### PROFESSIONAL ACTIVITIES ################
|
############### PROFESSIONAL ACTIVITIES ################
|
||||||
|
|
||||||
def render_one_activity_class(data, role_title)
|
def render_one_activity_class(activity_class, data, role_title)
|
||||||
role_title =
|
role_title =
|
||||||
case role_title
|
case role_title
|
||||||
when Proc then role_title
|
when Proc then role_title
|
||||||
|
@ -186,12 +199,12 @@ class CV < Latex::Builder
|
||||||
orig_role_title = role_title
|
orig_role_title = role_title
|
||||||
lambda { |r| r[orig_role_title] }
|
lambda { |r| r[orig_role_title] }
|
||||||
end
|
end
|
||||||
build_itemize(data) do |r|
|
build_filtered_itemize(activity_class, data, "noitemsep,leftmargin=5mm,label=--") do |r|
|
||||||
puts(role_title.call(r))
|
puts(role_title.call(r))
|
||||||
hfill
|
hfill
|
||||||
puts duration(r)
|
puts duration(r)
|
||||||
unless r["roles"].nil?
|
unless r["roles"].nil?
|
||||||
build_itemize(r["roles"]) do |role|
|
build_itemize(r["roles"], "noitemsep") do |role|
|
||||||
puts role["title"]
|
puts role["title"]
|
||||||
hfill
|
hfill
|
||||||
puts duration(role)
|
puts duration(role)
|
||||||
|
@ -201,44 +214,47 @@ class CV < Latex::Builder
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_professional_activities(args = {})
|
def render_professional_activities(args = {})
|
||||||
my_section("Professional Activities")
|
make_section("Professional Activities")
|
||||||
|
|
||||||
|
unless skip? :reviewer
|
||||||
subsection!("Reviewer / Program Comittee Member")
|
subsection!("Reviewer / Program Comittee Member")
|
||||||
render_one_activity_class(@data["reviewer"],
|
render_one_activity_class(:reviewer, @data["reviewer"],
|
||||||
lambda { |r|
|
lambda { |r|
|
||||||
venue = LabMetadata.complete_venue(r)["type"]
|
venue = LabMetadata.complete_venue(r)["type"]
|
||||||
raise "Unknown Venue: #{r}" unless venue;
|
raise "Unknown Venue: #{r}" unless venue;
|
||||||
"#{venue.capitalize}: #{LabMetadata.venue_name(r)}"
|
"#{venue.capitalize}: #{LabMetadata.venue_name(r)}"
|
||||||
})
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
unless skip? :general_service
|
||||||
subsection!("Service")
|
subsection!("Service")
|
||||||
render_one_activity_class(@data["service"]["general"], "description")
|
render_one_activity_class(:general_service, @data["service"]["general"], "description")
|
||||||
|
end
|
||||||
|
|
||||||
|
unless skip? :memberships
|
||||||
subsection!("Professional Memberships")
|
subsection!("Professional Memberships")
|
||||||
render_one_activity_class(@data["memberships"], "org")
|
render_one_activity_class(:memberships, @data["memberships"], "org")
|
||||||
|
end
|
||||||
|
|
||||||
|
unless skip? :volunteering
|
||||||
subsection!("Volunteer Work")
|
subsection!("Volunteer Work")
|
||||||
render_one_activity_class(@data["volunteering"], "org")
|
render_one_activity_class(:volunteering, @data["volunteering"], "org")
|
||||||
|
end
|
||||||
|
|
||||||
|
unless skip? :dept_service
|
||||||
subsection!("Departmental Service")
|
subsection!("Departmental Service")
|
||||||
build_itemize(@data["service"]["dept"]) do |dept|
|
build_itemize(@data["service"]["dept"]) do |dept|
|
||||||
puts dept["org"]
|
puts dept["org"]
|
||||||
render_one_activity_class(dept["service"], "org")
|
render_one_activity_class(:dept_service, dept["service"], "org")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
############### INVITED TALKS ################
|
############### INVITED TALKS ################
|
||||||
|
|
||||||
def render_invited_talks(args = {})
|
def render_invited_talks
|
||||||
talks = @data["talks"]
|
make_section("Invited Talks")
|
||||||
|
build_filtered_itemize(:talks, @data["talks"], "noitemsep,leftmargin=5mm,label=--") do |r|
|
||||||
if args.has_key? :since
|
|
||||||
since = args[:since]
|
|
||||||
talks = talks.select { |r| date_to_time(r["date"]).year >= since }
|
|
||||||
end
|
|
||||||
|
|
||||||
my_section("Invited Talks")
|
|
||||||
build_itemize(talks) do |r|
|
|
||||||
textit { puts r["venue"] }
|
textit { puts r["venue"] }
|
||||||
wrap {
|
wrap {
|
||||||
small
|
small
|
||||||
|
@ -253,13 +269,12 @@ class CV < Latex::Builder
|
||||||
|
|
||||||
############### COURSES ################
|
############### COURSES ################
|
||||||
|
|
||||||
def render_courses_taught(args = {})
|
def render_courses_taught
|
||||||
my_section("Courses")
|
make_section("Courses")
|
||||||
|
|
||||||
courses = @data["courses"]
|
courses = @data["courses"]
|
||||||
|
|
||||||
if args.has_key? :since
|
since = @since[:courses]
|
||||||
since = args[:since]
|
|
||||||
courses = courses.map do |dept|
|
courses = courses.map do |dept|
|
||||||
dept = dept.clone
|
dept = dept.clone
|
||||||
dept["courses"] = dept["courses"].select do |c|
|
dept["courses"] = dept["courses"].select do |c|
|
||||||
|
@ -270,11 +285,10 @@ class CV < Latex::Builder
|
||||||
end
|
end
|
||||||
dept unless dept["courses"].empty?
|
dept unless dept["courses"].empty?
|
||||||
end.compact
|
end.compact
|
||||||
end
|
|
||||||
|
|
||||||
build_itemize(courses) do |dept|
|
build_itemize(courses, "leftmargin=1mm,label=") do |dept|
|
||||||
puts dept["venue"]
|
puts dept["venue"]
|
||||||
build_itemize(dept["courses"]) do |r|
|
build_itemize(dept["courses"], "noitemsep,leftmargin=7mm") do |r|
|
||||||
texttt { puts r["code"] }
|
texttt { puts r["code"] }
|
||||||
puts ":"
|
puts ":"
|
||||||
wrap {
|
wrap {
|
||||||
|
@ -292,21 +306,18 @@ class CV < Latex::Builder
|
||||||
############### GRANT SUPPORT ################
|
############### GRANT SUPPORT ################
|
||||||
|
|
||||||
def render_grant_support(args = {})
|
def render_grant_support(args = {})
|
||||||
my_section("Grant Support")
|
make_section("Grant Support")
|
||||||
|
|
||||||
test_for_since =
|
test_for_since = proc { |r| duration_is_since?(r, @since[:grants]) }
|
||||||
if args.has_key? :since then
|
|
||||||
proc { |r| duration_is_since?(r, args[:since]) }
|
|
||||||
else
|
|
||||||
proc { true }
|
|
||||||
end
|
|
||||||
|
|
||||||
grant_categories = [
|
grant_categories = [
|
||||||
["Pending Applications", "submitted", ["grant", "gift"]],
|
["Pending Applications", "submitted", ["grant", "gift"]],
|
||||||
["Awarded Grants", "accepted", ["grant"]],
|
["Awarded Grants", "accepted", ["grant"]],
|
||||||
["Gifts", "accepted", ["gift"]],
|
["Gifts", "accepted", ["gift"]],
|
||||||
["Completed", "completed", ["grant", "gift"]]
|
|
||||||
]
|
]
|
||||||
|
grant_categories += [
|
||||||
|
["Completed", "completed", ["grant", "gift"]]
|
||||||
|
] unless skip?(:completed_grants)
|
||||||
grant_categories += [
|
grant_categories += [
|
||||||
["Declined", "rejected", ["grant", "gift"]]
|
["Declined", "rejected", ["grant", "gift"]]
|
||||||
] if args.fetch(:include_rejected, @include_rejected_grants)
|
] if args.fetch(:include_rejected, @include_rejected_grants)
|
||||||
|
@ -333,6 +344,9 @@ class CV < Latex::Builder
|
||||||
test_for_since.call(r)
|
test_for_since.call(r)
|
||||||
}.sort { |a,b| to_date(b["start"]) <=> to_date(a["start"])}
|
}.sort { |a,b| to_date(b["start"]) <=> to_date(a["start"])}
|
||||||
|
|
||||||
|
|
||||||
|
unless grants_in_category.empty?
|
||||||
|
|
||||||
## Header for the category
|
## Header for the category
|
||||||
subsection!("#{sec} (#{grants_in_category.length})")
|
subsection!("#{sec} (#{grants_in_category.length})")
|
||||||
|
|
||||||
|
@ -426,6 +440,7 @@ class CV < Latex::Builder
|
||||||
end # block("tabular") (field table)
|
end # block("tabular") (field table)
|
||||||
endl("0.2in")
|
endl("0.2in")
|
||||||
end # grants_in_category.each
|
end # grants_in_category.each
|
||||||
|
end # unless grants_in_category.empty?
|
||||||
end # grant_categories.each
|
end # grant_categories.each
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -523,33 +538,29 @@ class CV < Latex::Builder
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_paper_title(title)
|
def render_paper_title(title)
|
||||||
print_direct "``#{title}''"
|
print_direct "\\textsc{#{title}}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_one_pub_or_artifact(title,list,fmt,filter = proc { true })
|
def render_one_pub_or_artifact(title,list,fmt,filter = proc { true })
|
||||||
list = list.select { |r| filter.call(r) }
|
list = list.select { |r| filter.call(r) }
|
||||||
unless list.empty?
|
unless list.empty?
|
||||||
subsection!("#{title} (#{list.length})")
|
subsection!("#{title} (#{list.length})")
|
||||||
build_itemize(list) { |r| fmt.call(r) }
|
build_itemize(list, "leftmargin=0mm,label=,noitemsep") { |r| fmt.call(r) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
def render_pubs_and_artifacts(args = {})
|
def render_pubs_and_artifacts(args = {})
|
||||||
|
|
||||||
global_filter =
|
global_filter =
|
||||||
if args.has_key? :since then
|
proc { |r| duration_is_since?(r, @since[:publications])}
|
||||||
since = args[:since]
|
|
||||||
proc { |r| r["year"].to_i >= since }
|
|
||||||
else
|
|
||||||
proc { true }
|
|
||||||
end
|
|
||||||
|
|
||||||
all_my_pubs = LabMetadata.publications_for(@who)
|
all_my_pubs = LabMetadata.publications_for(@who)
|
||||||
|
|
||||||
my_section("Publications and Artifacts")
|
make_section("Publications and Artifacts")
|
||||||
|
|
||||||
# block("center") do
|
# block("center") do
|
||||||
# puts "(Author lists marked with a * are not correlated with level of contribution)"
|
# puts "(Author lists marked with a * are not correlated with level of contribution)"
|
||||||
# end
|
# end
|
||||||
|
unless skip?(:journal_pubs)
|
||||||
render_one_pub_or_artifact(
|
render_one_pub_or_artifact(
|
||||||
"Journal Publications",
|
"Journal Publications",
|
||||||
all_my_pubs.where do |r|
|
all_my_pubs.where do |r|
|
||||||
|
@ -575,7 +586,9 @@ class CV < Latex::Builder
|
||||||
end,
|
end,
|
||||||
global_filter
|
global_filter
|
||||||
)
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
unless skip?(:conference_pubs)
|
||||||
render_one_pub_or_artifact(
|
render_one_pub_or_artifact(
|
||||||
"Conference Publications",
|
"Conference Publications",
|
||||||
all_my_pubs.where do |r|
|
all_my_pubs.where do |r|
|
||||||
|
@ -595,7 +608,9 @@ class CV < Latex::Builder
|
||||||
end,
|
end,
|
||||||
global_filter
|
global_filter
|
||||||
)
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
unless skip?(:workshop_pubs)
|
||||||
render_one_pub_or_artifact(
|
render_one_pub_or_artifact(
|
||||||
"Workshop Publications",
|
"Workshop Publications",
|
||||||
all_my_pubs.where do |r|
|
all_my_pubs.where do |r|
|
||||||
|
@ -615,7 +630,9 @@ class CV < Latex::Builder
|
||||||
end,
|
end,
|
||||||
global_filter
|
global_filter
|
||||||
)
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
unless skip?(:book_chapters)
|
||||||
render_one_pub_or_artifact(
|
render_one_pub_or_artifact(
|
||||||
"Book Chapters",
|
"Book Chapters",
|
||||||
all_my_pubs.where do |r|
|
all_my_pubs.where do |r|
|
||||||
|
@ -640,6 +657,7 @@ class CV < Latex::Builder
|
||||||
end,
|
end,
|
||||||
global_filter
|
global_filter
|
||||||
)
|
)
|
||||||
|
end
|
||||||
|
|
||||||
render_one_pub_or_artifact(
|
render_one_pub_or_artifact(
|
||||||
"Submitted Publications",
|
"Submitted Publications",
|
||||||
|
@ -655,6 +673,7 @@ class CV < Latex::Builder
|
||||||
global_filter
|
global_filter
|
||||||
) if @include_pending_papers
|
) if @include_pending_papers
|
||||||
|
|
||||||
|
unless skip?(:tech_reports)
|
||||||
render_one_pub_or_artifact(
|
render_one_pub_or_artifact(
|
||||||
"Technical Reports",
|
"Technical Reports",
|
||||||
all_my_pubs.where do |r|
|
all_my_pubs.where do |r|
|
||||||
|
@ -673,8 +692,10 @@ class CV < Latex::Builder
|
||||||
puts get_pub_length_string(r)
|
puts get_pub_length_string(r)
|
||||||
end,
|
end,
|
||||||
global_filter
|
global_filter
|
||||||
) if args.fetch(:show_tech_reports, true)
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
unless skip?(:patents)
|
||||||
render_one_pub_or_artifact(
|
render_one_pub_or_artifact(
|
||||||
"Patents",
|
"Patents",
|
||||||
all_my_pubs.where do |r|
|
all_my_pubs.where do |r|
|
||||||
|
@ -690,23 +711,25 @@ class CV < Latex::Builder
|
||||||
end,
|
end,
|
||||||
global_filter
|
global_filter
|
||||||
)
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
unless skip?(:artifacts)
|
||||||
render_one_pub_or_artifact(
|
render_one_pub_or_artifact(
|
||||||
"Artifacts",
|
"Artifacts",
|
||||||
@data["artifacts"],
|
@data["artifacts"],
|
||||||
proc do |r|
|
proc do |r|
|
||||||
print_direct "\\textbf{#{safe_text r["name"]}} (#{safe_text r["class"]})"
|
print_direct "\\textsc{#{safe_text r["name"]}} (#{safe_text r["class"]})"
|
||||||
|
unless r["released"].nil?
|
||||||
|
d = to_date(r["released"])
|
||||||
|
hfill
|
||||||
|
puts "First released #{d.strftime("%B %Y")}"
|
||||||
|
end
|
||||||
endl
|
endl
|
||||||
print_direct "\\textit{#{safe_text r["description"]}}"
|
print_direct "\\textit{#{safe_text r["description"]}}"
|
||||||
unless r["url"].nil?
|
unless r["url"].nil?
|
||||||
endl
|
endl
|
||||||
url(r["url"])
|
url(r["url"])
|
||||||
end
|
end
|
||||||
unless r["released"].nil?
|
|
||||||
d = to_date(r["released"])
|
|
||||||
endl
|
|
||||||
puts "First released #{d.strftime("%B %Y")}"
|
|
||||||
end
|
|
||||||
unless r["metrics"].nil?
|
unless r["metrics"].nil?
|
||||||
unless r["metricsasof"].nil?
|
unless r["metricsasof"].nil?
|
||||||
endl
|
endl
|
||||||
|
@ -735,5 +758,6 @@ class CV < Latex::Builder
|
||||||
end
|
end
|
||||||
) if args.fetch(:show_artifacts, true)
|
) if args.fetch(:show_artifacts, true)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
|
@ -56,7 +56,7 @@ module Latex
|
||||||
latex_command(:smallskip)
|
latex_command(:smallskip)
|
||||||
latex_command(:medskip)
|
latex_command(:medskip)
|
||||||
latex_command(:bigskip)
|
latex_command(:bigskip)
|
||||||
latex_command(:itemize , environment: true)
|
latex_command(:itemize , arg_optional:[true], environment: true)
|
||||||
latex_command(:enumeate, environment: true)
|
latex_command(:enumeate, environment: true)
|
||||||
latex_command(:item)
|
latex_command(:item)
|
||||||
latex_command(:tabular, environment: true)
|
latex_command(:tabular, environment: true)
|
||||||
|
@ -125,9 +125,10 @@ module Latex
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_itemize(array)
|
def build_itemize(array, *args)
|
||||||
|
|
||||||
if(array.length > 0)
|
if(array.length > 0)
|
||||||
itemize do
|
itemize(*args) do
|
||||||
array.each do |r|
|
array.each do |r|
|
||||||
item
|
item
|
||||||
yield r
|
yield r
|
||||||
|
|
|
@ -94,6 +94,15 @@ module Text
|
||||||
return date_to_time(r["end"]).year >= year
|
return date_to_time(r["end"]).year >= year
|
||||||
elsif not r["years"].nil?
|
elsif not r["years"].nil?
|
||||||
return r["years"].map {|y|y.to_i}.max >= year
|
return r["years"].map {|y|y.to_i}.max >= year
|
||||||
|
elsif not r["year"].nil?
|
||||||
|
return r["year"].to_i >= year
|
||||||
|
elsif not r["date"].nil?
|
||||||
|
extracted_year =
|
||||||
|
case r["date"]
|
||||||
|
when /[a-z]+\. (\d\d\d\d)/ then $1
|
||||||
|
else raise "Invalid date format: #{r["date"]}"
|
||||||
|
end
|
||||||
|
return extracted_year.to_i >= year
|
||||||
else
|
else
|
||||||
raise "Invalid time range : #{r}"
|
raise "Invalid time range : #{r}"
|
||||||
end
|
end
|
||||||
|
|
BIN
src/papers/2017/VLDB-BetaPDBs-submitted.pdf
Normal file
BIN
src/papers/2017/VLDB-BetaPDBs-submitted.pdf
Normal file
Binary file not shown.
Loading…
Reference in a new issue