<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss/styles.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Alasdair Smith | Journal</title><description>Alasdair Smith is a frontend-focused engineer and leader based in London.</description><link>https://alasdairsmith.co.uk/</link><language>en-GB</language><item><title>Becoming grid aware</title><pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;As mentioned in my &lt;a href=&quot;/journal/site-redesign-spring-2026&quot;&gt;post about redesigning this site&lt;/a&gt;, one of the major goals in rebuilding was making it grid aware.&lt;/p&gt;
&lt;p&gt;There’s an overview of the grid aware functionality on &lt;a href=&quot;/grid-aware&quot;&gt;the grid aware page&lt;/a&gt;, but in this post I want to go into more detail about how it works and how I built it.&lt;/p&gt;
&lt;h2&gt;What does grid aware mean?&lt;/h2&gt;
&lt;p&gt;I’ve been enjoying learning about green software over the last few months. I feel passionate about reducing the impact of my work on the environment, but I’ve also found there are many interesting lessons on system design.&lt;/p&gt;
&lt;p&gt;A grid aware system is based on the principles of green software. Since almost all software runs on grid electricity, we can use carbon intensity data from the grid to infer the emissions of the software. Then various strategies can be applied to try reduce emissions. To be grid aware, the system adapts its behaviour based on how much carbon is being emitted from the grid when run.&lt;/p&gt;
&lt;p&gt;Grid aware &lt;em&gt;websites&lt;/em&gt; adapt functionality of the frontend based on conditions of the user’s electricity grid. The focus is on the frontend as there are well established principles around backend/server based grid aware software, I’d recommend the &lt;a href=&quot;https://learn.greensoftware.foundation/carbon-awareness&quot;&gt;Green Software Foundation’s course&lt;/a&gt; if you want to learn more.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://branch.climateaction.tech/&quot;&gt;Branch magazine&lt;/a&gt; from the Green Web Foundation is prior art, see the &lt;a href=&quot;https://branch.climateaction.tech/issues/issue-9/designing-a-grid-aware-branch/&quot;&gt;full write up&lt;/a&gt; for more. The GWF are also responsible for the &lt;a href=&quot;https://www.thegreenwebfoundation.org/tools/grid-aware-websites/&quot;&gt;Grid-aware websites project&lt;/a&gt;, which directly inspired me to rebuild my site. I believe I first heard about this through the &lt;a href=&quot;https://fershad.com/writing/introducing-our-grid-aware-websites-project/&quot;&gt;core maintainer’s blog&lt;/a&gt;, whose website is also grid aware (and is well worth a read!)&lt;/p&gt;
&lt;h2&gt;Searching for a carbon emissions API&lt;/h2&gt;
&lt;p&gt;Determining the conditions of the grid is not an easy challenge, they are complex systems that are continually changing. To get data on grid carbon emissions, I needed an API that can estimate emissions on a reasonably real-time basis.&lt;/p&gt;
&lt;p&gt;The grid-aware-websites project was built with the assumption that the Electricity Maps API could be used as a data provider, which - spoiler alert - is probably a good idea, as they’re very well respected for real-time emissions data.&lt;/p&gt;
&lt;p&gt;Unfortunately, the project initially planned to use an Electricity Maps API endpoint that is very expensive for an individual and is limited to data from a single country, as &lt;a href=&quot;https://github.com/thegreenwebfoundation/grid-aware-websites/issues/21&quot;&gt;discussed in a GitHub ticket&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Because of this, I decided to look for alternative providers. I settled on &lt;a href=&quot;https://watttime.org/&quot;&gt;WattTime&lt;/a&gt; mostly because there’s not many around! I’d heard of them some time ago thanks to their excellent explainers like &lt;a href=&quot;https://watttime.org/data-science/data-signals/marginal-co2/&quot;&gt;marginal&lt;/a&gt; and &lt;a href=&quot;https://watttime.org/data-science/data-signals/average-co2/&quot;&gt;average&lt;/a&gt; emissions.&lt;/p&gt;
&lt;p&gt;I built a full implementation using the WattTime API and had it working, serving pages from Astro. However, I ran into some significant issues with performance. WattTime’s API has a relatively complex surface area, requiring three separate calls: one for authentication, one to identify the electricity grid’s region from the user’s latitude/longitude, and one to determine carbon emissions for that region. Each of these calls adds latency and ultimately added up to a significant wait for page load.&lt;/p&gt;
&lt;p&gt;Adding caching definitely helped but since the request pattern is likely to be spread geographically, most users would need at least two requests. At a few hundred milliseconds each, the latency wasn’t workable, so I abandoned this approach.&lt;/p&gt;
&lt;p&gt;Luckily, the folks at the GWF had been working with Electricity Maps to create a new API for this purpose! Their &lt;a href=&quot;https://www.thegreenwebfoundation.org/news/a-new-api-for-grid-aware-websites-and-beyond/&quot;&gt;blog post goes into all the details&lt;/a&gt; but the new API immediately seemed like the solution to unblock this project for me. Only one request is needed to retrieve carbon emissions data, bringing latency down to an acceptable level (barring caveats discussed below).&lt;/p&gt;
&lt;h2&gt;Architecture&lt;/h2&gt;
&lt;p&gt;At a high level, the grid aware mode is structured around an Astro middleware that queries the Electricity Maps API before injecting the response into the rendering layer.&lt;/p&gt;
&lt;h3&gt;Middleware&lt;/h3&gt;
&lt;p&gt;Astro middlewares process each individual request to the site, allowing shared functionality across routes. Middlewares are therefore required to be run in Astro’s server-rendering mode, enabled across the site by setting &lt;code&gt;output: &apos;server&apos;&lt;/code&gt; in the config.&lt;/p&gt;
&lt;p&gt;Each incoming request can come from a different grid running under different conditions, so behaviour needs to be modified per-request. This makes middleware the ideal choice, intercepting requests and injecting emissions data into responses.&lt;/p&gt;
&lt;p&gt;First, the middleware checks if the grid aware mode has been disabled. This can either happen if a &lt;code&gt;grid-aware-disabled&lt;/code&gt; query parameter is set - allowing users to disable grid aware if wanted; or if an environment variable is set - allowing me to disable it during development.&lt;/p&gt;
&lt;p&gt;Next, to keep performance reasonable for users moving between pages on the site, the middleware checks for a cookie containing cached carbon intensity data. Since the Electricity Maps API returns hourly data, the cookie has a TTL of 1 hour.&lt;/p&gt;
&lt;p&gt;If there’s a cache miss, then the middleware combines with the &lt;a href=&quot;https://docs.astro.build/en/guides/integrations-guide/netlify/&quot;&gt;Netlify adapter&lt;/a&gt;, where I’m currently hosting this site, to receive the request’s geolocation as latitude/longitude coordinates:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; const&lt;/span&gt;&lt;span&gt; onRequest&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; defineMiddleware&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ...&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  const&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;longitude&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;latitude&lt;/span&gt;&lt;span&gt; } &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; context.locals.netlify.context.geo&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ...&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These will be passed to the API request as we’ll see shortly.&lt;/p&gt;
&lt;p&gt;The middleware is designed to be quite defensive, and will disable the grid aware mode if errors are encountered. I want the site to be resilient to problems in the grid aware system, as ultimately it is a nice-to-have.&lt;/p&gt;
&lt;h3&gt;Electricity Maps integration&lt;/h3&gt;
&lt;p&gt;Once we have latitude/longitude of the request, we can fire off a request to the Electricity Maps API. As above, this is a significantly simpler implementation as the &lt;a href=&quot;https://app.electricitymaps.com/developer-hub/api/reference#carbon-intensity-level-latest&quot;&gt;Carbon Intensity Level endpoint&lt;/a&gt; accepts both a API token and latitude/longitude, so we can receive all of the data in a single request:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; carbonIntensityLevelQueryParams&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; new&lt;/span&gt;&lt;span&gt; URLSearchParams&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  lat: latitude.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  lon: longitude.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; res&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  `https://api.electricitymaps.com/v4/carbon-intensity-level/latest?${&lt;/span&gt;&lt;span&gt;carbonIntensityLevelQueryParams&lt;/span&gt;&lt;span&gt;}`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    headers: {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &apos;auth-token&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;`${&lt;/span&gt;&lt;span&gt;apiKey&lt;/span&gt;&lt;span&gt;}`&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;From this, we get back the &lt;code&gt;zone&lt;/code&gt; - effectively the grid powering the location - and a &lt;code&gt;high&lt;/code&gt;/&lt;code&gt;moderate&lt;/code&gt;/&lt;code&gt;low&lt;/code&gt; &lt;code&gt;level&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;zone&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;GB&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &quot;data&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;level&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;low&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &quot;datetime&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2026-06-13T12:00:00.000Z&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The level thresholds defined in the &lt;a href=&quot;https://app.electricitymaps.com/developer-hub/api/reference#carbon-intensity-level-latest&quot;&gt;API docs&lt;/a&gt; and are based on difference from the average emissions for that grid over the last 10 days.&lt;/p&gt;
&lt;h3&gt;Injection into the rendering layer&lt;/h3&gt;
&lt;p&gt;After receiving the level data, it is set on Astro &lt;a href=&quot;https://docs.astro.build/en/reference/api-reference/#locals&quot;&gt;&lt;code&gt;locals&lt;/code&gt;&lt;/a&gt;, injecting it into the rendering layer. We’ll see later that the frontend can now use it to modify behaviour:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;context.locals.gridAwareCarbonIntensityLevel &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gridAwareCarbonIntensityLevel&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And finally, the data is set on the cookie, caching it for 1 hour:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;context.cookies.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  GRID_AWARE_COOKIE_NAME&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  { gridAwareCarbonIntensityLevel },&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  { maxAge: &lt;/span&gt;&lt;span&gt;GRID_AWARE_COOKIE_MAX_AGE&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Differences with the grid-aware website project&lt;/h3&gt;
&lt;p&gt;Although I’ve been directly inspired by Green Web Foundation’s &lt;a href=&quot;https://github.com/thegreenwebfoundation/grid-aware-websites&quot;&gt;grid-aware-websites project&lt;/a&gt;, there are some architectural differences.&lt;/p&gt;
&lt;p&gt;The key difference is that the grid-aware-websites project is explicitly targeted at pre-existing websites. A stated goal was avoiding the need to rewrite a whole site to add grid aware support.&lt;/p&gt;
&lt;p&gt;My goal was to learn from the grid aware pattern, so rewriting from scratch made sense. Because of this choice, my architecture optimises for control via the primary server over edge workers. In the long term, if grid aware becomes the norm for web architectures, control from the server is more direct and easy to reason about.&lt;/p&gt;
&lt;p&gt;However, this has a major downside: because the primary server must resolve the carbon intensity data before rendering, site latency becomes dependent on the speed of the API response. The latency is more than I would like but acceptable. I have some ideas that I’ll cover later that may help with this.&lt;/p&gt;
&lt;h2&gt;Usage in the frontend&lt;/h2&gt;
&lt;p&gt;Once &lt;code&gt;locals.gridAwareCarbonIntensityLevel&lt;/code&gt; has been set, the frontend can use it to make decisions about how to change behaviour.&lt;/p&gt;
&lt;p&gt;In all cases, I chose to only change behaviour when intensity level is considered high. Based on my testing in the UK, it seems like high intensity only really kicks in during the evening. Given that my goal is for the site to behave as normal for most of the time, setting this as the bar seems reasonable.&lt;/p&gt;
&lt;h3&gt;CSS&lt;/h3&gt;
&lt;p&gt;The intensity level is made available to CSS by registering a custom CSS property and setting as the initial value:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;CSS&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;registerProperty&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  name: &lt;/span&gt;&lt;span&gt;&apos;--grid-aware-carbon-intensity-level&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  syntax: &lt;/span&gt;&lt;span&gt;&apos;*&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  inherits: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  initialValue: gridAwareCarbonIntensityLevel &lt;/span&gt;&lt;span&gt;??&lt;/span&gt;&lt;span&gt; &apos;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This CSS property is then used to disable animations and view transitions using a style query:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;@container&lt;/span&gt;&lt;span&gt; style(--grid-aware-carbon-intensity-level: high) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  *&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  *&lt;/span&gt;&lt;span&gt;::before&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  *&lt;/span&gt;&lt;span&gt;::after&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    transition&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;none&lt;/span&gt;&lt;span&gt; !important&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    animation&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;none&lt;/span&gt;&lt;span&gt; !important&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  @view-transition&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    navigation: none;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This was inspired by the &lt;a href=&quot;https://csswizardry.com/Obs.js/demo/&quot;&gt;Obs.js demo site&lt;/a&gt; which does the same when detecting that the user is low on battery. The &lt;a href=&quot;https://sustainablewebdesign.org/guidelines/2-12-ensure-animation-is-proportionate-and-easy-to-control/&quot;&gt;Web Sustainability Guidelines&lt;/a&gt; also recommend avoiding unnecessary animations.&lt;/p&gt;
&lt;p&gt;Separately, the “scramble in” animation in the header, built using Preact/JavaScript, also reads the intensity level and disables itself if intensity is high.&lt;/p&gt;
&lt;h3&gt;Images&lt;/h3&gt;
&lt;p&gt;Images are the &lt;a href=&quot;https://almanac.httparchive.org/en/2022/page-weight#fig-8&quot;&gt;biggest assets on the web&lt;/a&gt; so avoiding loading, decoding and rendering them was one of the major goals for me.&lt;/p&gt;
&lt;p&gt;Astro already provides a number of useful tools via the built-in &lt;a href=&quot;https://docs.astro.build/en/guides/images/#image-&quot;&gt;&lt;code&gt;&amp;lt;Image&amp;gt;&lt;/code&gt;&lt;/a&gt; component, including automatic lazy loading. I wanted to extend this component’s functionality to make it grid aware. My &lt;code&gt;&amp;lt;GridAwareImage&amp;gt;&lt;/code&gt; component reads the intensity level from locals, then uses this to decide whether to render an alt-text placeholder matching the size of the true image, or an Astro &lt;code&gt;&amp;lt;Image&amp;gt;&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  showPlaceholder &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;placeholder&quot;&lt;/span&gt;&lt;span&gt; style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;`aspect-ratio: ${&lt;/span&gt;&lt;span&gt;aspectRatio&lt;/span&gt;&lt;span&gt;}`&lt;/span&gt;&lt;span&gt;}&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      {alt}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;?grid-aware-disabled=true&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;Show images&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  ) &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;Image&lt;/span&gt;&lt;span&gt; src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{src} &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{alt} /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  )&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Performance concerns&lt;/h2&gt;
&lt;p&gt;One of the major downsides of this architecture is that the API request blocks rendering of the page while in-flight. This results in a slower time-to-first-byte, my testing with &lt;a href=&quot;https://calibreapp.com/&quot;&gt;Calibre&lt;/a&gt; found that it was on the order of 1 second. This impacts perceived performance as is a noticeable delay between opening the site and something appearing on screen.&lt;/p&gt;
&lt;p&gt;This is a tricky problem, as in order to render parts of the site, the components need to have grid intensity level, which is impossible until the API request completes. Providing a default value while the request is in-flight is non-optimal, since it would lead to a “flash of wrong behaviour”, similar to &lt;a href=&quot;https://fonts.google.com/knowledge/glossary/fout&quot;&gt;flash of unstyled text (FOUT)&lt;/a&gt;. Worse, since image loading is dependent on the intensity level, providing a default value could lead to an image request being sent only to become redundant soon after, defeating the purpose of the grid aware site.&lt;/p&gt;
&lt;p&gt;To combat this and avoiding in-flight states, I’d like to investigate HTML streaming, allowing parts of the page that are not dependent on the intensity level value to render while other parts of the page have to wait. I only recently learned about a &lt;a href=&quot;https://docs.astro.build/en/recipes/streaming-improve-page-performance/&quot;&gt;streaming API in Astro&lt;/a&gt; so I’m hopeful this can improve performance.&lt;/p&gt;
&lt;h2&gt;Wrapping up&lt;/h2&gt;
&lt;p&gt;I really enjoyed the rebuild and learned a lot along the way about the grid aware pattern. Although there are tradeoffs, I can see a future where it becomes more widespread across the web.&lt;/p&gt;</content:encoded></item><item><title>Site Redesign Spring 2026</title><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After about 7 years, I’ve finally found the time and motivation to update this site to a new design and add some new functionality.&lt;/p&gt;
&lt;h2&gt;Moved to Astro&lt;/h2&gt;
&lt;p&gt;I’ve moved away from Eleventy to use &lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt; to build the site. My main motivation for this was for the new grid aware functionality (see more detail below), which requires server rendering. Astro’s ability to render using a pre-generated or on-demand server-rendered mode was attractive because of this.&lt;/p&gt;
&lt;p&gt;It’s taken me about 6 months to finish the migration… but this is largely due to a lack of free time, and only being able to chip away at it for a few hours here or there. Once I’d made the decision to switch to Astro, things moved a lot quicker because of the great docs.&lt;/p&gt;
&lt;p&gt;I must admit, I’m not thrilled about the &lt;a href=&quot;https://astro.build/blog/joining-cloudflare/&quot;&gt;recent acquisition by CloudFlare&lt;/a&gt;. This is partly because open source project stewardship at large companies like this doesn’t seem to have gone well in the past, for example see the &lt;a href=&quot;https://github.com/gatsbyjs/gatsby/discussions/39062&quot;&gt;history of Gatsby&lt;/a&gt;. But also because CloudFlare’s &lt;a href=&quot;https://www.propublica.org/article/how-cloudflare-helps-serve-up-hate-on-the-web&quot;&gt;policies around hosting Nazis&lt;/a&gt;. However, I was most of the way through my rewrite when the acquisition was announced, so I guess I’m going to take a wait and see approach. Hopefully they are largely hands-off.&lt;/p&gt;
&lt;h2&gt;Styling&lt;/h2&gt;
&lt;p&gt;I’ve taken the opportunity of the re-build to also redesign the site from scratch.&lt;/p&gt;
&lt;p&gt;I’ve used &lt;a href=&quot;https://frontendmasters.com/blog/the-coyier-css-starter/&quot;&gt;Chris Coyier’s CSS starter&lt;/a&gt; as a base set of global styles. As the name implies, its less of a reset and more a set of sensible defaults, styles that you probably want to set on every site. I recommend reading his post for details on what is used, along with a detailed description of why. I also added a few CSS utilities, namely &lt;a href=&quot;https://piccalil.li/blog/flow-utility/&quot;&gt;Andy Bell’s flow utility&lt;/a&gt; for nicer vertical rhythm and &lt;a href=&quot;https://ryanmulligan.dev/blog/layout-breakouts/&quot;&gt;Ryan Mulligan’s full bleed layout with breakouts&lt;/a&gt; technique. The latter of which I’m using as the default layout, I don’t yet have any use-cases for the full bleed capability but its handy to have if needed in the future.&lt;/p&gt;
&lt;p&gt;For the overall theming I wanted to go with something quite minimal, focused around a monospaced font and some simple colours. I came across iA Writer’s &lt;a href=&quot;https://ia.net/topics/in-search-of-the-perfect-writing-font&quot;&gt;Duospace font&lt;/a&gt; some time ago and while I’m no typographic expert I think it works nicely for a body font. For a bit of contrast in headings, I choose &lt;a href=&quot;https://fonts.google.com/specimen/Manrope&quot;&gt;Manrope&lt;/a&gt; since I was familiar with it from my &lt;a href=&quot;https://leaddev.com/leadership/creating-the-next-generation-of-senior-engineers&quot;&gt;LDX3 slides&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The general theme colours were originally inspired by a pair of trainers! I liked a “burnt orange” colour so took a photo and picked it from there. I then spent a very long time developing a set of colours based on the base hue which had sufficient contrast in most combinations across both light and dark modes. You can see the theme colours on &lt;a href=&quot;/style-guide&quot;&gt;my rough style guide page&lt;/a&gt;. Although I believe the theme is indeed accessible is nearly all circumstances, I’m not sure my approach really worked very well, as there’s quite a bit of drift from the original colour. And I’m aware of at least 1 contrast failure on the site currently. So I will probably continue to tweak going forward.&lt;/p&gt;
&lt;p&gt;The animation in the header is based on &lt;a href=&quot;https://www.fancycomponents.dev/docs/components/text/scramble-in&quot;&gt;a React component&lt;/a&gt; I found quite some time ago, although I’ve heavily modified it to clean up the code, removing a bunch of unnecessary stuff and switched to use &lt;code&gt;requestAnimationFrame&lt;/code&gt; instead of &lt;code&gt;setInterval&lt;/code&gt; to be slightly more responsive to browser performance.&lt;/p&gt;
&lt;h2&gt;Moving my blog&lt;/h2&gt;
&lt;p&gt;Another big difference is that you’re reading this here! Previously, I separated my blog onto another domain, &lt;a href=&quot;https://40thiev.es/&quot;&gt;40thiev.es&lt;/a&gt;, but with this rebuild it makes sense to unify onto a single domain. I’m also planning to move away from the 40thieves naming convention in general, as its just plain confusing.&lt;/p&gt;
&lt;p&gt;Currently the older content is replicated onto both sites, but I’m planning to retire the old site and setup redirects pointing here.&lt;/p&gt;
&lt;p&gt;I would like to try write here a bit more regularly, hoping to have more time for that going forward.&lt;/p&gt;
&lt;h2&gt;Grid aware&lt;/h2&gt;
&lt;p&gt;As mentioned above, one of the requirements was to control rendering on the server. This is because one of my major goals for the rebuild was to experiment with the “grid-aware” technique from green software. I’ve created a quick explainer on &lt;a href=&quot;/grid-aware&quot;&gt;&lt;code&gt;/grid-aware&lt;/code&gt;&lt;/a&gt;, but tl;dr: this means that the site changes its behaviour in response to how carbon emissions from the user’s electricity grid. When emissions are high, it disables some features like loading images, playing animations etc.&lt;/p&gt;
&lt;p&gt;I’m planning to write a detailed breakdown of how this works in a follow post, so stay tuned for that.&lt;/p&gt;</content:encoded></item><item><title>CYF nominated for the UN sponsored WSIS Prize!</title><pubDate>Wed, 27 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;As some of you may know, I’ve been volunteering with a charity called &lt;a href=&quot;https://codeyourfuture.io/&quot;&gt;Code Your Future&lt;/a&gt; since 2018 (ish, I’ve actually forgotten when I started). Alongside our great team, I help refugees, asylum seekers and other disadvantaged people to become web developers. We’ve grown from one class in London up to over 200 active trainees across 6 different regions and we’ve had great success with graduates being hired into the industry in companies such as Slack, Capgemini, Thoughtworks, Deloitte, the BBC, AWS, and more.&lt;/p&gt;
&lt;p&gt;We’ve maintained an open &lt;a href=&quot;https://curriculum.codeyourfuture.io/&quot;&gt;curriculum&lt;/a&gt; since the start of CYF and developing this has been the focus of my volunteering “work” for the last few years. All of our material is &lt;a href=&quot;https://github.com/CodeYourFuture/curriculum&quot;&gt;open source on Github&lt;/a&gt; with all the content in Markdown (and we welcome contributions!)&lt;/p&gt;
&lt;p&gt;I’m excited to say that we’ve been recognised for our work and have been nominated for the WSIS Prizes 2024 under the “E-employment” category as part of the UN (yes, that UN!)&lt;/p&gt;
&lt;p&gt;This is a public vote round, so I’d love it if you could take two minutes to vote for us! 💚 You’ll need to register an account &lt;a href=&quot;https://www.itu.int/net4/wsis/stocktaking/Prizes/2024&quot;&gt;here&lt;/a&gt;, then you’ll find Code Your Future under section 7 E-employment of the voting form selector.&lt;/p&gt;
&lt;p&gt;There’s only 3 days left before it closes, so please go vote now! 🗳️&lt;/p&gt;</content:encoded></item><item><title>Why should &lt;script&gt;s be loaded at the bottom of &lt;body&gt;?</title><pubDate>Sat, 28 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I originally wrote this at &lt;a href=&quot;https://www.overleaf.com/&quot;&gt;work&lt;/a&gt; to explain the reasoning behind one of my pull requests. I decided not to add it to our internal documentation since it’s not very specific to Overleaf, but thought it might be useful to share.&lt;/p&gt;
&lt;p&gt;It is common performance advice to put &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tags just before the closing &lt;code&gt;&amp;lt;/body&amp;gt;&lt;/code&gt; tag in your HTML. This seems like odd advice since we tend to put other resources in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;. To understand why, let’s take a look at how the browser reads our web page.&lt;/p&gt;
&lt;h3&gt;The browser’s perspective&lt;/h3&gt;
&lt;p&gt;When a browser encounters some HTML like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;&amp;lt;!&lt;/span&gt;&lt;span&gt;doctype&lt;/span&gt;&lt;span&gt; html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &amp;lt;&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      someLongRunningTask&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      // ...&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &amp;lt;/&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &amp;lt;&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;&amp;gt;My amazing content&amp;lt;/&lt;/span&gt;&lt;span&gt;h1&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &amp;lt;/&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It does something like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Start parsing the HTML (top down)&lt;/li&gt;
&lt;li&gt;Parses &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; and adds it to the DOM (nothing will be displayed since nothing within &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; is rendered on screen)&lt;/li&gt;
&lt;li&gt;Encounters the &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; and starts parsing and executing it. In this example, running the &lt;code&gt;someLongRunningTask&lt;/code&gt; function&lt;/li&gt;
&lt;li&gt;While this is happening, it cannot safely continue to parse the HTML document since the JS may manipulate the DOM that the browser is attempting to parse. Because of this the browser is &lt;em&gt;render blocked&lt;/em&gt; until the script completes execution. While it is blocked, it can only display the DOM that it has parsed so far: in this example, it still can’t display anything&lt;/li&gt;
&lt;li&gt;Once the script finishes it can continue parsing the HTML document, finding the &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;, adding it to the DOM and rendering it&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This happens whether you are using an inline script (as in this example) or referencing an external &lt;code&gt;.js&lt;/code&gt; script via a &lt;code&gt;src&lt;/code&gt; attribute.&lt;/p&gt;
&lt;h3&gt;Multiple &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;s&lt;/h3&gt;
&lt;p&gt;Similarly, if there are two &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tags consecutively, the browser must load and execute them in &lt;strong&gt;series&lt;/strong&gt;. The first script may affect how - or even if - the second script is loaded/executed.&lt;/p&gt;
&lt;p&gt;This problem is one of the reasons why a bundler like &lt;a href=&quot;https://webpack.js.org&quot;&gt;webpack&lt;/a&gt; is useful: it will combine two (or more) scripts together into a single JS file so you can (kind of) parallelise loading them. There are limits to this effect: there is a tradeoff between individual bundle size and number of requests made. Luckily webpack automatically optimises for this tradeoff.&lt;/p&gt;
&lt;p&gt;Due to it’s declarative nature, CSS does not suffer this problem. Two consecutive stylesheets can be fetched in &lt;strong&gt;parallel&lt;/strong&gt;. You are free to use multiple consecutive &lt;code&gt;&amp;lt;link href=&quot;...&quot; rel=&quot;stylesheet&quot;&amp;gt;&lt;/code&gt;s without much of a performance penalty.&lt;/p&gt;
&lt;h3&gt;So what?&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cs.cmu.edu/~bam/papers/percentdoneCHI85.pdf&quot;&gt;Studies&lt;/a&gt; have found that users want to see something visually displayed on the screen, otherwise they assume your site is broken. We can take advantage of this by prioritising visually displayed content, improving &lt;a href=&quot;https://blog.marvelapp.com/a-designers-guide-to-perceived-performance/&quot;&gt;&lt;em&gt;perceived&lt;/em&gt; performance&lt;/a&gt; without necessarily having to improve the actual performance.&lt;/p&gt;
&lt;p&gt;Visually displayed content - HTML, CSS and images - should be high up in the document’s source order. Scripts rarely affect the visual display (at least until the user interacts with the page) so should be de-prioritised. This answers our question about the recommendation to put scripts just before the closing &lt;code&gt;&amp;lt;/body&amp;gt;&lt;/code&gt; tag: it makes them the very last things in the document to be parsed.&lt;/p&gt;
&lt;p&gt;Occasionally you may run into a script which does affect the visual display. Widgets like date pickers are often the problem here. If you really can’t avoid it - by rewriting to render server-side - then try to isolate and shrink the script as much as possible.&lt;/p&gt;
&lt;h3&gt;Doesn’t this mean that buttons won’t work?&lt;/h3&gt;
&lt;p&gt;If you have buttons on the page that require JavaScript to work, then you may run into a problem when deferring scripts: until the script loads, those buttons won’t do anything.&lt;/p&gt;
&lt;p&gt;There are two main solutions to this, which are useful in different situations:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Make the page load quickly so that the user can’t click anything before the JS loads. This seems difficult but for pages that are light on interaction (for example, marketing pages), this is a good strategy since the page is unlikely to have many large assets that block the script from loading. If necessary, the loading order could be split up so that only visual content “above-the-fold” is prioritised above the script loading&lt;/li&gt;
&lt;li&gt;Show some kind of loading state while the JS is loading. This is usually done by making the only content of the HTML page be the loading state, then the first task in the JS is to hide the loading state and show the actual content&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Taking it further&lt;/h3&gt;
&lt;p&gt;Nowadays we actually have several more methods of optimising our script loading that I haven’t covered. &lt;a href=&quot;https://www.html5rocks.com/en/tutorials/speed/script-loading/&quot;&gt;This post&lt;/a&gt; by Jake Archibald dives deep into these, although it is somewhat out-of-date now. &lt;a href=&quot;https://web.dev/efficiently-load-third-party-javascript/&quot;&gt;This article&lt;/a&gt; by Milica Mihajlija is more up-to-date but has less detail. Both are worth a read if you’re interested in taking script loading performance further. Finally, &lt;a href=&quot;https://addyosmani.com/blog/script-priorities/&quot;&gt;this table&lt;/a&gt; from Addy Osmani is a bit more technical but gives detailed information on the priority level each script loading method is given.&lt;/p&gt;</content:encoded></item><item><title>Pocketcasts/BeardedSpice fix</title><pubDate>Fri, 24 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;So I like to listen to podcasts while at work. Nope, I don’t find it distracting if it’s specific podcasts. I like the background noise.&lt;/p&gt;
&lt;p&gt;BeardedSpice is awesome for wiring up your Mac play/pause controls to things other than iTunes. Like the Pocketcasts web app. Unfortunately it broke recently, but here’s the steps to fix.&lt;/p&gt;
&lt;p&gt;Extra bonus: it now works in the Pocketcasts Beta 🎉&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/beardedspice/beardedspice/wiki/Won&apos;t-work-issue-after-Chrome-Update-(68.0.3440.75-and-later)&quot;&gt;Allow BeardedSpice to run JS in Chrome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Restart BeardedSpice&lt;/li&gt;
&lt;li&gt;Grab the &lt;code&gt;pocketcasts-plus.bsstrategy&lt;/code&gt; file in &lt;a href=&quot;https://gist.github.com/alismith-dev/a9c506e4a0bc00588540f48be8bca1ac&quot;&gt;this gist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Open BeardedSpice preferences and import it&lt;/li&gt;
&lt;li&gt;Enjoy your podcasts 🎧&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Note: The file in the gist is adapted from &lt;a href=&quot;https://github.com/beardedspice/beardedspice/pull/767&quot;&gt;this PR&lt;/a&gt; - thanks! I hope they merge it at some point.&lt;/p&gt;</content:encoded></item><item><title>Lets Encrypt</title><pubDate>Sun, 12 Jun 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I wasn’t really planning anything, but I noticed that my about was a bit out of date and I’ve been wanting to get &lt;a href=&quot;https://letsencrypt.org/&quot;&gt;Let’s Encrypt&lt;/a&gt; installed for a while. These are some notes (mostly for my benefit) on what I did and the workarounds&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I pretty much followed &lt;a href=&quot;https://serversforhackers.com/video/letsencrypt-for-free-easy-ssl-certificates&quot;&gt;this excellent tutorial&lt;/a&gt; from Servers For Hackers.&lt;/li&gt;
&lt;li&gt;I’m not sure of the exact machine specs required, but my Digital Ocean instance was running out of memory when installing certbot for the first time. This seems to be a bug, as discussed in &lt;a href=&quot;https://github.com/certbot/certbot/issues/1883&quot;&gt;this issue&lt;/a&gt;, which mentions a swap as a possible solution, but I just temporarily upgraded the server to get more memory.&lt;/li&gt;
&lt;li&gt;The tutorial installs on a pretty vanilla nginx install, but I have a slightly more complex config to support serving alasdairsmith.co.uk and 40thiev.es (a &lt;a href=&quot;https://ghost.org/&quot;&gt;Ghost blog&lt;/a&gt;) from the same instance. In short, the blog runs on an internal port which nginx then forwards on.
&lt;ul&gt;
&lt;li&gt;This causes problems with the webroot approach as it expects a given subdirectory to be served with a given response, which is a problem as Ghost handles it’s own routing. To workaround this, I found &lt;a href=&quot;https://twindx.com/2016/03/13/lets-encrypt-setting-up-with-ghost/&quot;&gt;this blog post&lt;/a&gt; to be helpful. I didn’t copy it exactly, but got me on the right path.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Finally, it seems that Let’s Encrypt have pretty low rate limits on certificate renewals (~20 per week), which I hit in testing to make sure that my auto-renewal is working correctly. I think it’s working, but I won’t be able to find out until next week… (&lt;strong&gt;Edit&lt;/strong&gt;: yep, seems to have worked fine 🎉)&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Next Steps</title><pubDate>Sun, 31 Jan 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;TL;DR: I’m joining &lt;a href=&quot;https://www.overleaf.com/&quot;&gt;Overleaf&lt;/a&gt;. I’m sticking around in Portsmouth for a bit, but moving to London soonish™. Huge thanks to &lt;a href=&quot;https://radweb.co.uk/&quot;&gt;Radweb&lt;/a&gt; for the awesome 2 years there.&lt;/p&gt;
&lt;p&gt;I’m super excited to say that I’m going to be starting at Overleaf in mid Feburary. I’ll be working as a web developer on both the front- and back-end of their “Google Docs for scientists” product. It’ll be a new challenge for me, especially learning Ruby/Rails and LaTeX (which the software is built on).&lt;/p&gt;
&lt;p&gt;When I was little, I always imagined myself as a scientist and actually studied Biochemistry at university for a year. So I had a tiny bit of first-hand experience of the crappy tools that scientists use. Frankly it’s amazing that they get anything done. Contrasted with the web, where almost by default learning materials and tools are free and open. I’m very happy to say that I’m now working to bring these two worlds together.&lt;/p&gt;
&lt;p&gt;At least for the first couple of weeks/months, I’ll be remote/commuting from Portsmouth. But I’m looking for a place in London (recommendations welcome for places nearish to the office in King’s Cross). Hopefully I’ll still manage to get back from time to time - at least to keep up our winning streak at &lt;a href=&quot;http://www.pubhack.co.uk/&quot;&gt;Pub Hack&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Which brings me onto all the awesome people at Radweb - and in particular my fellow &lt;a href=&quot;http://devsdodesign.com/&quot;&gt;#DevsDoDesign-ers&lt;/a&gt;. They really have taught me everything I know about the web, so I wanted to finish up by saying a massive thank you to you guys.&lt;/p&gt;</content:encoded></item><item><title>Safari SVG/jQuery bug workaround</title><pubDate>Tue, 03 Mar 2015 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently at work we’ve switched over to using a SVG icon set on our Backbone project. This caused a strange bug where clicking directly on the icon in Safari with a jQuery event handler attached would throw a Javascript error:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;TypeError: undefined is not an object (evaluating &apos;a.nodeName.toLowerCase&apos;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Clicking the parent element wouldn’t throw the error.&lt;/p&gt;
&lt;p&gt;After a &lt;strong&gt;lot&lt;/strong&gt; of investigating, and a fair amount of fruitless Googling it turned out to be this &lt;a href=&quot;http://bugs.jquery.com/ticket/11352&quot;&gt;jQuery bug&lt;/a&gt;. It’s caused when an event listener is delegated from a parent element onto an &lt;code&gt;svg use&lt;/code&gt; element.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;#parent&apos;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;click&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;svg use&apos;&lt;/span&gt;&lt;span&gt;, callback)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This, unfortunately, is exactly how Backbone attaches events on &lt;code&gt;View&lt;/code&gt;s when using the &lt;code&gt;events&lt;/code&gt; hash.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Workaround&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Okay, okay, onto the bit that you’re actually interested in: the fix. In your CSS add the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;svg&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  pointer-events&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;none&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You’ll also need to make sure that click events are attached to a parent element, not the SVG itself. Clicking directly on the SVG still works as long as the parent wraps or “covers” the SVG.&lt;/p&gt;
&lt;p&gt;Huge thanks to this &lt;a href=&quot;https://css-tricks.com/gotchas-on-getting-svg-into-production/&quot;&gt;CSS Tricks&lt;/a&gt; article for pointing out the fix. I just wish it wasn’t quite so buried, and maybe mentioned Safari so that it came up in Google…&lt;/p&gt;</content:encoded></item><item><title>Fixing Apache On Yosemite</title><pubDate>Sun, 19 Oct 2014 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;So it’s that time of year: upgrading OSX and fixing all the Apache brokenness that inevitably follows. These are just some quick notes on how to fix it. ProTip™: remember to restart Apache after making a change to the config!&lt;/p&gt;
&lt;p&gt;Primarily, the problems seem to be caused by Apple bumping the installed Apache from 2.2 to 2.4. Check out Apache’s &lt;a href=&quot;https://httpd.apache.org/docs/2.4/upgrading.html&quot;&gt;upgrade notes&lt;/a&gt; for the full details.&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;index.html.en&lt;/code&gt; in document root&lt;/h4&gt;
&lt;p&gt;An &lt;code&gt;index.html.en&lt;/code&gt; file is added to the default document root (mine is &lt;code&gt;/Library/WebServer/Documents&lt;/code&gt;), which overrides the &lt;code&gt;localhost&lt;/code&gt; route. Its unnecessary and can be removed.&lt;/p&gt;
&lt;h4&gt;Index on &lt;code&gt;localhost&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;For some reason, the &lt;code&gt;Indexes&lt;/code&gt; option is defaulted off in the new Apache config for the document root directory. This means that the list of directories won’t be shown. Add &lt;code&gt;Indexes&lt;/code&gt; to the &lt;code&gt;Options&lt;/code&gt; to fix this.&lt;/p&gt;
&lt;h4&gt;Vhost permissions&lt;/h4&gt;
&lt;p&gt;Apache 2.4 changes the syntax for permissions, breaking my default vhost setup, giving 403 errors on any locally-served site. Switch out any &lt;code&gt;Allow from All&lt;/code&gt; lines with &lt;code&gt;Require all granted&lt;/code&gt; in &lt;code&gt;Directory&lt;/code&gt; blocks to fix this.&lt;/p&gt;
&lt;h4&gt;Enable PHP&lt;/h4&gt;
&lt;p&gt;Apache doesn’t enable PHP by default, so uncomment the line loading the PHP module (&lt;code&gt;LoadModule php5_module ...&lt;/code&gt;). Yosemite comes with 5.5 installed, but I’ve got 5.6 installed through &lt;code&gt;homebrew&lt;/code&gt;. Switch out the module path to wherever &lt;code&gt;homebrew&lt;/code&gt; installs it (check &lt;code&gt;brew info php56&lt;/code&gt;).&lt;/p&gt;
&lt;h4&gt;Fix broken PHP 5.6&lt;/h4&gt;
&lt;p&gt;No idea why, but I had to reinstall PHP to get it working correctly. Something about Apache not being able to read the install correctly, possibly related to &lt;a href=&quot;https://github.com/Homebrew/homebrew-php/issues/1383&quot;&gt;this issue&lt;/a&gt;. Run &lt;code&gt;brew reinstall php56&lt;/code&gt;.&lt;/p&gt;</content:encoded></item><item><title>Goodwood 2014</title><pubDate>Mon, 30 Jun 2014 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Me and my dad have been watching F1 for about as long as I can remember. We’ve been to Goodwood’s Festival of Speed event a couple of times before, and it’s a great chance to get right up to the cars. It’s pretty damn rare these days in F1.&lt;/p&gt;
&lt;p&gt;So anyway, we had a look around the paddock, watched some of the runs up the hill and got up to see the rally stage at the top. Here’s some of the pictures:&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;Some pretty neat panoramas created by Google+‘s auto-awesome feature. (As much as you can hate on it, this stuff is pretty cool).&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;Totally got lucky with the timing here. The cars were just pulling back into the paddock after their timed run (much easier to take pictures…) and we were just in the right place at the right time.&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;Some of the cars in the paddock. To be honest, it was a bit of a shame that there wasn’t too many 2014 cars. They can’t be run due to the new testing regs but I hoped they might show them off. Would been interesting to see/hear them in person.&lt;/p&gt;
&lt;p&gt;The classic cars are always nice to see, but the Schumacher collection of 1992-1994 cars was a nice tribute. (Hoping for a speedy recovery, Michael :) )&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;You can get really close to the rally, almost to the point of being dangerous - in most places there’s only a wire and wood fence separating you from the cars… I’m not really up on rally, as I am with F1, but it’s impressive to see the speed carried through the forest. Unfortunately it’s a bit dark under the trees and all of my pictures were a bust. I did, however, get to see Sebastian Loeb really going for it in his new Citroen.&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;Finally, here’s Jackie Stewart in his - I’m assuming it’s his judging from the Stewart tartan on the seat - classic Mercedes heading back down the hill.&lt;/p&gt;
&lt;p&gt;All in all, it was a pretty fun day out, despite the ridiculous sunburnt face I’m now sporting.&lt;/p&gt;</content:encoded></item><item><title>Exciting News</title><pubDate>Sat, 23 Jun 2012 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;I haven’t blogged in a while, which seems to be the way I start every post here…&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;If you’ve visited my nameplate (&lt;a href=&quot;http://alasdairsmith.org.uk&quot;&gt;alasdairsmith.org.uk&lt;/a&gt;) site in the last few months you might have seen a big banner at the top, shamelessly promoting myself :) I’m really pleased to announce that I can now take it down! For the next year, I’m officially part of the small but growing team at &lt;a href=&quot;http://www.radweb.co.uk&quot;&gt;Radweb&lt;/a&gt;. We (feels weird to write that) create awesome stuff for the web, from WordPress and Magento sites to full blown, built from the ground up, web apps.&lt;/p&gt;
&lt;p&gt;I’m going to mainly be working on &lt;a href=&quot;http://inventorybase.com&quot;&gt;InventoryBase&lt;/a&gt;, a brand new web app that is designed to help landlords keep track of their inventories. We just released a promo video, with an insanely catchy tune that’s been playing all week in the office:&lt;/p&gt;

&lt;p&gt;InventoryBase is built on BackboneJS, with a backend built from FuelPHP. This is a pretty big step up in level of coding complexity for me, and I’m really excited to dive in some more. At the moment it looks like I’ll be full time on this project at least until September, to help bring it fully up to it’s potential.&lt;/p&gt;
&lt;p&gt;In addition, I’m going to open-source my big coursework project that I’ve been working on for the last couple of months. Check the &lt;a href=&quot;http://40thiev.es/wikivle-open-sourced&quot;&gt;blog post&lt;/a&gt;, or view the &lt;a href=&quot;https://github.com/40thieves/WikiVLE&quot;&gt;source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;PS. Try the super-secret cheat code on &lt;a href=&quot;http://inventorybase.com&quot;&gt;inventorybase.com&lt;/a&gt; - press up, up, down, down, left, right, left, right, B, A on your keyboard to see what I mean.&lt;/p&gt;</content:encoded></item><item><title>WikiVLE open sourced!</title><pubDate>Sat, 23 Jun 2012 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;WikiVLE is a Virtual Learning Environment that I built for my Web Client &amp;amp; Server coursework in Winter/Spring 2012&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;It’s a VLE based around the concept of a wiki - all users can work together to create awesome notes about a particular topic that they’re learning about. It’s kind of a focussed Wikipedia (but nowhere near as good!). Users can upload files such as Powerpoint slides, PDFs and images; edit notes using &lt;a href=&quot;http://daringfireball.net/projects/markdown/&quot;&gt;Markdown&lt;/a&gt; syntax and log in using the built in account system or via the University of Portsmouth’s LDAP server.&lt;/p&gt;
&lt;p&gt;I’ve decided to open source it, mainly because I’m a big proponent of open source and I want to practice what I preach, but also because I wanted you guys to help me out! Hopefully we can work together (using the magic of Git) to make it awesome :)&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/40thieves/WikiVLE&quot;&gt;source&lt;/a&gt; is available now on Github, and I’m planning to put up a live demo sometime soon. If you’re interested get in touch (see &lt;a href=&quot;http://alasdairsmith.org.uk&quot;&gt;alasdairsmith.org.uk&lt;/a&gt;) or fork the repo and submit a pull request.&lt;/p&gt;</content:encoded></item><item><title>Government Sponsored Identity APIs</title><pubDate>Thu, 02 Feb 2012 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;I came across this &lt;a href=&quot;http://radar.oreilly.com/2012/01/with-govuk-british-government.html&quot;&gt;interesting article&lt;/a&gt; on O’Reilly Radar yesterday about &lt;a href=&quot;http://gov.uk/%22&quot;&gt;gov.uk&lt;/a&gt;, the new (beta-ish) upgrade to &lt;a href=&quot;http://direct.gov.uk&quot;&gt;direct.gov.uk&lt;/a&gt;. It’s mostly about how the site was built (yay for open source), comparing with traditional government IT development.&lt;/p&gt;
&lt;p&gt;But there’s a really intriguing nugget in there - hints of an “idenity services” API. Here’s the full quote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;With regard to API’s, our long term plan is to ‘go wholesale,’ by which we mean expose data and services via API’s… We are at the early stages of mapping out key attributes, particularly around identity services, so to be fair it’s early days yet.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’m presuming by “identity services” they mean ways of programically identifying someone’s online account as an actual person - somewhat similar to &lt;a href=&quot;http://oauth.net&quot;&gt;OAuth&lt;/a&gt;. In fact, since the development is all about open source, I wouldn’t be surprised if they actually built it with OAuth.&lt;/p&gt;
&lt;p&gt;This is a really intriguing path for government to take, and I’m pretty sure that I would be controversial… I know for a fact that many (especially in the US) distrust government getting involved in the web and would hate this idea.&lt;/p&gt;
&lt;p&gt;On the other hand, this has potential for some really great innovation in &lt;a href=&quot;http://radar.oreilly.com/2010/05/what-is-gov-20-come-find-out-t.html&quot;&gt;Gov 2.0&lt;/a&gt; - the concept of “Government as a platform”. What if I was able to sign in to something like my bank account, or something similar with my driving license? Or my passport? This admittedly has some flaws, as there’s nothing to stop the government tracking you this way. But, again, some would consider this no worse than Google or some other corporation tracking you.&lt;/p&gt;
&lt;p&gt;I personally can’t make my mind up whether I’d use something like this. What I will say is that I think that they should go right ahead and test it out, as the worse that can happen is that nobody would use it… (Actually they’d probably be torn apart for spending “X million pounds on failed IT project”)&lt;/p&gt;
&lt;p&gt;Alternatively, I could be reading &lt;strong&gt;way&lt;/strong&gt; too much into a single quote and they’re not considering anything like an identity API.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content:encoded></item><item><title>We Don&apos;t Need No (Computer Science) Education</title><pubDate>Tue, 17 Jan 2012 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;(&lt;a href=&quot;http://www.flickr.com/photos/x-ray_delta_one/4665389330/&quot;&gt;x-ray delta one&lt;/a&gt; on Flickr)&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;I’m cautiously optimistic about Michael Gove’s reform of ICT to become more like Computer Science. It’s deperately needed (and has been for about 10 years) as outlined in these articles in the BBC and the Guardian:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bbc.co.uk/news/education-16493929&quot;&gt;http://www.bbc.co.uk/news/education-16493929&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.guardian.co.uk/politics/2012/jan/11/michael-gove-boring-it-lessons&quot;&gt;http://www.guardian.co.uk/politics/2012/jan/11/michael-gove-boring-it-lessons&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I personally feel like I was massively let down by IT lessons when I was at school. I never felt like IT lessons were remotely fun or interesting - they were typing lessons merely that taught us how to be good worker drones. I was far more interested in science (which I still love), and so I started Biochemistry at Cardiff. I found that this wasn’t the subject for me, and started to become more and more interested in the web and it’s possibilities. Now I’m studying Web Technologies and I love mucking around with code. I’m extremely lucky to be able to do switch like that, and I’m sure that there’s others out there who aren’t.&lt;/p&gt;
&lt;p&gt;The revamp is great news as it seems to focus much more on creating rather than only consuming, a path that I think has dangerous consequences.&lt;/p&gt;
&lt;p&gt;However (you knew it was coming), I’m not convinced about the so called “open source” curriculum. Feels very much like a buzz word to please the geeks, rather than a concerted effort to change across the country. If “schools and teachers [have] freedom over what and how to teach” what’s to stop a school that is unmotivated and/or incapable of updating the curriculum from doing so?&lt;/p&gt;
&lt;p&gt;If we’re serious about creating a new generation of &lt;a href=&quot;http://makezine.com&quot;&gt;makers&lt;/a&gt; and [hackers](&lt;a href=&quot;http://en.wikipedia.org/wiki/Hacker_(programmer_subculture)&quot;&gt;http://en.wikipedia.org/wiki/Hacker_(programmer_subculture)&lt;/a&gt; then the government needs to step up and provide a concrete curriculum. I realise that this top-down approach is very much against the hacker mentality, but I worry that we’ve neglected technology education for so long that we’ve lost the skills to teach it.&lt;/p&gt;
&lt;p&gt;I’m also skeptical of how the government will handle this guidance, and only listen to the huge corporations that have pushed hard for this. While we must thank them for bankrolling this change Microsoft, Google, IBM and others should have equal input as (real) open source initiatives and small scale hackers. &lt;a href=&quot;http://www.raspberrypi.org&quot;&gt;Raspberry Pi&lt;/a&gt; springs to mind. As does &lt;a href=&quot;http://appsforgood.org&quot;&gt;Apps for Good&lt;/a&gt;. And &lt;a href=&quot;http://www.codecademy.com&quot;&gt;Codecademy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So that’s education sorted. Now we just need to overturn the Digital Economy Act and invest heavily in internet infrastructure, and we’ll be golden :)&lt;/p&gt;</content:encoded></item><item><title>Is a &apos;peer reviewed web&apos; possible? This and many more questions about Hypothes.is</title><pubDate>Tue, 25 Oct 2011 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;The service promises to check, verify and critique content on every web site in the world. Using a system of browser plugins, URL shorteners, a destination site and other approaches they plan to lay comments over web pages. Comments? You laugh? Well they promise to make “better quality” comments by ranking and classifying them, with sentiment analysis and a reputation system that will in effect produce community peer review.&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;If this works, then I agree with &lt;a href=&quot;http://www.readwriteweb.com/archives/hypothesis_a_peer-review_layer_for_the_internet.php&quot;&gt;Marshall Kirkpatrick&lt;/a&gt; (fantastic journalist), and I’m very excited to see more. The ability to crowdsource credible and relevant knowledge right in line with the original content would greatly improve the quality of information on the internet, which increasingly affects the world around us.&lt;/p&gt;
&lt;p&gt;However (you knew it was coming), I’m skeptical for a few reasons:&lt;/p&gt;
&lt;p&gt;Firstly, it seems to depend quite a lot on the sentiment analysis which they’re apparently calling “stance”. The &lt;a href=&quot;http://vimeo.com/29633009&quot;&gt;video&lt;/a&gt; says they can pick up on a whole list of sentiments, which will be used to filter/rank the comments. I’ve not yet seen sentiment analysis that can do this accurately, despite the masses of data we have out there - unless they have an incredible new breakthrough (which I guess is possible) then I’m not sure how they can properly rank comments.&lt;/p&gt;
&lt;p&gt;Another technology that has been promised many times and mostly failed is reputation ranking systems, again one of the tent poles holding up Hypothes.is. I’m yet to be convinced that reputation ranking systems that cover the entirety of human knowledge are even possible. Without artificial intelligence (and even then) how is it possible to accurately rank every aspect of a person’s knowledge?&lt;/p&gt;
&lt;p&gt;Depending on mainly on these technologies (as the video suggests to me) leads me to think that the supposed moderation will dodgy at best. Of course, I could be wrong especially if some crowdsourcing of comments is involved.&lt;/p&gt;
&lt;p&gt;Next, who gets to pronounce the supposed domain experts? People who Hypothes.is are “engaging” to seed the service with quality knowledge - who are they? And how can they possibly have experts on every topic on the internet? Do their partners (so far: the Internet Archive, and the founders of Slashdot) have a say? Aren’t we supposed to be avoiding a “top down editorial bureaucracy”?&lt;/p&gt;
&lt;p&gt;Now I must admit that many of these fears have been allayed because I’ve found out that Hypothes.is is a non-profit. Neutrality is one of their 12 principles, but the service would be massively less useful if I suspected a basis.&lt;/p&gt;
&lt;p&gt;What are they going to do to get me to write a comment on Hypothes.is instead on in a tweet, or a blog, or a Google+ post? In fact, there’s no mention of the fact that a lot of commenting on stories these days happens elsewhere, not in the comments section. I actually happen to quite like this current system quite a lot - I have the chance to expand my thoughts and opinions right here. I would like more ability to link directly to a paragraph though - just like &lt;a href=&quot;http://scripting.com/stories/2010/11/29/theNyTimesLeadsAgain.html#p3481&quot;&gt;Dave Winer’s blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, the video brings up the problem of cold launch strategies. They address this, to an extent, in their FAQ saying that all social networks have the same problem and that they’ll make the service useful from the start. What actually happens remains to be seen, as I say I hope it does work.&lt;/p&gt;
&lt;p&gt;I’m also intrigued by the “distributed” nature: is it going to try to de-centralise comments? Can I install a version on my server? If so, I’m loving this - the ability to control my content on my server is an important data perservation point. Decentralisation is a key concept of the internet, and it’s high time that comments went the same way.&lt;/p&gt;
&lt;p&gt;One more question: The video also mentions videos - how will this work, especially with the dominance of Flash? Even YouTube (backed by the mighty Google) can’t really do comments on videos properly. I’d quite like to see audio mentioned too…&lt;/p&gt;
&lt;p&gt;I really hope they manage to answer all my questions, and if they manage to pull it off then I’m extremely excited. I really like their 12 principles, especially open source, transparent and pseudonymous - all things that are &lt;a href=&quot;http://gigaom.com/2011/03/04/newspapers-need-to-be-of-the-web-not-just-on-the-web/%22%3E&quot;&gt;“of the web”&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>A Very SnICE Summer</title><pubDate>Thu, 15 Sep 2011 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Cross-posted from my &lt;a href=&quot;http://kandersteg.posterous.com&quot;&gt;Kandersteg blog&lt;/a&gt;. Ed.’s note: Posterous shut down on 30th April 2013, so this blog was discontinued.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So that’s it for another summer, I’m back at home getting bored and wishing I was still in Kandersteg. I loved every moment of it, from working on the glacier to meeting a whole bunch of new friends. I’ve picked out some of my favourite photos from the whole season&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;I’m super lucky to have got the opportunity to have done some really fun and rewarding jobs while in this amazing place - working with groups who’ve never even seen a glacier, getting up to the Frundenjoch, &lt;a href=&quot;http://kandersteg.posterous.com/gasternspitz%22&quot;&gt;hiking&lt;/a&gt; and climbing on my days off, getting a chance to show the other staff how awesome &lt;a href=&quot;http://kandersteg.posterous.com/snice-training&quot;&gt;SnICE&lt;/a&gt; is, my group &lt;a href=&quot;http://kandersteg.posterous.com/1st-finch-at-kisc&quot;&gt;1st Finch visiting&lt;/a&gt; and generally just hanging out with some really cool people.&lt;/p&gt;
&lt;p&gt;I don’t want to sound like an Oscar winner, but a few thanks are in order - firstly to Tom and Matt for giving the job in the first place! To Jemma, Kim and Mick for being the best SnICE team ever, and finally to all the rest of the Summer 2011 Staff for simply being awesome - I’m gonna miss you guys :)&lt;/p&gt;
&lt;p&gt;I’ve got everything crossed hoping that they’ll need my help in the winter, for the ski weeks because I loved that so much last winter. And after that, I’m not going back next summer (probably) but I’ll be back sometime in the future…&lt;/p&gt;
&lt;p&gt;Thanks once again KISC, you’ve been amazing.&lt;/p&gt;</content:encoded></item><item><title>Back To The &apos;Steg</title><pubDate>Thu, 02 Jun 2011 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Cross-posted from my &lt;a href=&quot;http://kandersteg.posterous.com&quot;&gt;Kandersteg blog&lt;/a&gt;. Ed.’s note: Posterous shut down on 30th April 2013, so this blog was discontinued.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I’m super excited to say that in just under a week, I’ll be back at &lt;a href=&quot;http://www.kisc.ch&quot;&gt;KISC&lt;/a&gt; :)&lt;/p&gt;
&lt;p&gt;I’m gonna be working as a Snow &amp;amp; Ice (SNICE) Guide, which means that I’ll be taking groups up onto a couple of glaciers to get geared up with crampons, ice axes and ropes. We’ll be teaching some basic glacier techniques - jumping over crevasses, &lt;a href=&quot;https://www.youtube.com/watch?v=YyRF6AjAI94&quot;&gt;ice axe self-arrest&lt;/a&gt;, crevasse rescue - some ice climbing and trekking. I &lt;a href=&quot;http://kandersteg.posterous.com/frunden-glacier-expedition&quot;&gt;tried it out last summer&lt;/a&gt; and I’ve picked a few of the best photos:&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;I absolutely loved trying it last year, and can’t wait to do some of the expeditions I didn’t get a chance to do. I’ll be staying overnight in mountain huts a lot, which is great, and I’ll be working more with other staff which will be awesome!&lt;/p&gt;
&lt;p&gt;I really can’t wait to get out there especially as a whole bunch of my friends from last summer have also got jobs, and I’ll get to see them for a whole 2 months :D Plus, my scout group is coming to stay for 2 weeks, so I’m getting a few days off to help out with their programme.&lt;/p&gt;
&lt;p&gt;As I did last summer (and in the winter), I’ll be posting photos here and writing up what I’ve been doing - hopefully I’ll do that more this time! But I won’t be online as much as I am now - my tweeting will definitely drop off (relief to some!) - hopefully I’ll pick up on @replies and emails.&lt;/p&gt;
&lt;p&gt;7 days and counting…&lt;/p&gt;</content:encoded></item><item><title>Githubbing Science And Reputation</title><pubDate>Sun, 10 Apr 2011 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;(Image from &lt;a href=&quot;http://xkcd.com&quot;&gt;xkcd.com&lt;/a&gt;)&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;I wrote last month about making science into a open-source software project, which discusses the pros and cons of using forking and “bug-tracking” for academic papers. Much of what I was trying to describe is a GitHub for science, a concept that &lt;a href=&quot;http://twitter.com/marciovm&quot;&gt;@marciovm&lt;/a&gt; has blogged about recently.&lt;/p&gt;
&lt;p&gt;In his &lt;a href=&quot;http://marciovm.com/i-want-a-github-of-science&quot;&gt;I Want a GitHub of Science&lt;/a&gt; post he takes a different angle on the idea, in which the git model is used to explore how science could break out of the “old-media” style publishing. He says that scientists are being judged (when applying for jobs) based on their publishing record, the more prestigious journals, the better. However these journals cannot publish every good paper that they come across, which “exposes the system to vulnerabilities common to any decision by committee — especially semi-secret committee — such as lack of agility, an aversion to disruptive innovation, and the tendency of committee members (and their friends) to be more equal in their own eyes than anyone else”. These editorial decisions are having an effect on people’s careers, and on science as a whole.&lt;/p&gt;
&lt;p&gt;He goes on to propose an alternative publishing structure, similar to GitHub, where everyone can publish their papers, and alternative metrics are used to sort the wheat from the chaff. He also explains that it would encourage authors to publish more of their data, helping the Open Science efforts.&lt;/p&gt;
&lt;p&gt;I like the “long-tail” aspect of this model - by publishing more science, more can be studied and examined. However I think that the article misses some crucial aspects of GitHub. As Marcio points out, the git control system was developed by the Linux community, to help co-ordinate work on the Linux code repository. This collaboration is key to the success of GitHub - anyone can fork the code and contribute to the community. This is where my post about forking science papers comes in - anyone can contribute and collaborate on a science project with GitHub-like software (let’s call it ScienceHub). This would also be reflected on their ScienceHub profile and impact graph, the focus of Marcio’s post. For me, collaboration is key, and ultimately that’s what GitHub is good at.&lt;/p&gt;
&lt;p&gt;I do have slight concerns over the single-point-of-failure that something like ScienceHub would become - although these fears are allayed if an open-source solution is found.&lt;/p&gt;</content:encoded></item><item><title>Placement</title><pubDate>Sat, 05 Mar 2011 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Ed’s note: I got hired! See my &lt;a href=&quot;./exciting-news&quot;&gt;update post&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This post is intended as unashamed self promotion for my placement year in the computing industry. Hopefully it’ll answer some questions about what a placement year entails and what you might get from it.&lt;/p&gt;
&lt;p&gt;So first of all, &lt;strong&gt;what is a placement year?&lt;/strong&gt; Essentially it’s a full year where you get an intern working for you. They should take on a role within the company, just like any other employee, and contribute to helping the business. There is a focus on developing skills so that they can become a more rounded employee in the future.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why do a placement year?&lt;/strong&gt; It’s a great chance for starting some recruitment, and to give some training to someone who may well want to work for you in the future. It offers a lost cost way to bring new skills and lots of enthusiasm into the workplace, possibly onto projects which may have been on the backburner. Existing staff are freed up to complete more complex tasks, and it allows them to develop management skills while mentoring students. There’s a more complete list &lt;a href=&quot;http://www.port.ac.uk/departments/faculties/facultyoftechnology/supportforbusiness/studentplacementscheme/#benefits&quot;&gt;available here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Many other companies in the sector, small to large, take on placement students and have been extremely happy with them, and go on to employ them once they graduate. Here’s a &lt;a href=&quot;http://www.port.ac.uk/departments/faculties/facultyoftechnology/supportforbusiness/studentplacementscheme/#experiences&quot;&gt;few examples&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you have to do to offer a placement?&lt;/strong&gt; You have to satisfy the five following criteria (these are set by the university):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Industrial Placement should be for a minimum period of 36 fulltime weeks (excluding holiday).&lt;/li&gt;
&lt;li&gt;The type of work undertaken on the Placement should be relevant to the Student’s degree/studies. For instance, a Business Information Technology Student’s Placement should be Business/IT focused, - i.e. being involved in the Business and Information Technology systems within the Company&lt;/li&gt;
&lt;li&gt;The Employer should treat the student as a normal member of staff, particularly in respect of induction, training and Health &amp;amp; Safety practices&lt;/li&gt;
&lt;li&gt;The Employer should recognise the contract as an Industrial Placement, i.e. a fixed term contract for approx 12 months with no further commitment on either part beyond this.&lt;/li&gt;
&lt;li&gt;The Employer should allow the Student and the Student’s supervisor/line manager to be visited during the Placement by a member of academic staff (to review progress and discuss other issues that may arise).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now down to the real question: &lt;strong&gt;Why offer me a placement?&lt;/strong&gt; I’m a &lt;a href=&quot;http://www.port.ac.uk/courses/coursetypes/undergraduate/BScHonsWebTechnologies&quot;&gt;Web Technologies&lt;/a&gt;, at Portsmouth University. I am very enthusiastic about creating new applications for the web, and for mobile. The explosion of HTML5 and it’s related technologies point toward a bright future of the web which I want to be part of.&lt;/p&gt;
&lt;p&gt;In my first year of the course, which was a common year for all School of Computing students. I studied a variety of units, which cover a generalised look at the field of Computing. &lt;a href=&quot;http://uws.port.ac.uk/unitwebsearch/displayUnitDetails.do?objectId=155110206&quot;&gt;Web Authoring and Design&lt;/a&gt;, which gave me a grounding in HTML and CSS, and the basics of running a web server &lt;a href=&quot;http://uws.port.ac.uk/unitwebsearch/displayUnitDetails.do?objectId=140053927&quot;&gt;Introduction to Structured Programming&lt;/a&gt; in which I learnt the Python language; &lt;a href=&quot;http://uws.port.ac.uk/unitwebsearch/displayUnitDetails.do?objectId=134178210&quot;&gt;Object Orientated Programming in Java&lt;/a&gt; where I learned the basics of object orienatated programming through the use of Java; &lt;a href=&quot;http://uws.port.ac.uk/unitwebsearch/displayUnitDetails.do?objectId=170168972&quot;&gt;Computer Organisation&lt;/a&gt; which covered a range of subjects on the fundamental concepts of Computing; &lt;a href=&quot;http://uws.port.ac.uk/unitwebsearch/displayUnitDetails.do?objectId=134174559&quot;&gt;Social Aspects of Computing&lt;/a&gt;, where I looked at the ways computers have had an affect on ethical, economical, social, legal and political issues &lt;a href=&quot;http://uws.port.ac.uk/unitwebsearch/displayUnitDetails.do?objectId=170170356&quot;&gt;Developing Information Systems&lt;/a&gt; which gave me an introduction to project management and UML; &lt;a href=&quot;http://uws.port.ac.uk/unitwebsearch/displayUnitDetails.do?objectId=174763412&quot;&gt;Introduction to Data Communications&lt;/a&gt; in which I learnt the basics of networking and finally the &lt;a href=&quot;http://uws.port.ac.uk/unitwebsearch/displayUnitDetails.do?objectId=117777631&quot;&gt;Origins of Computing&lt;/a&gt; unit, where I looked at where computers have come from and what factors went into their development.&lt;/p&gt;
&lt;p&gt;My first year results are shown below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web Authoring and Design: 87%&lt;/li&gt;
&lt;li&gt;Introduction to Structured Programming: 86%&lt;/li&gt;
&lt;li&gt;Object Orientated Programming in Java: 78%&lt;/li&gt;
&lt;li&gt;Social Aspects of Computing: 91%&lt;/li&gt;
&lt;li&gt;Computer Organisation: 87%&lt;/li&gt;
&lt;li&gt;Origins of Computing: 85%&lt;/li&gt;
&lt;li&gt;Introduction to Data Communications: 85%&lt;/li&gt;
&lt;li&gt;Developing Information Systems: 74%&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Overall I achieved a first class honours grade, although the first year does not count toward the final mark.&lt;/p&gt;
&lt;p&gt;My second year (which I am currently studying) is much more focused on Web Technologies, with units based around &lt;a href=&quot;http://uws.port.ac.uk/unitwebsearch/displayUnitDetails.do?objectId=197810806&quot;&gt;building web sites&lt;/a&gt;, &lt;a href=&quot;http://uws.port.ac.uk/unitwebsearch/displayUnitDetails.do?objectId=174925847&quot;&gt;learning PHP and Javascript&lt;/a&gt;, &lt;a href=&quot;http://uws.port.ac.uk/unitwebsearch/displayUnitDetails.do?objectId=242508870&quot;&gt;advanced Java programming&lt;/a&gt;, &lt;a href=&quot;http://uws.port.ac.uk/unitwebsearch/displayUnitDetails.do?objectId=238684382&quot;&gt;web-based project management&lt;/a&gt;, &lt;a href=&quot;http://uws.port.ac.uk/unitwebsearch/displayUnitDetails.do?objectId=174818479&quot;&gt;databases&lt;/a&gt;, &lt;a href=&quot;http://uws.port.ac.uk/unitwebsearch/displayUnitDetails.do?objectId=190458817&quot;&gt;understand Unix&lt;/a&gt; and &lt;a href=&quot;http://uws.port.ac.uk/unitwebsearch/displayUnitDetails.do?objectId=197641211&quot;&gt;human-computer interaction&lt;/a&gt;. At time of writing I am in my first semester, I am working towards building an online shop for an external client, as well as designing and building a database and investigating data structures through advanced Java programs.&lt;/p&gt;
&lt;p&gt;I love to learn more skills and technologies, and to increase my knowledge base. I think this would mean that I would be able to get quickly up to speed with projects and tasks while on my placement year. This is also one of the reasons I would like to do a placement year, I as hope that there will be many opportunities for learning new skills. I also have good organisational skills, which allow me to keep track of time, prioritise tasks and work efficiently. I have previously worked as an intern at the &lt;a href=&quot;http://www.redcross.org.uk&quot;&gt;British Red Cross&lt;/a&gt; in the digital fundraising team, which gave me great experience of the office environment. I believe that I would be able to integrate easily into any office workflow. I also volunteered at &lt;a href=&quot;http://www.kisc.ch&quot;&gt;Kandersteg International Scout Centre&lt;/a&gt; for 3 months, working as a Short Term Staff Hike Guide, which involved leading groups on hikes around the Swiss Alps. I also returned to KISC again over this summer, as a Snow &amp;amp; Ice Guide, which is similar but teaching mountaineering skills. I developed my leadership qualities, people skills and problem-solving abilities greatly, and was entrusted with risk management to lead groups safely over glaciers. You can see more and some of my photos on my &lt;a href=&quot;http://kandersteg.posterous.com&quot;&gt;Kandersteg blog&lt;/a&gt; &lt;em&gt;(Ed’s note: Posterous shut down on 30th April 2013, so this blog was discontinued. I may try to revive it sometime, when I’m finished tidying up this site)&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I actively follow technology and web news, reading many blogs and listening to various podcasts, which I believe means I have a good idea of current theories and trends in Computing and on the web.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What else am I interested in?&lt;/strong&gt; I do quite a few activities outside of my university work. I been involved in Scouting since I was very young, and I continue to help out with &lt;a href=&quot;http://1finch.org.uk&quot;&gt;my group&lt;/a&gt; whenever I am at home. I am an Assistant Scout leader, which involves planning weekly meetings, running activities and assisting where needed. I have also planned out and organised the annual summer camp, which unfortunately I could not attend, because I was working at KISC.&lt;/p&gt;
&lt;p&gt;Scouting has also allowed me to do a lot of outdoor sports, another big interest of mine. I love hiking and have been walking many times in North Wales, and other places in Britain. I completed the &lt;a href=&quot;http://www.thethreepeakschallenge.co.uk&quot;&gt;3 Peaks Challenge&lt;/a&gt; in 23 hours and 49 minutes last year. I also enjoy climbing, and have joined the &lt;a href=&quot;http://www.upmcc.org.uk&quot;&gt;university climbing club&lt;/a&gt;, which run twice-weekly training sessions. I hoping to improve my abilities a lot this year.&lt;/p&gt;
&lt;p&gt;I have played Ultimate Frisbee for several years, having joined the club while at Cardiff University. I immensely enjoy playing the sport, improving my abilities and competing against others. &lt;strong&gt;Do I have a CV?&lt;/strong&gt; Certainly, my CV is available via Google Docs here: &lt;a href=&quot;http://j.mp/alasdairsmithcv&quot;&gt;http://j.mp/alasdairsmithcv&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How can I find out more?&lt;/strong&gt; You can contact me via &lt;a href=&quot;mailto:alasdairsmith100@gmail.com&quot;&gt;email&lt;/a&gt;, &lt;a href=&quot;https://plus.google.com/108476724320134244901&quot;&gt;Google+&lt;/a&gt; or &lt;a href=&quot;http://twitter.com/40_thieves&quot;&gt;Twitter&lt;/a&gt;, and you can also have a look around my &lt;a href=&quot;http://40thiev.es&quot;&gt;blog&lt;/a&gt; or my &lt;a href=&quot;http://alasdairsmith.org.uk&quot;&gt;main site&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;UPDATE (15/10/2011): Updated to include info about second year at Portsmouth, and second summer at KISC.&lt;/p&gt;</content:encoded></item><item><title>Thoughts About Open Source Science Research</title><pubDate>Mon, 14 Feb 2011 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;(Image thanks to &lt;a href=&quot;http://www.flickr.com/photos/cudmore/4079784/&quot;&gt;cudmore&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/File:Wikipedia-logo-v2.svg&quot;&gt;Wikimedia&lt;/a&gt;)&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;This post was inspired by this blog post which I came across yesterday, and the &lt;a href=&quot;http://storify.com/40_thieves/science-as-a&quot;&gt;subsequent discussion&lt;/a&gt; with &lt;a href=&quot;http://twitter.com/cameronneylon&quot;&gt;@cameronneylon&lt;/a&gt; on Twitter, which refined my thoughts and brought up many of the questions below.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://lemire.me/blog/archives/2011/02/11/taking-scientific-publishing-to-the-next-level/&quot;&gt;The blog post&lt;/a&gt;, discusses ways of turning scientific research papers into something more akin to a free and open source software (FOSS) project. He suggests the use of ‘bug reports’ - places where errors in the paper can be pointed out and fixed - something widely used in software development (see &lt;a href=&quot;http://en.wikipedia.org/wiki/Bugzilla&quot;&gt;bugzilla&lt;/a&gt;. He goes on to suggest that if an author is unwilling to make changes to his/her paper, then a derivative paper could be produced that ‘patches’ it to remove perceived errors and improve presentation.&lt;/p&gt;
&lt;p&gt;This got me thinking about the branching or forking model used to develop open source software, such as Linux (see &lt;a href=&quot;http://upload.wikimedia.org/wikipedia/commons/9/9a/Gldt1009.svg&quot;&gt;this&lt;/a&gt; rather impressive diagram). Code in an open source project can be ‘forked’ to create an exact copy, which can then be worked on to develop new ideas without damaging the original code. This branch can exist on it’s own (as with many Linux distributions) or it can be merged back into the main branch if the new code improves it.&lt;/p&gt;
&lt;p&gt;I think that this model could also be applied to scientific research. In this way a paper could be published (in the tradition manner or not) which could then be analysed and reviewed for ‘errors’. I put errors in quotemarks for a reason - what makes an error could be very subjective, and the original paper could be distorted if anyone was allowed to go in and edit it. A wiki model works well for Wikipedia, as there is a large and committed community that is constantly monitoring against vandalism (thanks Cameron for pointing that out!). This probably would not scale so well for niche communities studying scientific papers, and would generally drive trust of the paper down.&lt;/p&gt;
&lt;p&gt;A more ideal model would copy the branching idea from FOSS projects - the original paper still exists but researchers can fork an exact copy that they can improve upon. This protects the original paper (the main branch), while allowing more ideas to be tested. This could spawn an entirely new paper (if a new idea merits this), or it could be merged back into the main branch. This merging could involve small changes (like changing some presentation) or errors in data could be fixed. Addition data could be added. A merge would only happen if comes from a reputable source, or can be proven in some way.&lt;/p&gt;
&lt;p&gt;This presents new problems and issues, however, as we have to ask who is in charge of the merges, and how do we decide between ‘good’ and ‘bad’ branches? As @cameronneylon pointed out, the admin in charge might not necessarily be the original authors of the paper (they might be too close). The admin could be someone with a good reputation for curating the best edits and making the best decisions - essentially reworking the role of an editor or publisher. This leads to questions of how do we trust the editor, of course, a problem that a reputation system or score might solve. Work on such a concept has already started, with the &lt;a href=&quot;http://altmetrics.org/manifesto/&quot;&gt;alt-metrics manifesto&lt;/a&gt;. This could be used to rate and score work by a particular editor, increasing or decreasing the trust placed in the paper.&lt;/p&gt;
&lt;p&gt;The alt-metrics concept can also be applied to other issues that were raised. How do we filter and organise the many different branches for to editor so that they can find the best? A system of organising all the branches in a sensible way could be done by a git-like system, maybe even a scientific version of github could be developed. The problem of which branches to merge still remains, however. Again, by measuring the buzz around a particular branch the editor can see which branches are being talked about favourably and which are not.&lt;/p&gt;
&lt;p&gt;Of course this is all pie-in-the-sky right now, as the systems simply do not exist for collaboratively editing scientific papers. Alt-metrics or other such reputation systems need to be developed so that the impact of branches and papers can be measured. Overall though I do think that the methods I describe could improve scientific literature and bring it into the 21st century.&lt;/p&gt;</content:encoded></item><item><title>Kenya 2006</title><pubDate>Sat, 12 Feb 2011 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I was cleaning out some photos on my computer today, and I stumbled across some of my photos from my trip to Kenya way back in 2006. I went with World Challenge, an organisation that takes groups of kids (17-18 year olds) to awesome places around the world. I spend a month out there, doing a bit of the tourist stuff like the safaris and seeing a few of the ‘Big Five’. We also had a ‘challenge week’ where we climbed Mt. Kenya, and a week working in an orphanage.&lt;/p&gt;
&lt;p&gt;It was a fairly amazing experience, especially as we were in charge for each day - I personally had to organise us moving from Mombasa to Malindi, travelling on a fairly dodgy bus overnight. I think back with some very fond memories of the place…&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;I just wish I had the rest of these saved on this computer…&lt;/p&gt;</content:encoded></item><item><title>Alt-metrics: Studying buzz around academic articles</title><pubDate>Tue, 30 Nov 2010 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I had a &lt;a href=&quot;http://40thiev.es/referencing-a-students-nightmare&quot;&gt;good old moan&lt;/a&gt; about citations a couple of weeks back, about how I found all citation software completely useless. Today I found a really interesting article on a new type of citation.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://altmetrics.org/manifesto/&quot;&gt;Alt-metrics&lt;/a&gt; is basically an idea to study citations of scholarly articles on social sites, scholarly blogs and bookmarking services. The idea is not to replace the system of peer review, but to measure the buzz around scholarly articles in a much faster and wide ranging way. By looking at links and discussion of articles on blog and on Twitter, we could determine the influence a particular article has. This would happen very quickly compared to current systems which count how many times an article has been cited. It could years before an article is cited. Alt-metrics however is not seeking to replace the old system, but simply to augment it by providing an extra measure of the impact an article has.&lt;/p&gt;
&lt;p&gt;I would find this really interesting and useful, to determine what sort of impact a particular article has - it shows how influential it has been. I also think this sort of data could be mashed up to provide important meta data around a subject. The article describes a system wherein a researcher could subscribe to a feed of this week’s most significant work. A bloody fantastic idea, as far as I’m concerned - I would definitely use this.&lt;/p&gt;
&lt;p&gt;I’m going to keep a close eye on this, and there’s some good links at the bottom of the article that I’m going to dive into.&lt;/p&gt;
&lt;p&gt;PS. a big tip of the hat to my lecturer, Rich Boakes, who linked to this on his &lt;a href=&quot;http://www.delicious.com/ear1grey&quot;&gt;delicious feed&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Referencing: A Student&apos;s nightmare</title><pubDate>Wed, 27 Oct 2010 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;So it’s late at night and I’m still annoyed from earlier about referencing - you may have seen my &lt;a href=&quot;http://www.twitter.com/40_thieves&quot;&gt;tweets&lt;/a&gt;, which were less than courteous about &lt;a href=&quot;http://www.endnote.com&quot;&gt;EndNote&lt;/a&gt; and &lt;a href=&quot;http://www.zotero.org&quot;&gt;Zotero&lt;/a&gt;, two different bits of referencing software that I’ve used. They basically try and grab meta data from websites, PDFs and other places to build library of references which they then can format it to turn it into properly formatted references. Here’s the problem though they’re universally &lt;em&gt;crap&lt;/em&gt; doing the getting the meta data part - don’t get wrong the bells and whistles of organising and sorting the references once you’ve got them are great. But I am completely fed up of manually entering data to fill in gaps where they’ve missed something or completely got it wrong. This is the real problem that needs solving - organisation of references is pretty easy if you set up a simple file structure, something that even a non-techie can do - its much harder to build something that can accurately guess the references.&lt;/p&gt;
&lt;p&gt;So I’m hoping that somewhere out there someone will know of my frustration and send me towards something that’ll work better. I’ve already had a &lt;a href=&quot;http://twitter.com/mrgunn/status/28793402554&quot;&gt;couple&lt;/a&gt; of &lt;a href=&quot;http://twitter.com/AceBlaster/status/28801963300&quot;&gt;people&lt;/a&gt; on Twitter send me links to similar things, but they look suspiciously like EndNote clones but with more organisational features. I’ll try them out and see how they work but I’m not sure if they solve the problem of manually adding meta data.&lt;/p&gt;
&lt;p&gt;Personally I hope that the new semantic web technologies in HTML5 will go a long way towards this --- being able to tag author, date, publisher meta data like this is going to make detection a lot better. But, it probably won’t be adopted on many academic sites, and it doesn’t work in PDFs that academics so dearly love. The open data movement really needs to get the word out to these websites.&lt;/p&gt;</content:encoded></item><item><title>3 Months Of Awesome [cross post]</title><pubDate>Mon, 27 Sep 2010 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Cross-posted from my &lt;a href=&quot;http://kandersteg.posterous.com&quot;&gt;Kandersteg blog&lt;/a&gt;. Ed.’s note: Posterous shut down on 30th April 2013, so this blog was discontinued.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Here’s the last couple photos that I’ve got from the summer.&lt;/p&gt;
&lt;p&gt;This is from my &lt;a href=&quot;http://www.kisc.ch/index.php?uid=44&amp;amp;cmd%5Bincms%5D%5Bcontent%5D%5Bfullview%5D%5Bmain%5D%5Buid%5D=2219&amp;amp;cmd%5Bincms%5D%5Bcontent%5D%5Bfullview%5D%5Bmain%5D%5Bcmd%5D%5Bitemid%5D=36&quot;&gt;Overnight Climbing Workshop&lt;/a&gt; that I ran in the last couple of weeks with Joe (UK). We (climbing is always run with two people so we can have two ropes) had a German group who didn’t speak much English, but we had some fun anyway. We hiked up to the &lt;a href=&quot;http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=46.454534,7.621797&amp;amp;sll=46.454638,7.621915&amp;amp;sspn=0.008086,0.021136&amp;amp;ie=UTF8&amp;amp;ll=46.454534,7.621765&amp;amp;spn=0.06469,0.169086&amp;amp;z=13&quot;&gt;Upper Hut&lt;/a&gt; - the mountain hut that the Centre owns at 1890m - in the afternoon, stayed overnight in the freezing cold (there was snow on the roof when we got there). The hut is only heated by a small wood fire and warmed up by cutting wood to make it fit. Then in the morning (as you can see it was glorious) we went out for some &lt;a href=&quot;http://en.wikipedia.org/wiki/Bouldering&quot;&gt;bouldering&lt;/a&gt; on nearby rocks, had some lunch back at the hut, and did some climbing (with ropes) and hiked home. I was a great 2 days of firsts for me - first ‘real’ time in the hut, and first outdoor climbing of the season (even though I didn’t really get to climb properly).&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;This season was the best thing I’ve ever done, and I loved every second of it, it’s hard to put it into words. The place, the views, the job, and most of all the friends I made were are incredibly amazing, and I hope that I’ll see everyone again at some point. I wanted to say thank you to everyone for being awesome. I’m going back for 2 weeks in the winter, and I’ll probably apply to go back next summer as well, and I can’t wait. Especially as Salla (FI), Sara (IT), Emmy (SE) and Pete (UK) are going back this winter - it’s going to be awesome seeing them again and hopefully seeing some more people next summer. I’d definitely recommend going there as a guest or as &lt;a href=&quot;http://www.kisc.ch/staff/short-term-staff/&quot;&gt;staff&lt;/a&gt; to anyone.&lt;/p&gt;
&lt;p&gt;C’ya in December! (I’ll post some pictures up here then).&lt;/p&gt;</content:encoded></item><item><title>My Kandersteg Adventure Begins [cross post]</title><pubDate>Sun, 23 May 2010 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Cross-posted from my &lt;a href=&quot;http://kandersteg.posterous.com&quot;&gt;Kandersteg blog&lt;/a&gt;. Ed.’s note: Posterous shut down on 30th April 2013, so this blog was discontinued.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;So I thought I’d write up where I’m going this summer (only taken me a week):&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img /&gt;&lt;/p&gt;
&lt;p&gt;(via: &lt;a href=&quot;http://www.flickr.com/photos/jontysewell/3791823876/&quot;&gt;Jonty Sewell on Flickr&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.kisc.ch/&quot;&gt;Kandersteg International&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Kandersteg_International_Scout_Centre&quot;&gt;Scout Centre&lt;/a&gt; in Switzerland, opened in 1923 by Robert Baden-Powell (who founded the Scouts) as a “Permament Mini Jamboree” for Scouts all round the world. Over 10 000 guests visit each year from around 40 different countries. Right in the middle of the Alps it’s a great place for hiking, climbing, mountain biking and quite a lot more. KISC has a large Chalet which has rooms for 200 people, a large campsite holding 1200 people, and even a sauna!&lt;/p&gt;
&lt;p&gt;I’ve been there twice before as a Scout with my troop, in 2000 and 2005. I have some pretty awesome memories of doing some great stuff out there and I’m excited to being going back.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What I’m doing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I’m working there for the three Summer season months doing, well, I don’t know! I could be doing anything from cooking breakfast, cleaning the Chalet, helping out campers in the campsite, working in reception, taking Scouts hiking or rock climbing. So pretty varied then? :-)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The staff&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The people who I’ll be working with come from all around the world, just like the guests - I’ve been sent a list of everybody and I’m sure that I’ll meet some pretty cool people.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The blog&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I’ll be keeping this blog updated with my Kandersteg Adventures - pictures, updates on what I’m doing, maybe even some video and audio… If you want to keep updated just click the little &lt;a href=&quot;http://kandersteg.posterous.com/rss.xml&quot;&gt;Subscribe&lt;/a&gt; button on the right hand side or follow me on Twitter: &lt;a href=&quot;http://twitter.com/40_thieves&quot;&gt;@40_thieves&lt;/a&gt;. Thanks! &lt;em&gt;(Ed’s note: Posterous shut down on 30th April 2013, so this blog was discontinued.)&lt;/em&gt;&lt;/p&gt;</content:encoded></item></channel></rss>