<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jeremy-Bloom | SFiO.org</title><link>https://www.sfio.org/authors/jeremy-bloom/</link><atom:link href="https://www.sfio.org/authors/jeremy-bloom/index.xml" rel="self" type="application/rss+xml"/><description>Jeremy-Bloom</description><generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>en-us</language><copyright>© 2016 - 2026 ASFIO - All Rights Reserved</copyright><lastBuildDate>Tue, 05 May 2009 00:00:00 +0000</lastBuildDate><image><url>https://www.sfio.org/images/logo.svg</url><title>Jeremy-Bloom</title><link>https://www.sfio.org/authors/jeremy-bloom/</link></image><item><title>Moving Fast at Highways England</title><link>https://www.sfio.org/interaction/2016-1/moving-fast-at-highways-england/</link><pubDate>Tue, 05 May 2009 00:00:00 +0000</pubDate><guid>https://www.sfio.org/interaction/2016-1/moving-fast-at-highways-england/</guid><description>&lt;p>&lt;a href="https://www.sfio.org/authors/carey-glass/">Carey Glass&lt;/a>, &lt;a href="https://www.sfio.org/authors/jeremy-bloom/">Jeremy-Bloom&lt;/a>&lt;/p>
&lt;h2 class="red-heading">Abstract&lt;/h2>
&lt;p>Major project investment teams in Highways England have had
to respond to an urgent need to drive economic growth. This
case study describes how they have responded to this
challenge, with SF questions enabling complex adaptive
responses to emerge that have driven them forward.&lt;/p>
&lt;h2 class="red-heading">Article&lt;/h2>
&lt;script src="https://www.sfio.org/js/pdf.js">&lt;/script>
&lt;div style="margin-left: 20px; margin-bottom: 20px;">
&lt;button id="prev">Previous&lt;/button>&amp;nbsp; &amp;nbsp;
&lt;button id="next">Next&lt;/button>&amp;nbsp; &amp;nbsp;
&lt;a href="article.pdf" download="article.pdf" target="_blank">Download&lt;/a>
&amp;nbsp; &amp;nbsp;
&lt;span>Page: &lt;span id="page_num">&lt;/span> / &lt;span id="page_count">&lt;/span>&lt;/span>
&lt;/div>
&lt;p>&lt;canvas id="the-canvas" style="border: 1px solid black; direction: ltr; width: 800px;">&lt;/canvas>&lt;/p>
&lt;script id="script">
// If absolute URL from the remote server is provided, configure the CORS
// header on that server.
var url = './article.pdf';
// Loaded via &lt;script> tag, create shortcut to access PDF.js exports.
var pdfjsLib = window['pdfjs-dist/build/pdf'];
// The workerSrc property shall be specified.
pdfjsLib.GlobalWorkerOptions.workerSrc = '/js/pdf.worker.js';
var pdfDoc = null,
pageNum = 1,
pageRendering = false,
pageNumPending = null,
scale = 2,
canvas = document.getElementById('the-canvas'),
ctx = canvas.getContext('2d');
/**
* Get page info from document, resize canvas accordingly, and render page.
* @param num Page number.
*/
function renderPage(num) {
pageRendering = true;
// Using promise to fetch the page
pdfDoc.getPage(num).then(function(page) {
var viewport = page.getViewport({scale: scale});
canvas.height = viewport.height;
canvas.width = viewport.width;
// Render PDF page into canvas context
var renderContext = {
canvasContext: ctx,
viewport: viewport
};
var renderTask = page.render(renderContext);
// Wait for rendering to finish
renderTask.promise.then(function() {
pageRendering = false;
if (pageNumPending !== null) {
// New page rendering is pending
renderPage(pageNumPending);
pageNumPending = null;
}
});
});
// Update page counters
document.getElementById('page_num').textContent = num;
}
/**
* If another page rendering in progress, waits until the rendering is
* finised. Otherwise, executes rendering immediately.
*/
function queueRenderPage(num) {
if (pageRendering) {
pageNumPending = num;
} else {
renderPage(num);
}
}
/**
* Displays previous page.
*/
function onPrevPage() {
if (pageNum &lt;= 1) {
return;
}
pageNum--;
queueRenderPage(pageNum);
}
document.getElementById('prev').addEventListener('click', onPrevPage);
/**
* Displays next page.
*/
function onNextPage() {
if (pageNum >= pdfDoc.numPages) {
return;
}
pageNum++;
queueRenderPage(pageNum);
}
document.getElementById('next').addEventListener('click', onNextPage);
/**
* Asynchronously downloads PDF.
*/
pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {
pdfDoc = pdfDoc_;
document.getElementById('page_count').textContent = pdfDoc.numPages;
// Initial/first page rendering
renderPage(pageNum);
});
&lt;/script></description></item></channel></rss>