extends /layout.pug block titleContainer block content h1 a(href='/') #[i.fas.fa-arrow-circle-left] |  Publication statistics h2 Time to publication p. Inspired by #[a(href='https://mastodon.social/@fussballinguist/111288814708880725', target='_blank') Simon Meier-Vieracker], I track how long the peer review and production process takes for each of my publications. Journal articles are blue; conference proceedings orange; book chapters green; book reviews purple. Light color indicates time waiting for reviews; dark color typesetting; diamonds date of publication. #chart-publications script(src='https://code.highcharts.com/gantt/highcharts-gantt.js') script . const colors = { bookchapter: { review: '#90C987', editing: '#4EB265', published: '#4EB265' }, bookreview: { review: '#AE76A3', editing: '#882E72', published: '#882E72' }, confproceedings: { review: '#F6C141', editing: '#F1932D', published: '#F1932D' }, journalarticle: { review: '#6195CF', editing: '#1965B0', published: '#1965B0' }, }; let shorttitles = []; let series = []; function entry(type_, shorttitle, title, review_intervals, editing_intervals = [], published = {}) { shorttitles.push(shorttitle); let data = []; for (let interval of review_intervals) data.push({ start: Date.parse(interval[0]), end: Date.parse(interval[1]) || Date.now(), name: 'Review', color: colors[type_]['review'], y: shorttitles.length - 1 }); for (let interval of editing_intervals) data.push({ start: Date.parse(interval[0]), end: Date.parse(interval[1]) || Date.now(), name: 'Copy editing', color: colors[type_]['editing'], y: shorttitles.length - 1 }); for (let way of Object.keys(published)) data.push({ start: Date.parse(published[way]), milestone: true, name: 'Published (' + way + ')', color: colors[type_]['published'], y: shorttitles.length - 1 }); series.push({name: title, data: data, borderRadius: 0}); } . entry('journalarticle', 'Orientalia (2018)', 'A case study of reciprocal middles in Biblical Hebrew: The niphal of לחם', [['2017-11-8', '2017-11-28'], ['2017-12-21', '2018-1-4']], [['2018-1-9', '2018-1-24']], {print: '2018-12-1'}) entry('journalarticle', 'JSS (2020)', 'Prepositions and the grammaticalization of Ancient Hebrew bipartite reciprocal markers (Journal of Semitic Studies)', [['2018-3-9', '2018-5-1'], ['2018-5-8', '2018-5-21']], [['2018-5-21', '2019-12-16']], {print: '2020-2-17'}) entry('journalarticle', 'JSOT (2020)', '“When dust was poured out”: Creation in Job 38.36–38 (Journal for the Study of the Old Testament)', [['2018-8-11', '2018-9-26']], [['2018-9-27', '2019-7-31']], {online: '2019-12-27', print: '2020-3-12'}) entry('confproceedings', 'IFL (2019)', 'With John van Groningen and Rinus Plasmeijer: Lazy interworking of compiled and interpreted code for sandboxing and distributed systems (Implementation & Application of Functional Languages)', [['2019-6-15', '2019-8-1'], ['2019-11-30', '2020-2-11']], [['2020-3-3', '2021-2-26']], {online: '2021-7-15'}) entry('bookreview', 'BiOr (2020)', 'Review of: Bar-Asher Siegal (2020), The NP-strategy for expressing reciprocity: Typology, history, syntax and semantics', [], [['2020-4-22', '2020-7-3']], {print: '2020-12-24'}) entry('bookreview', 'LINGUIST (2021)', 'Review of: Winters (2020), Historical linguistics: A cognitive grammar introduction', [], [['2020-10-17', '2021-4-23']], {online: '2021-04-23'}) entry('bookchapter', 'FS Van Wolde (2022)', 'Voice, discourse prominence, and aspect: The niphal and passive qal of yālad', [['2021-1-4', '2021-2-19'], ['2021-3-11', '2022-9-15']], [['2022-9-15', '2022-9-30']], {print: '2022-11-7'}) entry('bookreview', 'BiOr (2021)', 'Review of: Bekins (2020), Inscriptions from the world of the Bible: A reader and introduction to Old Northwest Semitic', [], [['2021-7-7', '2021-11-29']], {print: '2022-4-25'}) entry('journalarticle', 'JHS (2022)', 'Lip̄nē ‘in the face of’: A Locative preposition with a threatening connotation (Journal of Hebrew Scriptures)', [['2021-7-8', '2021-9-16'], ['2021-10-4', '2021-12-23']], [['2021-12-23', '2022-9-12']], {online: '2022-9-12'}) entry('journalarticle', 'S&P (2024)', 'With Johan Rooryck: Formalizing spatial-causal polysemy of Agent prepositions (Semantics & Pragmatics)', [['2022-7-4', '2022-9-12'], ['2023-3-6', '2023-6-5'], ['2023-7-30', '2023-10-20'], ['2023-11-10', '2023-12-20'], ['2024-1-8', '2024-1-14'], ['2024-1-15', '2024-3-3']], [['2024-3-4', '2024-5-27']], {online: '2024-3-4', print: '2024-6-4'}) entry('journalarticle', 'Linguistics (2023)', 'With Johan Rooryck: The interpretation of [+distal] in demonstratives and complementizers', [['2022-10-24', '2023-2-23'], ['2023-3-17', '2023-6-9']], [['2023-6-13', '2023-7-18']], {online: '2023-8-5', print: '2023-9-26'}) entry('journalarticle', 'BJALL (2024)', 'With Martijn Beukenhorst: Semantic properties of prepositions: The distinction between causal min ‘from’ and ‘in’ (Brill\'s Journal of Afroasiatic Languages & Linguistics)', [['2022-12-29', '2023-5-4'], ['2023-8-22', '2023-9-28'], ['2023-11-2', '2023-11-23'], ['2024-1-5', '2024-1-12']], [['2024-1-22', '2024-3-19']], {online: '2024-4-4', print: '2024-12-16'}) entry('journalarticle', 'In preparation', 'Complementation and Common Ground: Discursive effects in Biblical Hebrew', [['2023-9-22', '2024-6-30'], ['2024-12-20']]) entry('journalarticle', 'HIPHIL Novum (2024)', 'Large Language Models and Biblical Hebrew: Limitations, pitfalls, opportunities', [['2024-3-18', '2024-5-4'], ['2024-5-6', '2024-5-7']], [['2024-5-7', '2024-6-4']], {online: '2024-6-4'}) entry('journalarticle', 'LiTy (2025)', 'Iconic features in nominal reduplication', [['2024-5-1', '2024-5-18'], ['2024-9-13', '2024-12-1'], ['2024-12-28', '2025-5-13'], ['2025-7-16', '2025-7-28']], [['2025-7-28', '2025-8-30'], ['2025-9-5', '2025-9-29'], ['2025-10-01']]) entry('bookreview', 'BiOr (forthc.)', 'Review of: Park (2023), Focus construction with kî ʾim in Biblical Hebrew', [], [['2024-7-28', '2025-6-6']], {}) entry('bookreview', 'LINGUIST (2025)', 'Review of: Aikhenvald (2025), A guide to gender and classifiers', [], [['2025-10-16', '2025-10-28']], {online: '2025-10-28'}) . Highcharts.ganttChart('chart-publications', { credits: {enabled: false}, time: {useUTC: false}, chart: { spacingLeft: 0, spacingRight: 0, zooming: {type: 'x'}, }, scrollbar: { enabled: true, showFull: false, }, xAxis: [{ max: Date.now(), grid: {enabled: false}, labels: {align: 'left', distance: 0, padding: 0}, tickInterval: 1000 * 60 * 60 * 24 * 365, tickLength: 0, gridLineWidth: 1, }], yAxis: { title: null, grid: {enabled: false}, type: 'category', categories: shorttitles, staticScale: 25, }, tooltip: { pointFormatter: function () { const start = this.series.chart.time.dateFormat('%Y-%m-%d', this.start); if (!this.end) { /* milestone */ return `${this.name} on ${start}`; } const days = Math.floor((this.end - this.start) / 1000 / 60 / 60 / 24); const end = this.series.chart.time.dateFormat('%Y-%m-%d', this.end); return `In ${this.name} for ${days} day(s); ${start}–${end}`; }, }, series, }); h2 Time to review p. I also keep track of reviews I have performed for journals. The chart below shows how many reviews I have performed/declined for different journals, and how long they took. Negative times indicate declined review requests. #chart-reviews script. function makeSeries(journal, color, data) { return { name: journal, color, marker: { radius: 10, symbol: 'circle', }, data: data.map(entry => [Date.parse(entry[0]), entry[1]]), }; } Highcharts.chart('chart-reviews', { credits: {enabled: false}, chart: { type: 'scatter', spacingLeft: 0, spacingRight: 0, }, title: null, xAxis: [{ type: 'datetime', min: Date.parse('2023-01-01'), max: Date.now(), labels: {align: 'left', distance: 0, padding: 0}, crossing: 0, tickLength: 0, gridLineWidth: 1, }], yAxis: { title: 'days', tickInterval: 10 }, tooltip: { pointFormatter: function(){ return `Review ${this.y < 0 ? 'declined' : 'performed'} in ${Math.abs(this.y)} day(s)`; }, }, series: [ makeSeries('DGfS (conference)', '#506ba0', [ ['2025-09-04', 4], ['2025-09-04', 7], ]), makeSeries('Glossa', '#905486', [ ['2023-03-23', 8], ['2024-02-04', 8], ['2024-02-17', 5], ['2024-07-10', 2], ]), makeSeries('Lingua', '#fb6032', [ ['2023-02-22', -1], ]), makeSeries('Open Mind', '#00aeef', [ ['2023-07-28', 34], ['2023-12-11', 9], ]), makeSeries('Religions', '#00699e', [ ['2025-08-29', 3], ['2025-10-10', 4], ]), makeSeries('The New Scholar', '#dbbe9e', [ ['2023-05-05', 1], ]), ], });