<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Octue - Medium]]></title>
        <description><![CDATA[You don’t need to be a materials scientist to build a LEGO® model. So why should someone modelling climate or energy systems need to be an expert coder? Scientists waste 95% of their days being general programmers, API architects and DevOps engineers… We help get that time back. - Medium]]></description>
        <link>https://medium.octue.com?source=rss----e4237d4e4607---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Octue - Medium</title>
            <link>https://medium.octue.com?source=rss----e4237d4e4607---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 07 Apr 2026 19:20:29 GMT</lastBuildDate>
        <atom:link href="https://medium.octue.com/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Achieving  Scalability with Digital Twins]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.octue.com/achieving-scalability-with-digital-twins-2d8ede6b2c6c?source=rss----e4237d4e4607---4"><img src="https://cdn-images-1.medium.com/max/2600/1*xfJQRRspeHsdBgjSKNVBWA.jpeg" width="8000"></a></p><p class="medium-feed-snippet">The engineering industry is alight with the phrase &#x201C;Digital Twin&#x201D;&#x200A;&#x2014;&#x200A;but in a world of complex systems, how do we do that in a scalable way?</p><p class="medium-feed-link"><a href="https://medium.octue.com/achieving-scalability-with-digital-twins-2d8ede6b2c6c?source=rss----e4237d4e4607---4">Continue reading on Octue »</a></p></div>]]></description>
            <link>https://medium.octue.com/achieving-scalability-with-digital-twins-2d8ede6b2c6c?source=rss----e4237d4e4607---4</link>
            <guid isPermaLink="false">https://medium.com/p/2d8ede6b2c6c</guid>
            <category><![CDATA[api]]></category>
            <category><![CDATA[wind-energy]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[digital-twin]]></category>
            <dc:creator><![CDATA[Tom Clark]]></dc:creator>
            <pubDate>Mon, 17 Feb 2025 12:54:23 GMT</pubDate>
            <atom:updated>2020-03-11T16:25:14.631Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[72 Hours at WindEurope: Using the service]]></title>
            <link>https://medium.octue.com/72-hours-at-windeurope-using-the-service-eb080e2e9963?source=rss----e4237d4e4607---4</link>
            <guid isPermaLink="false">https://medium.com/p/eb080e2e9963</guid>
            <dc:creator><![CDATA[Tom Clark]]></dc:creator>
            <pubDate>Mon, 17 Feb 2025 12:41:53 GMT</pubDate>
            <atom:updated>2023-04-29T06:55:03.686Z</atom:updated>
            <content:encoded><![CDATA[<p>Well, it’s all reappeared now and people at the conference are looking at it, evaluating the tools and figuring out the processes.</p><p>The last of the six steps is to use the product, then start mapping out the chess game of what to do next.</p><p>I’ll come back here once we’ve had a decent length of time to do so, and update you with what went on and what we think the next steps are!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=eb080e2e9963" width="1" height="1" alt=""><hr><p><a href="https://medium.octue.com/72-hours-at-windeurope-using-the-service-eb080e2e9963">72 Hours at WindEurope: Using the service</a> was originally published in <a href="https://medium.octue.com">Octue</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[72 Hours at WindEurope: Delivering the service.]]></title>
            <link>https://medium.octue.com/72-hours-at-windeurope-delivering-the-service-8fcd50b61649?source=rss----e4237d4e4607---4</link>
            <guid isPermaLink="false">https://medium.com/p/8fcd50b61649</guid>
            <category><![CDATA[energy]]></category>
            <category><![CDATA[wind]]></category>
            <category><![CDATA[digitalization]]></category>
            <dc:creator><![CDATA[Tom Clark]]></dc:creator>
            <pubDate>Mon, 17 Feb 2025 12:41:47 GMT</pubDate>
            <atom:updated>2023-04-26T09:35:44.121Z</atom:updated>
            <content:encoded><![CDATA[<p>It’s Wednesday Afternoon in Copenhagen, and it’s time to deliver both a service and a presentation. This article is for the fifth of our <em>“Six Steps” </em>— you can read the overview <a href="https://thclark.medium.com/72-hours-of-digitalisation-at-windeurope-7aa786be729d">here</a>.</p><p><em>This article is aimed at engineers, researchers and execs in the Wind Industry, to help understand the process of digitalisation. If you’re qualified in Systems Architecture or Data/Software Engineering, you’re way ahead of this; just get stuck in already!!</em></p><h3>About the ‘Deliver’ Step</h3><p>‘Delivering’ is all about how easy you make it for the consumers (end users) of the data to get it. Essentially, we’re talking about User Experience.</p><blockquote>User Experience (UX) is King. And not just for webapps.</blockquote><p>User Experience (UX) is the way that you, and people in your team, will work with your tool. UX isn’t just for webapps — its how anyone interacts with your tool… and <strong>your project will live or die on UX</strong>. If tools are difficult to use, people avoid them like the plague no matter how smart.</p><p>And this right here is why you, a humble engineer somewhere in the vast Wind Industry, are the perfect person for this bit. <strong>You know what you need</strong>. So don’t be afraid to build something to make your own life easy!</p><p>Some things to think about:</p><ul><li>Should there be a Command Line Utility? <em>Check out the Clicks python library for making user friendly CLIs.</em></li><li>Will you be centralising/storing data somewhere?<em> (See below.)</em></li><li>Can you wrap complicated stuff in a helper library?</li><li>If so, what language(s) are needed?<em> Try to stick to just one for the first few iterations. Python is pretty popular, or if you know it then Rust is fast and extremely versatile.</em></li><li>Will you need an API? <em>Cloud Functions are a great way of creating ultra-simple API endpoints.</em></li></ul><h3>Where we’re at</h3><p>We decided that we’d do two things to make it ultra easy to interface with the service. Sure, users can make requests directly to the API but we wanted to make it familiar for basic users of python, and non-technical users.</p><ul><li><strong>Python client (on pypi):</strong> <a href="https://github.com/octue/windeurope72hours-elevations-client-python">https://github.com/octue/windeurope72hours-elevations-client-python</a></li><li><strong>Map (React/ Javascript using DeckGL):</strong> <a href="https://je3mob.csb.app/">https://je3mob.csb.app/</a></li></ul><h4>Try it</h4><pre>pip install windeurope72hours<br><br>python<br><br>&gt;&gt;&gt; from windeurope72hours import get_coordinate_elevations<br>    elevations, later, estimated_wait_time = get_coordinate_elevations(<br>        [[54.53097, 5.96836]],<br>        resolution=12,<br>    )<br>    print(elevations)<br><br>&gt;&gt;&gt; {(54.53097, 5.96836): 0.0}</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qdbmIuCCrQTvhUm0KczfMQ.png" /><figcaption>As you pan the map, it automatically fetches elevations near the centre of the view :)</figcaption></figure><h3>Wrapping up</h3><p>Now it’s over to YOU! Please use the API or the python client, and let us know how it goes!!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8fcd50b61649" width="1" height="1" alt=""><hr><p><a href="https://medium.octue.com/72-hours-at-windeurope-delivering-the-service-8fcd50b61649">72 Hours at WindEurope: Delivering the service.</a> was originally published in <a href="https://medium.octue.com">Octue</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[72 hours at WindEurope: Populating data]]></title>
            <link>https://medium.octue.com/72-hours-at-windeurope-populating-data-5637871596a?source=rss----e4237d4e4607---4</link>
            <guid isPermaLink="false">https://medium.com/p/5637871596a</guid>
            <category><![CDATA[software]]></category>
            <category><![CDATA[digitalisation]]></category>
            <category><![CDATA[geospatial]]></category>
            <category><![CDATA[energy]]></category>
            <category><![CDATA[wind]]></category>
            <dc:creator><![CDATA[Tom Clark]]></dc:creator>
            <pubDate>Mon, 17 Feb 2025 12:41:42 GMT</pubDate>
            <atom:updated>2023-04-26T07:01:46.422Z</atom:updated>
            <content:encoded><![CDATA[<p>It’s Wednesday Morning in Copenhagen, and we’re looking at how to populate data into our database. This article is for the fourth of our <em>“Six Steps” </em>— you can read the overview <a href="https://thclark.medium.com/72-hours-of-digitalisation-at-windeurope-7aa786be729d">here</a>.</p><p><em>This article is aimed at engineers, researchers and execs in the Wind Industry, to help understand the process of digitalisation. If you’re qualified in Systems Architecture or Data/Software Engineering, you’re way ahead of this; just get stuck in already!!</em></p><h3>About the ‘Populate’ step</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*e88XMz1imeE5Sc2-8MH75A.png" /></figure><p>There’s really not a lot we can say about populating your data store, because this is the bit that gets totally different each time. In some cases, this might not even be necessary — for example if you’re tying into an existing store. You can safely skip this step if that’s the case.</p><h3>Just show me the code!</h3><p><a href="https://github.com/octue/windeurope72hours-elevations-populator-private">With pleasure :)</a></p><h3>Populating Elevations Data</h3><h4>Ensuring provenance</h4><p>We should always be delivering data with clear sourcing. I can’t stand it when you get data from Google or somewhere, and it seems legitimate but isn’t sourced. You can’t use that for science!</p><p>We’d forgotten this in our brainstorming, so added an extension to the database graph we developed earlier. This allows us to specify the source of the dataset with a proper reference:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rhjJoOxedABLlnb2juUCPQ.png" /><figcaption>Adding a graph node to preserve scientific provenance of the data</figcaption></figure><h4>Data sources</h4><p>The underlying dataset we used to provide the elevations is the Copernicus DEM — Global and European Digital Elevation Model (COP-DEM) GLO-30 dataset:</p><ul><li>DOI: <a href="https://doi.org/10.5270/ESA-c5d3d65">https://doi.org/10.5270/ESA-c5d3d65</a></li><li>Direct link: <a href="https://spacedata.copernicus.eu/collections/copernicus-digital-elevation-model">https://spacedata.copernicus.eu/collections/copernicus-digital-elevation-model</a></li></ul><p>We accessed it via the AWS S3 mirror, which provides easy access to the dataset’s GeoTIFF files:</p><ul><li>Information: <a href="https://copernicus-dem-30m.s3.amazonaws.com/readme.html">https://copernicus-dem-30m.s3.amazonaws.com/readme.html</a></li><li>URL: <a href="https://copernicus-dem-30m.s3.amazonaws.com/">https://copernicus-dem-30m.s3.amazonaws.com</a></li><li>S3 URI: s3://copernicus-dem-30m/</li></ul><p>While developing the populator, for cross-validation purposes, we developed a <a href="https://github.com/octue/windeurope72hours-elevations-populator-private/blob/main/scripts/plot_elevations.py">short script to plot data over a map on a Plotly chart </a>— if we get time, we’ll refactor that into an Observable for people to use.</p><h4>About Resolution</h4><p>Elevations in GLO30 go down to 30 arcseconds spatial resolution, which varies depending on where you are on the globe but broadly is about 30m.</p><p>Looking up the H3 cell statistics, we see that Level 12 hexagons have an edge length of ~10m, making Level 12 the first level that’s finer than the spatial resolution of the data itself. So there’s no point going finer than this; we don’t populate any cells lower than L12.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7dscq5QXGeVX3OHFDpsutQ.png" /><figcaption>These Level 12 hexagons have a 10m edge length. You can see the underlying resolution of the data in this view over some rough terrain. Note that the slight oversampling of the dataset is apparent in the pattern here, but not perfectly because of the nearest neighbour sampling and the different grids.</figcaption></figure><h4>How we populate higher levels</h4><p>The L12 cells are populated by nearest-neighbour sampling the original TIFF files using the centre of the hexagon cell. That’s ideal, because L12 cells are smaller than the grid size.</p><p>But Level 12 is a lot of data to render if you want to cover a whole country! What if we need something coarser? Rather than attempting to analyse the raw data, we were able to take advantage of the graph structure to aggregate values up to coarser resolutions:</p><ul><li>Populate all L12 hexagons in an area.</li><li>To populate a parent L11 cell, take the seven L2 hexagons inside it and average them.</li><li>Keep going until reaching Level 8 (simply because we didn’t think coarser cells would be very useful).</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AsOWXRmBX5YxG_kRHegi_w.png" /><figcaption>Aggregate up to coarser levels by averaging seven values per parent hexagon</figcaption></figure><p>There are some very powerful ways of doing aggregation in databases, but we stayed simple and just wrote some python code inside the populator service. Easy wins the day!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tlkcBeQ6tzB_xbF5xaJoRg.png" /><figcaption>Levels 9 through 12 of refinement in the same region used for cross-checking above</figcaption></figure><h4>Engineering the Populator service</h4><p>We used <a href="https://octue-python-sdk.readthedocs.io/en/latest/">our own SDK to create and deploy a service</a> to Google Cloud Run. The point of our SDK is to help wrap scientific code and provide it as a data service, so we’re constantly working on features to give the extra helping hand.</p><p>It works on a “question-answer” model. Some features we’re proud of:</p><ul><li>Under the hood it uses an event stream to initiate a “question”, and a second (question-specific) event stream to manage communication (for logs, monitor metrics, progress updates, and optionally a final “answer”).</li><li>It handles errors by capturing all the inputs of a question, so an error can be reproduced for investigation with single line of code.</li><li>Services using the framework can ask each other questions.</li><li>Extra tools for querying and managing files in cloud object stores.</li></ul><p>The populator service only makes use of the most basic aspects of the framework. It sits there. The API can ask it to add a list of hexagons to the database.</p><h4>Security</h4><p>We added a “Secret” to the service (you can Secret Manager resources in our terraform config) and the purpose of that is to add credentials for accessing the database. Never commit credentials to source code!</p><h4>Cross checking</h4><p>We started without using the database at all — just plotting directly. to make sure we were pulling out regions correctly.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0EG6ocOjYPhcRHwRlDNIJQ.png" /><figcaption>We used a variety of different locations and maps, plotting hexagons with non-zero opacity to check that we were correctly correlating values with features in the landscape.</figcaption></figure><h4>Lazy Loading</h4><p>The populator is set up to load just a region around a selected area. This allows us to lazily-load data on demand by sending a question to the populator (from the API service).</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5637871596a" width="1" height="1" alt=""><hr><p><a href="https://medium.octue.com/72-hours-at-windeurope-populating-data-5637871596a">72 hours at WindEurope: Populating data</a> was originally published in <a href="https://medium.octue.com">Octue</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[72 hours at WindEurope: Engineering the cloud bits]]></title>
            <link>https://medium.octue.com/72-hours-at-windeurope-engineering-the-cloud-bits-f7ce57733704?source=rss----e4237d4e4607---4</link>
            <guid isPermaLink="false">https://medium.com/p/f7ce57733704</guid>
            <category><![CDATA[cloud-infrastructure]]></category>
            <category><![CDATA[wind]]></category>
            <category><![CDATA[wind-energy]]></category>
            <category><![CDATA[digitalisation]]></category>
            <category><![CDATA[energy]]></category>
            <dc:creator><![CDATA[Tom Clark]]></dc:creator>
            <pubDate>Mon, 17 Feb 2025 12:41:37 GMT</pubDate>
            <atom:updated>2023-04-25T12:01:38.215Z</atom:updated>
            <content:encoded><![CDATA[<p>It’s Tuesday Afternoon in Copenhagen, and it’s about time to show our hand with some code. This article is for the third of our <em>“Six Steps” </em>— you can read the overview <a href="https://thclark.medium.com/72-hours-of-digitalisation-at-windeurope-7aa786be729d">here</a>.</p><p><em>This article is aimed at engineers, researchers and execs in the Wind Industry, to help understand the process of digitalisation. If you’re qualified in Systems Architecture or Data/Software Engineering, you’re way ahead of this; just get stuck in already!!</em></p><h3>About the ‘Engineer’ step</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uURDEo4xz2grRVk09QUf9Q.png" /></figure><p>Partly because we’re keen to just show you what we’re up to already, and partly because examples are much more useful than essays, I’m going to only provide a short general background.</p><p>This step is where you get stuck in and actually do something other than fun diagrams and fantasising about worlds covered in hexagons. If you’re not a pro, Cloud Engineering can seem really daunting at first, but follow some tutorials (or have a go at re-implementing our exact setup below) to get started.</p><p>We can’t resist mentioning <strong>just THREE things</strong> you’ll see us do this week. Get these set up for your team and you’ll save a TON of time, we promise.</p><h4>Use terraform (if you do nothing else, do this)</h4><p>We were a bit late to the party with this, and recently started using <a href="https://www.terraform.io/">Terraform</a> to specify our Infrastructure As Code (IAC). It works with all the Cloud Providers like GCP, AWS and Azure.</p><blockquote>Terraform has been a revelation. Start now. Not later. Don’t even create a single bucket using the console.</blockquote><p>Terraform is SO simple to set up, don’t think of it as “something to do later”. Your setup and learning time will be saved after the first day of work. We especially like that the identity/access permissions (the most difficult and most important part to get right!) are clear.</p><p>There are plenty of alternatives to Terraform (for example <a href="https://www.pulumi.com/">Pulumi</a> syncs nicely with existing infrastructure). We wouldn’t a Provider-specific solution — one of the strengths of Terraform is being provider agnostic.</p><h4>Version control and conventional commits</h4><p>Even if you’re working alone, having code on GitHub and using the git workflow lets you remember, check and compare things easily.</p><p>Adopting a <a href="https://www.conventionalcommits.org/en/v1.0.0/">conventional commits</a> pattern means you not only get a great engineering logbook, but you can auto-generate releases and version numbers. At Octue, <a href="https://github.com/octue?q=conventional&amp;type=all&amp;language=&amp;sort=">we built a whole system of open source tools to help</a> (see an <a href="https://github.com/octue/octue-sdk-python/releases">example of the autogenerated releases here</a>).</p><h4>Continuous Delivery</h4><p>In each of the repositories we release in this task, look in the .github/workflows folder. These “actions” deploy code to the cloud systems, create release notes, or run other automations every time we merge code into main branch. We don’t ever think about how to get code onto servers; it’s just there a couple of minutes after we finish. HUGE time saver and great for quality control.</p><h3>Just show me the code!!!</h3><p>Here you go. The <a href="https://github.com/orgs/octue/repositories?q=windeurope72hours-elevations&amp;type=all&amp;language=&amp;sort=">windeurope72hours-elevations-api repository</a> defines an API service that queries a database. All the Cloud Infrastructure is also defined in the same repo. There will be two more repositories coming up soon.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CbmS9viHNXxNRH4MYRmkaA.png" /><figcaption><a href="https://github.com/orgs/octue/repositories?q=windeurope72hours-elevations&amp;type=all&amp;language=&amp;sort=">Code is on GitHub</a></figcaption></figure><p>Remember, this event is NOT a hackathon — we didn’t write this all in the hall, although we are refining it throughout the week. For transparency, it’s taken about 4 days to produce this basic service, and there’s lots of room for improvement — look at <a href="https://github.com/octue/windeurope72hours-elevations-api-private/commits/main">the commits</a> to see a detailed history of how it evolved.</p><h4>What it does</h4><p>The API comprises basically one function. It:</p><ul><li>Accepts a request (POSTed data complying to a schema we’ve published)</li><li>Checks the input isn’t outside some basic sensible ranges.</li><li>Queries the database for cell contents</li><li>For hexagon cells that aren’t in the database, it asks a “question” to a scientific data service (more about that in our next step!), in order to populate the database.</li><li>Responds with results from the database, and an “ask again later”</li></ul><h4>Figuring out the database</h4><p>We spent some time reading a variety of material around Graph databases, and how to store tree-like data such as this. In the end, we opted for (almost) the simplest arrangement we could:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XYstqpi66-0-NNHt8_4b0w.png" /></figure><p>By storing elevations on a separate node, we doubled the amount of nodes in the database. Why do such a thing? We were bearing in mind the ability to federate additional data in the future — having one set of nodes representing the position allows us to query for those nodes and all types of data associated with them more straightforwardly than if each data type had its own mesh.</p><p>We were inspired a lot by this paper, worth a read:</p><p><a href="https://infinitegraph.com/h3/">Massively Scalable Geographic Graph Analytics Using InfiniteGraph and Uber&#39;s Hexagonal Hierarchical Spatial Index</a></p><h4>Choosing a Cloud Provider</h4><p>We use GCP for everything at Octue, we find that it has some subtle technical details (like the atomic clock synchronising all the cloud stores globally) that make things overall run smoother. And the console has a pretty consistent interface between all their different offerings, which makes a big difference to the learning curve.</p><p>But <strong>mostly, we use it because we’re used to it</strong>. If Azure or AWS are your thing, there’s nothing here that doesn’t have an equivalent in those providers.</p><h4>Single-endpoint API</h4><p>The API that we laid out in our architecture is super simple — it has a single endpoint. So rather than spin up a whole server to handle that, we’ve gone with a “serverless” Cloud Function which is nice and easy to deploy:</p><p><a href="https://cloud.google.com/functions"></a></p><h4>Cloud Infrastructure — Terraform</h4><p>The entire infrastructure is defined in our <a href="https://github.com/octue/windeurope72hours-elevations-api-private/tree/main/terraform">terraform files here</a>. We’ve added notes to each entry describing why and what it’s for. You’ll notice there are some things we haven’t talked about yet (like a Cloud Run service)... We’ll come back to those!</p><p>To reproduce this entire project for yourself, you would:</p><ul><li>Create an account on GCP</li><li><a href="https://cloud.google.com/resource-manager/docs/creating-managing-projects">Create a new project</a> in your GCP account</li><li>Fork the code repository to your GitHub account</li><li>Check out code to your laptop and <a href="https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli">install terraform</a></li><li><a href="https://cloud.google.com/iam/docs/service-accounts-create">Create a service account</a> in your GCP project, named terraform, with Editor permissions. Save the JSON key file to terraform/gcp-credentials.json</li><li>Change the <a href="https://github.com/octue/windeurope72hours-elevations-api-private/blob/main/terraform/variables.tf">variables in </a><a href="https://github.com/octue/windeurope72hours-elevations-api-private/blob/main/terraform/variables.tf">variables.tf</a> to match your project then run tf apply</li></ul><p>You’ll be asked to enable a lot of APIs which is a chore, but once you’ve clicked the links and enabled all the APIs you’re done.</p><blockquote>Pro tip:<a href="https://cloud.google.com/blog/topics/sustainability/pick-the-google-cloud-region-with-the-lowest-co2"> We always choose our regions to have lowest CO2 impact.</a> Here, we’ve set everything up in europe-west-1 — there’s no need to worry about global query speed or redundancy for a little demo service like this.</blockquote><h4>Cloud Infrastructure — Database</h4><p>The only thing we didn’t provision using Terraform is the database, because we prefer to use managed database services, we signed up for a paid tier on <a href="https://neo4j.com/cloud/platform/aura-graph-database/">AuraDB, hosted by neo4j</a>. The main motivation for this selection was simply that we wanted to try it.</p><blockquote>Pro tip: Moving from the free to the paid tier on AuraDB got us a dedicated instance in the same region as our cloud function is deployed, which sped up API access calls from 5s to 1s!</blockquote><blockquote>Pro tip: Managing databases requires a dedicated expert. Unless you have access to one of those people in your organisation, always used one of the managed database services from your cloud provider. It costs less in time, and carries much lower risk (unless your data is easily reproducible).</blockquote><h4>Limiting Costs</h4><p>The bright-eyed among you will have realised by now that to handle the trillions of nodes we’d need an EXTREMELY large and costly database!<br>So, rather than populating the entire planet we chose to “Lazily Load” data. That means, on request for a particular location / h3 cell, we populate that area on demand.</p><blockquote>Pro tip: Provided you’ve wrapped complexity up behind a straightforward API, you can always change the mechanics later…</blockquote><blockquote>If this takes off, we can use all sorts of strategies to reduce storage cost. We could use advanced heuristics to remove rarely accessed data, or use more advanced tree-walking to cover areas of ocean without storing all the fine level cells, or ditch the database altogether and pre-process raw tif images into a much quicker-to-access custom binary format, just o name a few ideas.</blockquote><p>We’ve also heavily limited the number of simultaneous attempts to access the API. This is purely to keep our costs down (we’re providing this for free, after all!).</p><p>The cloud function keeps a cache of all the cells it’s asked to be populated so it doesn’t ask for the same ones again.</p><blockquote>Something to ponder: What do you think is wrong with our caching strategy? Could it be improved and how much would that cost? Answers on a postcard!</blockquote><h3>Wrapping Up</h3><p>We made a really simple API and deployed a free tier database, which we later upgraded to the (cheapest!) paid tier for performance reasons.</p><p>We knew that we couldn’t store all the data, so we developed a way of lazy-loading it on demand, which can be improved and streamlined later.</p><p>But that’s useless right now. The next step? Let’s get some data into it!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f7ce57733704" width="1" height="1" alt=""><hr><p><a href="https://medium.octue.com/72-hours-at-windeurope-engineering-the-cloud-bits-f7ce57733704">72 hours at WindEurope: Engineering the cloud bits</a> was originally published in <a href="https://medium.octue.com">Octue</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[72 hours at WindEurope: Architecture]]></title>
            <link>https://medium.octue.com/72-hours-at-windeurope-architecture-f5adf4a5788b?source=rss----e4237d4e4607---4</link>
            <guid isPermaLink="false">https://medium.com/p/f5adf4a5788b</guid>
            <category><![CDATA[digitalization]]></category>
            <category><![CDATA[wind-energy]]></category>
            <category><![CDATA[wind]]></category>
            <category><![CDATA[energy]]></category>
            <category><![CDATA[data-engineering]]></category>
            <dc:creator><![CDATA[Tom Clark]]></dc:creator>
            <pubDate>Mon, 17 Feb 2025 12:41:32 GMT</pubDate>
            <atom:updated>2023-04-25T08:02:48.558Z</atom:updated>
            <content:encoded><![CDATA[<p>It’s Tuesday Morning in Copenhagen, and we’re talking about Architecture with people in the hall. This article is for the second of our <em>“Six Steps” </em>— you can read the overview <a href="https://thclark.medium.com/72-hours-of-digitalisation-at-windeurope-7aa786be729d">here</a>.</p><p><em>This article is aimed at engineers, researchers and execs in the Wind Industry, to help understand the process of digitalisation. If you’re qualified in Systems Architecture or Data/Software Engineering, you’re way ahead of this; just get stuck in already!!</em></p><h3>About the ‘Architect’ step</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ljioBSYSwwmKOeS2Xy5rXQ.png" /><figcaption>In the ‘Architect’ step we aim to design a ‘Minimum Viable Product‘ to deliver the data.</figcaption></figure><p>Product and/or data architecture is very cool sounding. It brings to mind extremely highly paid people at Google, finessing the perfect solution in their mind whilst having a conversation over a perfectly-brewed latte. The reality is different. It’s rough and ready, and subject to rapid change.</p><blockquote>The objective is to write down roughly what the key components of your system will be, and roughly how they connect.</blockquote><p>The golden rule for this step is that <strong>it’ll never be right the first time. </strong>Accept that, and you won’t get roadblocked. This is why the <em>“Six Steps”</em> are a cycle, not a straight line. Each time around the cycle, you improve and iterate on the architecture.</p><h4>Who should do this?</h4><p>Pretty much anyone with a general background in data/science/tech <em>can</em> approach it, although whether you <em>should</em> is really up to you and how you want to spend your time. If you tackle it, pass your ideas by someone experienced — even a 30 minute call will give you peace of mind.</p><h4>What tools are available?</h4><p>No kidding: at Octue, we always — and I mean <em>always</em> — use paper and pens. This is <strong>somewhat</strong> about creativity, but <strong>mostly</strong> because it’s the fastest way of getting diagrams down: using colours allows you to quickly differentiate components / sidenotes / complete tangents where you teach your team about an obscure aspect of computational geometry.</p><p>If you have to do it remotely, we’ve tried a lot of whiteboarding solutions (like jamboard and so on) but the best one by far is <a href="https://slides.google.com">Google Slides</a>. It’s not marketed for this purpose but it probably has the least glitchy interface of all the collaborative drawing tools out there, plus you can export slides to SVG, meaning your diagrams stay useful and are modifiable elsewhere.</p><h4>DON’T DO: Systems level diagrams</h4><p>Controversial opinion: <strong>we think it’s not worth bothering with systems level architecture diagrams (at this stage):</strong></p><ul><li>Remember the previous step: keep the scope tiny, and isolated from your other efforts.</li><li>As soon as you iterate even slightly, they’re out of date.</li><li>In a subsequent step (‘Engineering’) we’ll use a tool called ‘terraform’. You can quickly <a href="https://medium.com/vmacwrites/tools-to-visualize-your-terraform-plan-d421c6255f9f">generate system diagrams from terraform</a>.</li><li>You’ll quickly develop experience — when you need to get serious about these things, you’ll know.</li></ul><p>That said, if it helps to clarify what’s going on in the first instance, then get stuck in. Here’s a good tool to help:</p><p><a href="https://cloud.google.com/blog/topics/developers-practitioners/introducing-google-cloud-architecture-diagramming-tool">Introducing a Google Cloud architecture diagramming tool | Google Cloud Blog</a></p><h3>Getting started</h3><p>How are you supposed to write down the entire system for a new data service?! To get started I always think about three things, in this order:</p><ol><li>Data structure</li><li>Usability</li><li>Storage</li></ol><p>With these 3 thought about, you’ll be able to write a really basic diagram of your system.</p><h4><strong>Always, always, ALWAYS start with data structure</strong></h4><p>Even if you think you won’t use it later, this process will clarify in your mind the data that goes into and out of the system.</p><p>Create or collect some examples of the raw data that you’re processing. Make sure they’re not commercially sensitive (so you can share them later). Then write down a clear <em>schema </em>for that data — use JSONSchema (for general data exchange) or AVRO (for extreme high throughput pipelines).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jPctdFl3T4YQfLs8UckprA.png" /></figure><blockquote>Pro tip / Shameless plug: Octue are building a <a href="https://strands.octue.com">repository for JSONSchema</a> to help you do this. At the time of writing it’s in very early alpha, but you’ll soon be able to find examples from across the industry — or publish your own so your whole team are on the same page.</blockquote><h4>Then think about usability</h4><p>We’ll come back to this again later in much more detail later in the <em>“Six Steps”</em>, so I won’t duplicate material here. Come and meet us in the hall (or if you’re catching up after the event, then read ahead) to see what we have in mind.</p><h4>Finally, think about storage</h4><p><em>Sorry for the length of this one! Skip to the next section if you don’t care about data stores.</em></p><p><em>I’ve also excluded a lengthy topic about data lakes and data warehouses and data meshes and data &lt;trendy term here&gt;. These are the purview of the data and knowledge engineers. For the grassroots digitalisation work we’re talking about here, don’t worry about them. If you‘re doing the six steps, and the result gets some traction with your colleagues, any solution you‘ve chosen can be evolved to be part of such things.</em></p><p>You may not have to store data but if you do, here are a few considerations with tips on tools or examples:</p><p><strong>Object stores. </strong>For big binary files like audio, video or specialised instrument data in binary form, the chances are that dumping them into a cloud object store is the way to go.</p><blockquote>Pro tip / Shameless plug: We built a really powerful way of creating a datalake from a mass of legacy files on a hard drive… Octue‘s ‘django-twined’ and ‘octue-sdk-python’ libraries are designed to upload/download files and metadata in cloud storage, synchronising entries between an object store, a SQL database and your laptop. That means you can filter and query for cloud files straightforwardly, then download just the ones you need!!</blockquote><p><strong>Timeseries / Event databases. </strong>For data which arrives in high-volume streams of small “events”, consider solutions like BigQuery or InfluxDB. Their best application is where data slowly gets less useful over time (eg you daily need to do some analysis, or aggregation, after which the raw data rarely gets touched).</p><blockquote>Pro tip: Beware!! If you frequently need to query across these whole datasets to select subsets, querying can get very expensive. In that case, be aware of the need to cluster tables, or switch to PostgreSQL with a JSON column to contain the event data.</blockquote><blockquote>Pro tip: <a href="https://docs.google.com/presentation/d/1o1k8_e73v4GmjRBRUbVCo-gKXj-O0V_HT6UhTlIdeHE/edit?usp=sharing">This talk, “From Blade to BigQuery”,</a> shows you, complete with full open-source code, how to get events from a wind turbine to the cloud.</blockquote><p><strong>Graph databases like neo4j. </strong>These are great where you have highly relational data (although you trade off data integrity) and need to fetch many things at once through the relations. There are two stellar use cases:</p><ol><li>Federation. You can straightforwardly connect graphs across databases, so when you get to that stage, you’ll be able to join up your own private data with public (or other private) data securely.</li><li>Scalability. You can scale these things <a href="https://neo4j.com/press-releases/neo4j-scales-trillion-plus-relationship-graph/">to trillions of nodes</a>, so if your dataset is going to get mega quickly, you can avoid all sorts of troubles maintaining a conventional SQL instance.</li></ol><blockquote>Pro tip: A comment from Octue’s Senior Software Engineer, Marcus Lugg on using neo4j for the first time last week: “I thought it was weird at first but this query language is really beautiful; [this query] would be a nightmare of joins in SQL”</blockquote><p><strong>NoSQL databases like mongoDB. </strong>Are probably not the answer. For our industry sector, other than event/timeseries streams and graphs mentioned above, I’ve never ever seen a use case that couldn’t be covered with PostgreSQL (see below). If you disagree and have a good use case, please comment below, I’d love to hear it!</p><p><strong>Last but not least, SQL databases are a universal starters workbench.</strong> If you’re choosing a SQL database these days, it’s PostgreSQL or nothing. <a href="https://www.aptuz.com/blog/is-postgres-nosql-database-better-than-mongodb/">PostgreS has powerful NoSQL capability</a> built in, and is just a really versatile workhorse.</p><p>Here’s the rub: if you need a database and don’t KNOW that one of the above DB types are right for you, starting with PostgreSQL is a safe bet. Remember this isn’t about getting it right, it’s about learning quickly:</p><blockquote>If you start with PostgreSQL, you’ll either know within one iteration of the Six Steps that your choice was super wrong, or have something that’ll tide you over for a while.</blockquote><h3>Architecting a solution for 72 hours at WindEurope</h3><p>And now for the good bit! We’ve long wanted to try out a geospatial solution called ‘h3’, which uses a hexagonal mesh covering the globe.</p><p>The system is incredibly elegant and was invented by some engineers at Uber, to help manage the widely varying spatial density of their data points (outside a rail station you’ll have many data points per square m, in the countryside you’ll have few or none, so you need to manage different spatial resolutions).</p><p>They open-sourced it (thanks Uber!); read their beautiful blog post here:</p><p><a href="https://www.uber.com/en-GB/blog/h3/">H3: Uber&#39;s Hexagonal Hierarchical Spatial Index</a></p><p>The mesh has successive refinement levels, meaning that with a single integer, you can represent not only location on the earth but <strong>also spatial resolution inherent to the data</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VXwEhfrTE2dY4CsAEB8PmA.png" /></figure><p>So, we’ll use that as a really compact way of expressing data.</p><h4>Brainstorming</h4><p>We sat down for about 3 hours with some pens and some paper. Sorry, we can’t really capture it but for those of you following on live, come and talk, we’ll work with you in the hall to go through this stage or help you through your own:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UqSSf38qYm63rS9DQ16tIw.png" /><figcaption>Rabid brainstorming during a wide-ranging conversation.</figcaption></figure><h4>Thinking about data structure</h4><p>We thought about the ways people might need to fetch data. We concluded that to get started, we’d want to fetch elevations for a single point, a collection of points, or for a region (if we’re displaying on a map).</p><p>From our brainstorming, we already knew we’d need an API, which is where our service hits the outside world. We talked roughly about this at first but later published the definitions of what data looks like at the boundary.</p><ul><li><a href="https://jsonschema.registry.octue.com/octue/h3-elevations-input/0.1.0.json">https://jsonschema.registry.octue.com/octue/h3-elevations-input/0.1.0.json</a></li><li><a href="https://jsonschema.registry.octue.com/octue/h3-elevations-output/0.1.0.json">https://jsonschema.registry.octue.com/octue/h3-elevations-output/0.1.0.json</a></li></ul><h4>Thinking about usability</h4><p>Most of the uses we can think of either involve putting data onto a map, or loading it into python. Javascript developers are pretty familiar with fetching; and the fetch pattern is tied intimately to the use case — so javascript is covered.</p><p>On the python-side, we wanted to make it as easy as possible for non-developers. So we figured that a very lightweight python library would allow you to <strong>get elevations with a single line of code</strong>. More on this later.</p><h4>Database selection and graph structure</h4><p>Luckily, our above statement about PostgreSQL holds true (or we’d be quite embarrassed!). We looked into it and… <a href="https://blog.rustprooflabs.com/2022/04/postgis-h3-intro">yes, you can totally store h3 data efficiently in Postgres!!</a> Postgres has PostGIS; a highly advanced geospatial library which really complements the use case too.</p><p>But, we work with Postgres all the time at Octue and this should be a learning experience for us too. So, because of the nature of the hexagonal data structure being a heptree graph (each node divides into seven nodes) we’ve decided to try out a new technology for us —<a href="https://neo4j.com/"> the neo4j graph database</a>. The idea is to:</p><ul><li>Efficiently traverse up- or down- the tree, to aggregate data up from the fine resolutions or zoom in from coarser data.</li><li>Bind any number of data sources later (starting with elevations, but thinking big!)</li><li>Federate databases, so if a customer has confidential, high resolution measurements on site we can easily join them.</li></ul><p>Because our data is so simple, the graph is both straightforward and beautiful:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XYstqpi66-0-NNHt8_4b0w.png" /></figure><h3>Wrapping Up</h3><p>Here’s where we’re at, with a little explanation:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rU0OkbxLG6zNAQAKx4UZlw.png" /></figure><blockquote>This is all you need for the first iteration. If the architecture diagram has more than just a few clear elements, you may struggle to deliver.</blockquote><p>Remember, you can always grow and adapt but to get something in-place, start simple. See you next time!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f5adf4a5788b" width="1" height="1" alt=""><hr><p><a href="https://medium.octue.com/72-hours-at-windeurope-architecture-f5adf4a5788b">72 hours at WindEurope: Architecture</a> was originally published in <a href="https://medium.octue.com">Octue</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[72 hours at WindEurope: Defining a use case.]]></title>
            <link>https://medium.octue.com/72-hours-at-windeurope-defining-a-use-case-648f1bdbc7ef?source=rss----e4237d4e4607---4</link>
            <guid isPermaLink="false">https://medium.com/p/648f1bdbc7ef</guid>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[wind-energy]]></category>
            <category><![CDATA[digitalization]]></category>
            <category><![CDATA[data-engineering]]></category>
            <dc:creator><![CDATA[Tom Clark]]></dc:creator>
            <pubDate>Mon, 17 Feb 2025 12:41:25 GMT</pubDate>
            <atom:updated>2023-04-24T20:03:10.716Z</atom:updated>
            <content:encoded><![CDATA[<p>It’s Monday evening in Copenhagen, and the challenge starts here: at Wind Europe 2023 we’ll be deploying a live data service. This article is for the first of our <em>“Six Steps” </em>— you can read the overview <a href="https://thclark.medium.com/72-hours-of-digitalisation-at-windeurope-7aa786be729d">here</a>.</p><p><em>This article is aimed at engineers, researchers and execs in the Wind Industry, to help understand the process of digitalisation. If you’re qualified in Systems Architecture or Data/Software Engineering, you’re way ahead of this; just get stuck in already!!</em></p><h3>About the ‘Define’ step</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*scnwxpx1xKqBzLll6_j-fg.png" /><figcaption>In the ‘Define’ step we aim to find a simple, well-scoped use case with clear value.</figcaption></figure><p>Thinking of digitalisation as a wide-ranging and nebulous exercise is a trap: the sheer breadth of work, technologies and processes involved is overwhelming. The golden rule is to <strong>start small, with clear boundaries.</strong></p><p>That doesn’t mean that a whole organisation can’t be working toward digitalisation at once; it’s just that each effort is extremely prone to failure (especially if it’s a large and complex one) —rather than risk it all, you sow many small seeds and see which ones take root.</p><p>Remember, the objective is to improve how effective you (or your team) are. It almost doesn’t matter where you start. Find a little problem that takes up some time…</p><h4>Frustration is your best friend</h4><p>If you’re frustrated with something during the work day, chances are that’s a good candidate. Especially if it’s something that keeps coming up (even if they doesn’t take much time, routine handle-turning tasks are a distraction). Here’s some examples:</p><ul><li>Logging onto a web portal and downloading data. <em>You might prepare geospatial data for site assessment, but for each site you end up logging into the ESA web portal, downloading and stitching images together. Whenever a customer asks about a new site, you breathe a heavy sigh…</em></li><li>Distributing data to more than one place in your organisation.<em> You might get power curves in PDF form then enter values into your internal file format. Great, until colleagues start repeatedly asking for it; and each time you have a back-and forth about exactly which one they mean…</em></li></ul><h4>Leave the gnarliest problem for later</h4><p>It’s best not to start with that one issue that’s super complex, requires dozens of stakeholders and is bugging the whole team. Chances are, if you work around the fringe of it you’ll start coming up with partial solutions that ease the way. You’ll also have more experience of what works and what doesn’t.</p><p>Once you’ve got a few simpler solutions under your belt, that’ll help draw a clear boundary around the really difficult one.</p><h4>Check it’s valuable</h4><p>Do not [repeat: <strong>DO NOT</strong>] get caught up with writing a business case, analysing accessible market sizes, competitor analyses and cost of services. All of these things are critical before launching a digital <em>product</em>, but that’s not what you’re doing. You’re planting a small seed.</p><p>By the time you’ve done all that stuff you could have built the thing already! The trick is to do the first couple of cycles around the <em>“Six Steps”</em> and <em>then</em> figure out, with your colleagues and industry partners, whether this deserves to be a full-blown product or service.</p><p>But, you <em>should</em> sanity-check up-front that what you’re thinking about is basically not a bad idea. Have a few conversations — phone relevant people up and ask “What if?”. Ask them how much time they spend doing a job, and how frequently they do it. Informal estimates aren’t super reliable, but they should be enough to give you a sense that something is worthwhile.</p><blockquote>If you can save a team member half an hour every two weeks, you save about 1% of their time. If it’s a frustrating or boring job, that feels like much more!</blockquote><p>Tiny time savings seem ridiculous, but add up a few of them and suddenly your team is much happier, quicker and more reliable.</p><h3>Defining our problem for 72 hours at WindEurope</h3><h4>Our best friend: Frustration</h4><p>At Octue, we’ve long been looking to help our customers improve their workflows around fetching geospatial data. We’ve done a bit ourselves to help out at times. The example above mentioned the sheer <em>grind </em>of fetching geospatial data by logging into a web portal, downloading images, stitching them together then re-cropping…</p><p>…and that’s before you even try to maintain correct metadata (like data sources/provenance). Don’t get us started.</p><h4>Avoiding gnarly problems</h4><p>Part of our vision is to help ‘data providers’ (organisations that generate measured or simulated geospatial data) give their users (like resource assessment engineers or operations planners) a really easy, intuitive and reliable way to fetch it. Handling aspects like authentication, permissions, metadata and integration of multiple private/public data stores is integral to that.</p><p>But that’s far too gnarly. It involves lots of stakeholders, lots of effort, lots of edge cases and a really broad problem statement. And frankly, more funding than we have.</p><h4>Narrowing it down</h4><p>Let’s follow our own advice: “<strong>Small and well-scoped”. </strong>What if we chose<em> just one</em> data source, from <em>just one </em>provider? If that were <em>public</em> data then we could do away with authentication and permissions.</p><p>Of course we want to maximise impact for the industry; so what’s the <em>one</em> data source, that’s <em>public</em>, that just about <em>everyone</em> in the industry uses at some stage?</p><blockquote>Elevations data. Of course!</blockquote><p>Surface elevations of the planet (and many other amazing data sets) are provided both by NASA’s Earthdata archive and by the European Space Agency (ESA), to the public, totally for free (requiring attribution, quite reasonably)! You can browse ESA’s <a href="https://earth.esa.int/eogateway/catalog">entire catalogue here</a>, but we’re all about the Copernicus Elevations Dataset:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1011/1*nInwoa6dCBX8zGWLr3cipg.png" /></figure><p><a href="https://spacedata.copernicus.eu/collections/copernicus-digital-elevation-model">Copernicus Digital Elevation Model - Copernicus Contributing Missions Online</a></p><h4>Checking it’s valuable</h4><p>We asked around a few Wind Engineers. Most were quite laid-back about the issue. As something that takes only a small fraction of your time, that’s quite understandable. We asked them to put a time on it, and got answers ranging between 15 and 45 minutes per site (that they prepared for very early stage assessment, so quite a few candidate sites). And they were preparing between 1 and 2 sites per fortnight.</p><p>So about 1% of their time. Not the biggest, most challenging part of the job, but not nothing — and quite impactful across the thousands of engineers globally.</p><p>That’s <em>perfect</em>. It seems really tiny, but in a few weeks of work, we can make every Wind Engineer in the world 1% more effective. Done alongside many other such exercises with similar impact, we can easily double the effectiveness of our workforce over the next couple of years.</p><h3><strong>Wrapping up</strong></h3><p>So we have our use case definition:</p><blockquote>We’re going to provide a solution that makes it easy and quick for anyone to access elevations data.</blockquote><p>Let’s be a bit more specific:</p><ul><li>In the Wind Industry there’s a drive for better visualisation, mapping and planning/optimisation tools. Being able to integrate directly into those would get us an A+ on the report card, although doing those integrations is out of scope here.</li><li>Being able to clearly demonstrate that we’d massively sped up the process is a clear metric for success.</li><li>Part of the pain is ensuring that there’s data available in a particular location, or stitching data when the desired location is near a boundary. So<strong> this should work anywhere in the world straightforwardly.</strong></li><li>A point elevation is useful to some extent, but generally if we’re doing resource assessment or planning a wind farm installation, we need to <strong>get data for an area, not just a point</strong>.</li><li>To be useful in design tools (eg when panning a map in a web application or investigating site potential globally), fetching data must be quick (“quasi real time” — fast enough not to really notice it).</li><li>With 10s lag, user interfaces start to feel very slow, but sub-second performance is likely unnecessary. Ballparking a requirement, <strong>we should fetch data with &lt;3s round trip time</strong>.</li></ul><p>And that’s our ‘Define’ step finished! I’ll drop back and add a link when the next step is published, but in the meantime you can follow along on <a href="https://www.linkedin.com/company/octue/">LinkedIn</a> — it’ll be great to see you!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=648f1bdbc7ef" width="1" height="1" alt=""><hr><p><a href="https://medium.octue.com/72-hours-at-windeurope-defining-a-use-case-648f1bdbc7ef">72 hours at WindEurope: Defining a use case.</a> was originally published in <a href="https://medium.octue.com">Octue</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[72 hours of digitalisation at WindEurope]]></title>
            <link>https://medium.octue.com/72-hours-of-digitalisation-at-windeurope-7aa786be729d?source=rss----e4237d4e4607---4</link>
            <guid isPermaLink="false">https://medium.com/p/7aa786be729d</guid>
            <category><![CDATA[wind]]></category>
            <category><![CDATA[digitalisation]]></category>
            <category><![CDATA[science]]></category>
            <category><![CDATA[energy]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[Tom Clark]]></dc:creator>
            <pubDate>Mon, 17 Feb 2025 12:41:08 GMT</pubDate>
            <atom:updated>2023-09-15T11:02:34.528Z</atom:updated>
            <content:encoded><![CDATA[<p>Working through the six steps to deliver a new geospatial service for the Wind Industry…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QaWVnmiLdFKkpgbY4WCO9w.png" /><figcaption>The six steps of digitalisation</figcaption></figure><h3>Welcome to the 72 hour challenge…</h3><p>We’re doing something special at WindEurope — rolling out a live data service, usable by the industry, there in the room. The purpose is to provide an example of implementing what we call the “Six Steps” — a tactic for progressing your organisation toward digitalisation.</p><blockquote>At WindEurope right now? <a href="https://www.linkedin.com/company/octue/">Follow us on linkedIn</a> or join us at our stand beside the poster session!!!</blockquote><h4>The articles</h4><ul><li>Introduction — this article. Read on!</li><li><a href="https://thclark.medium.com/72-hours-at-windeurope-defining-a-use-case-648f1bdbc7ef">Step 1 — defining a use case</a></li><li><a href="https://thclark.medium.com/72-hours-at-windeurope-architecture-f5adf4a5788b">Step 2 — architecting a system</a></li><li><a href="https://thclark.medium.com/72-hours-at-windeurope-engineering-the-cloud-bits-f7ce57733704">Step 3 — engineering the cloud infrastructure</a></li><li><a href="https://medium.com/@thclark/72-hours-at-windeurope-populating-data-5637871596a">Step 4 — populating data from the European Space Agency</a></li><li><a href="https://thclark.medium.com/72-hours-at-windeurope-delivering-the-service-8fcd50b61649">Step 5 — delivering data with a map and a python client</a></li><li><a href="https://medium.com/@thclark/72-hours-at-windeurope-using-the-service-eb080e2e9963">Step 6 — using the service and gathering feedback</a></li></ul><h4>The presentation</h4><ul><li><a href="https://docs.google.com/presentation/d/1kXY8gLo-555yhsLE3Lk_jpDaYugQ6cghjPVzUWxWmms/edit?usp=sharing">Slides for the presentation given at WindEurope</a></li></ul><h4>The map</h4><ul><li><a href="https://codesandbox.io/s/up-and-down-the-world-in-72-hours-je3mob">https://codesandbox.io/s/up-and-down-the-world-in-72-hours-je3mob</a></li></ul><h4>The code</h4><ul><li><a href="https://github.com/octue/windeurope72hours-elevations-client-python">Python client (helper to fetch data for you)</a></li><li><a href="https://github.com/octue/windeurope72hours-elevations-api">API and Cloud Infrastructure definitions</a></li><li><a href="https://github.com/octue/windeurope72hours-elevations-populator">On-demand service to populate regions</a></li></ul><h3>Why?</h3><p>I mean, seriously, <em>why bother with digitalisation? And what does it mean to me? </em>I think our main motivation is to help the industry scale — a major part of that is overcoming staffing problems:</p><ul><li>People in data-heavy roles lose 45% of their time in low-value data management tasks (Anaconda Foundation 2022).</li><li>Only 20% of technological/R&amp;D effort has significant organisational outcomes (Gartner 2019) — the<a href="https://medium.com/@shivayogiks/what-is-technology-adoption-life-cycle-and-chasm-e07084e7991f"> so-called “technology chasm”</a>.</li><li>It takes 10+ years to train specialist technical staff.</li><li>To meet the 1.5C target by 2030, installation rate needs to grow by 5x very quickly (<a href="https://gwec.net/globalwindreport2023/">GWEC 2023</a>).</li><li>Installation rate is constrained by (among other things) staff availability.</li></ul><p>Think about it. Your staff are wildly talented, but are only 55% x 20% = 11% efficient in their core role, because of reasons that could be solved* with effective digitalisation. It takes ~10 years to train more. You need 5x more staff in the next 3 years.</p><blockquote>This is what I mean when I say “Digitalisation”. I mean “Make everyone in the industry 10x better and quicker at what they do. FAST.”</blockquote><p>Not to mention that all those <strong>wasted staff wages will cost £3.9b/year by 2025 </strong>(based on 132,000 professionals, a 55% efficiency, and a £44k wage +50% overhead). But that kind of seems insignificant.</p><p><em>*Or at least substantively improved. In particular, automated and easy data interchange will minimise data management overhead, while modularisation helps new technologies cross the chasm — particularly in the area of software and analytics.</em></p><h3>Levels of digitalisation</h3><p>Digitalisation happens at 3 levels:</p><ul><li>Strategic: What effect should this have on your core mission?</li><li>Tactical: What conditions and processes will you put in place, to cultivate success at an organisational level?</li><li>Implementation: What actions must be taken at a team or individual level?</li></ul><p><strong>The Six Steps we’re presenting here are a tactic for digitalisation.</strong> They’re designed to get small cogs turning — in the next 72 hours we’ll be giving an example implementation following the Six Steps.</p><p>You can apply the tactic many times simultaneously across your business units… you’ll also need higher level tactics to start meshing everybody’s efforts together, and a clear strategy to point everyone in the right direction. But those will be the topic of other articles and other challenges!</p><h3>Get involved</h3><p><a href="https://www.linkedin.com/company/octue/">Follow us on linkedIn</a> or read through the articles linked above, to get going!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7aa786be729d" width="1" height="1" alt=""><hr><p><a href="https://medium.octue.com/72-hours-of-digitalisation-at-windeurope-7aa786be729d">72 hours of digitalisation at WindEurope</a> was originally published in <a href="https://medium.octue.com">Octue</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>