extends /layout.pug
block extra_head
style.
table.conferences tr.year {
border-color: black;
border-style: solid;
border-width: 1px 0 0 0;
}
table.conferences tr.spacer {
height: .8ex;
}
table.conferences tr.year td {
padding-bottom: .4ex;
}
table.conferences tr.entry {
color: gray;
}
table.conferences td, table.conferences th {
white-space: nowrap;
}
table.conferences td:last-child {
white-space: normal;
}
table.conferences i.fas, table.conferences i.fab {
margin-right: .2ex;
}
block titleContainer
block content
-
const BIKE_CARBON_FOOTPRINT_KM = 30;
const DOMESTIC_FLIGHT_THRESHOLD = 500;
h1
a(href='/') #[i.fas.fa-arrow-circle-left]
| Visited conferences
div.alert.alert-info
p.
This page gives an overview of the conferences, workshops, and summer schools I have visited together with the #[strong travel carbon footprint].
The #[strong accomodation] I used is also listed, but not included in the carbon footprint.
The calculation is based on averages from #[a.alert-link(href='https://ourworldindata.org/travel-carbon-footprint', target='_blank') Our World in Data].
p.
For #[strong biking], I counted 30 g CO#[sub 2] / km as a rough estimate based on my diet.
#[strong Flights] shorter than 500km are counted as 'domestic' (255 g / km), otherwise they are counted as short/long-haul (averaged on 153 g / km).
#[strong Trains] in the Netherlands probably emit less than the estimate from Our World in Data because #[a.alert-link(href='https://www.ns.nl/over-ns/duurzaamheid/fossielvrij', target='_blank') the NS runs on wind energy].
p.
The carbon footprint per capita of the Netherlands was #[strong 9.66] t in 2017 (26,448 g / day), according to #[a.alert-link(href='https://ourworldindata.org/co2/country/netherlands?country=NLD~DEU~DNK~SWE~FRA~BEL', target='_blank') Our World in Data].
The global average was #[strong 4.79] t in 2016 (13,114 g / day), according to #[a.alert-link(href='https://www.worldometers.info/co2-emissions/co2-emissions-per-capita/', target='_blank') Worldometer].
p.
Transport, aviation, and shipping #[a.alert-link(href='https://ourworldindata.org/grapher/ghg-emissions-by-sector?time=latest&country=~NLD', target='_blank') make up 34% of emissions in the Netherlands].
For the average Dutch person this is #[strong 3.28] t per year or #[strong 8,992] g per day (but note that this includes more than personal travel).
Worldwide, we have #[a.alert-link(href='https://ourworldindata.org/emissions-by-sector#transport-16-2', target='_blank') 16.2% of emissions from transport], which makes this figure #[strong 0.78] t per year or #[strong 2,125] g per day per capita.
p.
Please let me know if you think some of the calculations can be improved!
-
// Accepts "Y-M-D to [[Y-]M-]D", i.e. you can leave out repeated parts in
// the second date. "2019-7-8 to 10" means "2019-7-8 to 2019-7-10".
// You can also give only one date.
function parse_date_range(s) {
s = s.split(' to ').map(d => d.split('-'));
let from = {year: s[0][0], month: s[0][1], day: s[0][2]};
// If only day or month-day is given in the second date, add year-month
// or year from the first date.
let to;
if (s.length == 1)
to = from;
else if (s[1].length == 1)
to = {year: from.year, month: from.month, day: s[1][0]};
else if (s[1].length == 2)
to = {year: from.year, month: s[1][0], day: s[1][1]};
else
to = {year: s[1][0], month: s[1][1], day: s[1][2]};
return {
from: new Date(from.year, from.month-1, from.day),
to: new Date(to.year, to.month-1, to.day)
};
}
function nr_of_days(conf) {
return 1 + (conf.to - conf.from) / 24 / 3600 / 1000;
}
// Computes footprint in grams CO2, according to
// https://ourworldindata.org/travel-carbon-footprint.
// See the explanation in the paragraph at the top of the page.
function compute_carbon_footprint(conf) {
let footprint = 0;
if (conf.bike)
footprint += BIKE_CARBON_FOOTPRINT_KM * conf.bike;
if (conf.ferry)
footprint += 19 * conf.ferry;
if (conf.plane)
footprint += (conf.plane < DOMESTIC_FLIGHT_THRESHOLD ? 255 : 153) * conf.plane;
if (conf.train)
footprint += 41 * conf.train;
return footprint * (conf.multiplier || 2);
}
function year_summary(conferences, year) {
conferences = conferences.filter(c => c.from.getFullYear() == year);
let summary = {
conferences: conferences.length,
total_days: Math.round(conferences.map(nr_of_days).reduce((x,y) => x + y, 0)),
total_footprint: conferences.map(compute_carbon_footprint).reduce((x,y) => x + y, 0),
};
summary.total_footprint_percentage = Math.round(100 * summary.total_footprint / 3284400);
summary.total_footprint_per_day = summary.total_footprint / summary.total_days;
return summary;
}
let conferences = [];
mixin conf(dates, location, distance, shorttitle, title)
-
let conf = parse_date_range(dates);
conf.location = location;
conf.distance = distance;
conf.shorttitle = shorttitle;
conf.title = title || shorttitle;
Object.assign(conf, attributes);
conf.footprint = compute_carbon_footprint(conf);
conferences.push(conf);
mixin listconferences()
-
conferences.sort((x,y) => y.from - x.from || y.to - x.to);
let last_year = null;
table.conferences
thead
tr
th Year
th Month
th Location
th Travel modes
th(colspan=2) Carbon footprint (g CO#[sub 2])
th Accomodation
th Title
- for (const conf of conferences)
if last_year != conf.from.getFullYear()
- last_year = conf.from.getFullYear();
- let summary = year_summary(conferences, last_year);
tr.spacer
tr.year
td= conf.from.getFullYear()
td(colspan=7).
#[strong= summary.conferences] conference#{summary.conferences == 1 ? '' : 's'}
over #[strong= summary.total_days] day#{summary.total_days == 1 ? '' : 's'},
for a total of #[strong= (summary.total_footprint).toLocaleString('en')] g CO#[sub 2]
(#{summary.total_footprint_percentage.toLocaleString('en')}% of the yearly Dutch average),
averaging #[strong= (summary.total_footprint_per_day).toLocaleString('en', {maximumFractionDigits: 0})] g CO#[sub 2] / day.
tr.entry
td
td(title!=conf.from.toDateString() + ' to ' + conf.to.toDateString())
= conf.from.toLocaleString('default', {month: 'short'})
if conf.from.getMonth() != conf.to.getMonth()
| –
= conf.to.toLocaleString('default', {month: 'short'})
td
= conf.location
if conf.distance
= ' (' + (conf.distance).toLocaleString('en') + 'km)'
td
if conf.bike
i.fas.fa-bicycle(alt='Bike', title!='Bike: ' + conf.bike + 'km one-way')
if conf.ferry
i.fas.fa-ship(alt='Ferry', title!='Ferry: ' + conf.ferry + 'km one-way')
if conf.train
i.fas.fa-train(alt='Train', title!='Train: ' + conf.train + 'km one-way')
if conf.plane
i.fas.fa-plane(alt='Plane', title!='Plane: ' + conf.plane + 'km one-way')
td.text-right= (conf.footprint).toLocaleString('en')
td.text-right= (conf.footprint / nr_of_days(conf)).toLocaleString('en', {maximumFractionDigits: 0}) + ' / day'
td
if conf.airbnb
i.fab.fa-airbnb(alt='Airbnb', title='Airbnb')
if conf.hotel
i.fas.fa-hotel(alt='Hotel', title='Hotel')
if conf.friendstay
i.fas.fa-home(alt='With a friend', title='With a friend')
td
a(href!=conf.url, target='_blank', title!=conf.title)!= conf.shorttitle
+conf('2017-1-6', 'Nijmegen', 45, 'NL-FP Day', 'Dutch Functional Programming Day')(train=40, url='https://clean.cs.ru.nl/NL-FP_dag_2017')
+conf('2017-7-10 to 21', 'Leiden', 61, 'Summer School in Languages and Linguistics', 'Leiden Summer School in Languages and Linguistics')(train=75, multiplier=20, url='https://www.universiteitleiden.nl/en/education/study-programmes/summer-schools/summer-school-in-languages-and-linguistics')
+conf('2018-1-5', 'Apeldoorn', 41, 'NL-FP Day', 'Dutch Functional Programming Day')(train=61, url='https://clean.cs.ru.nl/NL-FP_dag_2018')
+conf('2018-1-26', 'Nijmegen', 0, 'CLIN', 'Computational Linguistics in the Netherlands')(url='https://clin28.cls.ru.nl/')
+conf('2019-7-8 to 10', 'Cambridge', 393, 'BHLAP', 'Biblical & Rabbinic Hebrew: New Perspectives in Philology & Linguistics')(bike=305, ferry=200, airbnb, url='https://www.ames.cam.ac.uk/whats-on/events-archive/biblical-rabinic-hebrew-conference')
+conf('2019-10-7 to 8', 'Utrecht', 59, 'CLSoR', 'Workshop on Cross-Linguistic Semantics of Reciprocals')(train=72, friendstay, url='https://rocky.sites.uu.nl/workshop-on-cross-linguistic-semantics-of-reciprocals/')
+conf('2020-1-10', 'Amsterdam', 88, 'NL-FP Day', 'Dutch Functional Programming Day')(train=100, url='https://sites.google.com/view/nl-fp-day-2020/home')
+conf('2020-3-31', 'Online', 0, '#SemiticsTwitterCoronaConference')(url='https://www.academia.edu/42297049/')
+conf('2020-10-11', 'Online', 0, 'Syntax Workshop')(url='https://sites.google.com/view/syntaxworkshop')
+conf('2020-11-29 to 12-11', 'Online', 0, 'SBL Annual', 'SBL Annual Meeting')(url='https://www.sbl-site.org/meetings/Congresses_Abstracts.aspx?MeetingId=37')
+conf('2021-10-25 to 11-22', 'Online', 0, 'ETT', 'Emerging Topics in Typology')(url='https://www2.helsinki.fi/en/conferences/emerging-topics-in-typology')
+conf('2022-01-12 to 14', 'Online', 0, 'AIL2', 'Agency and Intentions in Language')(url='https://ail-workshop.github.io/AIL2-Workshop/')
+conf('2022-08-24 to 27', 'Bucharest', 1700, 'SLE2022', 'Societas Linguistica Europaea')(train=107, plane=1800, airbnb, url='https://societaslinguistica.eu/sle2022/')
+conf('2022-11-19 to 22', 'Denver', 7840, 'SBL2022', 'Society of Biblical Literature')(train=107, plane=7748, hotel, url='https://www.sbl-site.org/meetings/AnnualMeeting.aspx')
+conf('2022-12-8 to 9', 'Tilburg', 62, 'CogLing Days 9', 'CogLing Days 9')(train=68, multiplier=4, url='https://benecla.com/')
+conf('2023-7-10 to 21', 'Leiden', 100, 'Summer School in Languages and Linguistics', 'Leiden Summer School in Languages and Linguistics')(train=115, multiplier=20, url='https://www.universiteitleiden.nl/en/education/study-programmes/summer-schools/summer-school-in-languages-and-linguistics')
+conf('2023-10-5 to 6', 'Brussels', 174, 'BCGL16', 'Brussels Conference on Generative Linguistics 16')(train=174, airbnb, url='https://www.crissp.be/bcgl-16-the-morphosyntax-of-speaker-and-hearer/')
+conf('2023-10-11 to 13', 'Nice', 1100, 'SPE12/OASIS3', 'Semantics and Philosophy in Europe 12 / Ontology As Structured by the Interfaces with Semantics 3')(train=1100, airbnb, url='https://spe-uca.sciencesconf.org/')
+conf('2024-10-24 to 25', 'Online', 0, 'Puzzles of Agreement')(url='https://sites.google.com/view/puzzlesofagreement/')
+listconferences()