<?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[Stories by Bruce Becker on Medium]]></title>
        <description><![CDATA[Stories by Bruce Becker on Medium]]></description>
        <link>https://medium.com/@brusisceddu?source=rss-34e9af91c30d------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*K-t_xwralp26ccpOTgshsQ.jpeg</url>
            <title>Stories by Bruce Becker on Medium</title>
            <link>https://medium.com/@brusisceddu?source=rss-34e9af91c30d------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 03 Jun 2026 23:48:33 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@brusisceddu/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[Ansible Style Guide in Action]]></title>
            <link>https://medium.com/@brusisceddu/ansible-style-guide-in-action-f3cbf1b13d2?source=rss-34e9af91c30d------2</link>
            <guid isPermaLink="false">https://medium.com/p/f3cbf1b13d2</guid>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[operations]]></category>
            <category><![CDATA[tdd]]></category>
            <category><![CDATA[egis]]></category>
            <category><![CDATA[ansible]]></category>
            <dc:creator><![CDATA[Bruce Becker]]></dc:creator>
            <pubDate>Thu, 26 Jul 2018 15:09:23 GMT</pubDate>
            <atom:updated>2022-06-17T08:01:24.513Z</atom:updated>
            <cc:license>https://creativecommons.org/licenses/by-sa/4.0/</cc:license>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IEcWe839mvKCAhS3Teg5jQ.jpeg" /><figcaption>Step into the ring…</figcaption></figure><p>A few weeks ago, I announced a <a href="https://egi-foundation.github.io/ansible-style-guide">style guide</a> for developing Ansible roles. The intended audience is the developers of middleware components<a href="https://brucellino.github.io/blog/Style-Guide-In-Action#fn:AlsoEdgeComputing">1</a>and the aim of the guide is to improve or ability to collaborate, and to deliver products smoothly and reliably, without breaking the infrastructure in general.</p><p>A typical case would be an existing product which performs some specific function <em>e.g.</em>, a storage management front-end service. Another case would be the one I want to use as an example here — the so-called “worker-node” function.</p><h3>Case: Worker Node</h3><p>The worker node is essentially a composition of clients which interact with infrastructure components:</p><ul><li>“<em>validate user token</em>”</li><li>“<em>get data</em>”</li><li>“<em>submit workload request to your local resource manager</em>”</li><li>“<em>check how that’s going</em>”</li><li>“<em>send accounting data</em>”</li></ul><p><em>etc</em>. If we were starting out now, these functions might well be built as serverless endpoints, but as with all things infrastructure-related, one has to deal with the legacy of what came before.</p><p>The worker node function has typically been distributed as a meta-package in OS repositories — an RPM or DEB which expresses all of the necessary dependencies. A site wishing to provide the worker node function could therefore easily ensure that this was present by simply <em>installing</em> the metapackage. That is, if the prerequisite state is assured.</p><p><strong><em>That’s a big if and a big ask in 2018.</em></strong></p><h3>Building the worker node now</h3><p>If we had the case of a totally new site in the federation wishing to participate by offering compute resources, we would probably want this site to be integrated and functional with a little demand on the site itself. If we start from this position, we might well consider the site resources and the layer of middleware necessary to federate it as separated by a well-defined contract : We (federation) give you a bunch of endpoints to send data to, you (resource provider) send the data. We’ll go one step further and provide you with the functions which send that data, so that you have zero interference with your setup.</p><p>This separation of function from platform is why containers were developed.</p><h3>Modelling services</h3><p>How would things be different, if we approached this from a <a href="http://12factor.net/">12 factor</a> point of view? We have to deal not only with the <em>installation</em> of binaries and other files, but also the <em>configuration</em> of these, around site-specific setups, procedures and policies. The last thing a product team wants to deliver to an endpoint which will eventually use it, is a product which doesn’t play nicely with the rest of the environment. This could include, for example, hard-coding certain paths, asserting the presence of particular users or, usage of the network in a specific way. All of these would be examples of “bad behaviour”, since the integration of the site into the federation is not done according to a central prescription, but according to an OLA agreed to by both parties.</p><p>We therefore need to deliver not only <em>products</em>, but also <em>strategies for deploying</em> those products, which are flexible enough to respect local site policies. If we are to be fluid, we also need a high degree of <strong>trust</strong> that the final result will not only perform as advertised (<em>i.e.</em>, works, and does what it needs to do), but also won’t break local setups. The Ansible Style Guide describes aspects of developing, testing, documenting and delivering the role. It is more about <em>how</em> than <em>what</em>, because the overriding, big-picture goal is to <strong>solve problems and have them</strong> <strong><em>stay solved</em></strong>.</p><p>The way to do this is, as with most engineering problems, to factor out the big problem into smaller ones in some logical way. Doing things in this way, we come to have a sort of <em>“dependency tree”</em> of roles, so that infrastructure engineers can separate problems and solve them permanently.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/224/0*52kkd3CaKXR5ry0Y.png" /><figcaption>Figure 1: A simple representation of the dependency graph of Ansible roles for the UMD User Interface.</figcaption></figure><p>This has the happy consequence however that end users (typically, site administrators) can re-use these products with confidence at their site, know where to go for support and understand how to contribute back. Looking at the simple case of building a User Interface, shown in <a href="https://brucellino.github.io/blog/Style-Guide-In-Action#ui">Figure 1</a>, this is quite easy to understand. We can even link the roles themselves to various actions and outputs as shown in <a href="https://brucellino.github.io/blog/Style-Guide-In-Action#ui-products">Figure 2</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/719/0*iT29OIQe00VwBHW_.png" /><figcaption>Figure 2: Representation of the expression of the Ansible role and the resulting product — container images in <a href="https://quay.io/organization/egi/">EGI&#39;s Quay Organisation</a>. The vertical axis describes the dependency graph of the Ansible roles for UMD products, while the horizontal axis shows how these are expressed in various environments by applying them. The final products (container images in this case) are immediately re-usable.</figcaption></figure><p>In this way, we can continue modelling individual roles and map events in source code to artifacts in production. The final touches to our modelling flow are added in <a href="https://brucellino.github.io/blog/Style-Guide-In-Action#figure3">Figure 3</a>, where we add the links to the respective GitHub repositories and the all-important testing phase — more on that in <a href="https://brucellino.github.io/blog/Style-Guide-In-Action#tests-and-development-of-roles">a later section</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*DpkveAVCky1paudy.png" /><figcaption>Figure 3: Schematic diagram of the full continuous integration and delivery of UMD configurations, as well as dependency tree respective Ansible roles, for the simple case of the User Interface. In this case, we deliver pre-built and Docker images to the Quay registry. Testing is done with <a href="http://testinfra.readthedocs.io">TestInfra</a>, a python-based infrastructure spec tool.</figcaption></figure><h3>Action</h3><p>Now that we have a clear idea of how to go about modelling our roles, and putting the tools in place for our continuous integration and delivery pipeline, we can take a closer look at using the EGI Ansible Style Guide to get started.</p><h3>Getting started</h3><p>The first thing you need to do is get the style guide, and use it to create a new Ansible role. Ansible roles are usually generated with the <a href="https://docs.ansible.com/ansible/latest/cli/ansible-galaxy.html?highlight=galaxy#init">Ansible Galaxy CLI</a> command init, but this uses a role skeleton which doesn’t cover many of EGI’s bases. We therefore use the egi-galaxy-template in the Style Guide repo to generate a better one:</p><pre>git clone https://github.com/EGI-Foundation/ansible-style-guide ansible-galaxy init --role-skeleton=ansible-style-guide/egi-galaxy-template ansible-role-wn</pre><p>We now have a shiny new Ansible role : ansible-role-wn. Before we go about implementing it, we need to have a means for implementing tests and generating test scenarios. Typically we use <a href="http://molecule.readthedocs.io/">Molecule</a> for this, which is great for generating a full set of test scenarios and strategies.</p><p>Install Molecule with pip, and generate a scenario, using a virtualenv:</p><pre>$ virtualenv style $ source style/bin/activate (style)$ pip install molecule (style)$ molecule init scenario -r ansible-role-wn</pre><h3>Initial Commit</h3><p>At this point we have an empty (but stylish) role in a clean environment and a default testing scenario.</p><p>Running the test strategy should result in all of it passing<a href="https://brucellino.github.io/blog/Style-Guide-In-Action#fn:MoleculeTest">2</a>:</p><pre>molecule lint<br>molecule dependency<br>molecule create<br>molecule converge<br>molecule verify</pre><p>This means absolutely nothing, of course — we need to start adding some failing tests !</p><h3>Tests and Development of Roles</h3><p>The EGI UMD follows something similar to an <a href="https://en.wikipedia.org/wiki/Acceptance_test%E2%80%93driven_development">Acceptance Test Driven Development</a> pattern.</p><p>There are several products, each of which are testing independently upstream by their owners, and candidates for inclusion in the distribution are then communicated to the release co-ordination team. This team then checks whether the <a href="http://egi-qc.github.io/"><strong>UMD Quality Criteria</strong></a> are respected by the product, and whether the new version breaks anything already in production. There are several strategies for doing this, and the one which makes the most sense varies from product to product. Then of course, there is the <strong>expected functionality of the product</strong> as it would be in production. Finally, there is the consideration that we expect these roles to be <strong>deployed into production</strong>, which means that the configurations should be hardened and secure by design. Deploying faulty configurations into production environments — even with fully-patched software — can lead to serious degradation in operational security.</p><p>We therefore need to implement tests for each of these, as far as we can.</p><p><a href="https://en.wikipedia.org/wiki/Test-driven_development">Test-Driven Development</a><a href="https://brucellino.github.io/blog/Style-Guide-In-Action#fn:TDD">3</a>, from Extreme Programming<a href="https://brucellino.github.io/blog/Style-Guide-In-Action#fn:XP2">4</a>suggests that engineering proceed on a <strong>“Red, Green, Refactor”</strong> cadence.</p><h3>Red</h3><p>Considering we are developing the functionality of a worker node here, the first thing we could check for is that the relevant packages are actually present. Using <a href="https://testinfra.readthedocs.io/en/latest/modules.html#testinfra.modules.package.Package">TestInfra’s </a><a href="https://testinfra.readthedocs.io/en/latest/modules.html#testinfra.modules.package.Package">package</a> module, we can write this assertion.</p><pre>def test_packages(host, pkg): <br>assert host.package(pkg).is_installed</pre><p>Seems simple, right? All we need to do is pass the correct fixtures to the function test_packages, to see whether the host we will provision with molecule is in the desired state.</p><p>It is important to remember what we are testing for here. We are <strong>not</strong> testing whether the Ansible playbook has run correctly — or even <strong><em>whether</em></strong> an Ansible playbook has run at all — we are simply making assertions about the host. These assertions should be true no matter how the host arrived at its current state, and of course should reflect the desired state in production environments.</p><p>We therefore need to consult the source of truth<a href="https://brucellino.github.io/blog/Style-Guide-In-Action#fn:WN_repo">5</a>for the worker node package requirements — the same repository that the product team is maintaining which the UMD team has tested and done the QC tests on — to write the fixtures for this test.</p><p>We can still converge the role with no problems (nothing has been implemented yet), but when it comes to running the tests (molecule verify), we will be duly informed that they are all failing</p><p>Great success. Go ahead and add that test to the scenario:</p><pre>git add molecule/default/test_packages.py git commit -m &quot;Added failing test for packages&quot; <br>git push</pre><p><strong>Note</strong>: using the EGI Ansible Style Guide, there is a .travis.yml already set up for you if you want to do CI on Travis. All you need to do is enable the repository and Travis will take care of the rest.</p><h3>Green</h3><p>The next step in TDD is to implement <strong><em>just enough</em></strong> code to make that test pass. With Ansible, this is amost too easy:</p><p>First, create a variable in defaults/main.yml to hold the packages that need to be present, taking into account differences across operating systems and OS releases:</p><pre>--- <br># defaults/main.yml <br>packages:<br>  redhat:<br>   &#39;6&#39;:<br>     - wn_pkg_1<br>     - wn_pkg_2<br>   &#39;7&#39;:<br>     - WN_1 <br>     - WN_2 <br>  debian:<br>   jessie:<br>     - worker_node<br>   stretch:<br>     - worker_node</pre><p>Next, add a task which ensures that those packages are present:</p><pre>--- # tasks/main.yml<br>- name: Ensure worker node packages are present<br>  package:<br>    name: &quot;{{ item }}&quot; <br>    state: present<br>  loop: &quot;{{ packages[ansible_os_family|lower][ansible_os_distribution_major] }}&quot;</pre><p>Here, we take advantage of the facts gathered by Ansible identifying the host OS and version — which of course is why we crafted the variable packages in the way we did.</p><p>Of course, these tasks need to be applied in an actual playbook. Molecule creates the simplest possible playbook for the scenario for you:</p><pre>---<br># molecule/default/playbook.yml<br>- name: Converge <br>  hosts: all<br>  roles:<br>    - role: ansible-role-wn</pre><p>This playbook is used during the converge stage. If there are any dependencies which are required (which are now clear from our dependency tree!), they can be added before the application of the role you are working on :</p><pre>---<br># molecule/default/playbook.yml<br>- name: Converge <br>  hosts: all <br>  roles: <br>    - {role: EGI-Foundation.umd, release: 4, tags: &quot;UMD&quot; }<br>    - {role: EGI-Foundation.voms-client, tags: &quot;VOMS&quot; }<br>   - {role: ansible-role-wn, tags: &quot;wn&quot;}</pre><p>Once we have implemented the functionality, we repeat the converge and verify until the tests are passing.</p><h3>Refactor, repeat</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/725/0*LWJ2vuA63FPMgMIO.png" /><figcaption>Figure 4: Schematic representation of a Test-Driven Development of an Ansible role.</figcaption></figure><p>Once the tests are passing, we take another look over our code and tests and try to ascertain whether the tests are really doing what we want them to do and whether that part of the role has been implemented in the best possible way. <a href="https://brucellino.github.io/blog/Style-Guide-In-Action#figure4">Figure 4</a> shows a general workflow of how this should be done.</p><h3>Conclusions</h3><p>Clearly, we are not done with the development of the worker node role. However we can be sure that application of this role to any production site will <strong>not break the site</strong> — a very important point! We now have a solid base from which to step to the next iteration, adding tests for desired behaviour and functionality to achieve it as we go. We also have the means to express this role in arbitrary environments — be they bare metal, hypervisor virtualisation, or Linux containers — all from a <strong><em>single</em></strong> well-maintained role.</p><p>As discussed <a href="https://brucellino.github.io/blog/Style-Guide-In-Action#case-worker-node">above</a> The worker node needs to be able to perform many functions — we should try to implement tests for as many of these functions as we can. Similarly, as many of the EGI Quality Criteria should be included in our test coverage, so that we can ensure sites that by applying these roles off-the-shelf, they will be increasing the stability of their site and decreasing their day-to-day operations load.</p><p>Furthermore, by using a <strong>common style guide</strong> for developing these roles, we make it easier to get started for others who want to contribute. The style guide helps peers and collaborators do code review when features or development is proposed via pull request, and gives clear guidelines for how these contributions should be recognised.</p><p>All in all, this is a small step towards improving the stability of sites in the EGI federation, without compromising agility and quality, and reducing the friction in the middleware delivery pipeline.</p><p><em>Originally published at </em><a href="https://brucellino.github.io/blog/Style-Guide-In-Action"><em>brucellino.github.io</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f3cbf1b13d2" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[e-Infrastructure Components that are Built to Last]]></title>
            <link>https://medium.com/@brusisceddu/e-infrastructure-components-that-are-built-to-last-b407e34e83a3?source=rss-34e9af91c30d------2</link>
            <guid isPermaLink="false">https://medium.com/p/b407e34e83a3</guid>
            <category><![CDATA[cloud-computing]]></category>
            <category><![CDATA[test-driven-development]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[ansible]]></category>
            <category><![CDATA[style-guides]]></category>
            <dc:creator><![CDATA[Bruce Becker]]></dc:creator>
            <pubDate>Sat, 14 Apr 2018 00:00:00 GMT</pubDate>
            <atom:updated>2018-07-20T11:37:27.980Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OyjYkRJh3bgsPTFu__vgKA.jpeg" /><figcaption>Fashions come and go, but style never goes out of style.</figcaption></figure><p><strong>TL;DR We have started work on an </strong><a href="https://github.com/EGI-Foundation/Ansible-Style-Guide"><strong>Ansible Style Guide</strong></a><strong>. We hope it will encourage re-use and collaboration in our community, increase the velocity of delivery, and ultimately improve the quality of our infrastructure</strong></p><h3>The dark art of turning computers into science</h3><p><strong>“e-Infrastructures”</strong> composed of many different ICT services underpin much of modern research activities. Despite their importance, they are rarely seen or interacted with directly by researchers themselves, which makes them difficult to talk about<a href="https://brucellino.github.io/blog/blog/2018/04/14/Ansible-Style-Guide/#fn:AskMyMom">1</a>. Just like any other kind of research infrastructure however, they have to be <em>built</em>, and the way in which they are built and delivered informs aspects of their usability, fitness for purpose, scalability, sustainability, cost-effectiveness, and more. There are many ways to describe what e-Infrastructures are<a href="https://brucellino.github.io/blog/blog/2018/04/14/Ansible-Style-Guide/#fn:ECDef">2</a>, but I like to think of it as:</p><blockquote><strong><em>e-Infrastructures</em></strong><em>: the dark art of turning computers into science.</em></blockquote><p>There are of course as many ways to turn computers into science as there are computers (or scientists, for that matter) — but there’s only so far you can get by yourself. At some point, you need to scale — either by accessing more computer resources, or by accessing more people through services which enable collaboration. This is where you start moving from doing research which needs computers, to research which needs infrastructures. This is a qualitatively different undertaking.</p><p>The same thing that makes this research (and hence the e-Infrastructures which underpin them) so tricky also makes them powerful: <strong>you can’t do them in isolation.</strong> Their value lies not in in their components, but in the <em>interaction</em> between these components — and the most important component in them has always been <strong>people</strong>.</p><p>Now, if we want to wield the magic that turns computers into science, we’d best do it at a pace which research itself requires, preferably without breaking things. We’ve <a href="https://brucellino.github.io/blog/blog/2018/04/14/Ansible-Style-Guide/#fn:WhoIsWe">3</a> not been around long enough to see where “Move Fast and Break Things” leads eventually. Spoiler alert: it’s not<a href="https://brucellino.github.io/blog/blog/2018/04/14/Ansible-Style-Guide/#fn:xkcd">4</a> good<a href="https://brucellino.github.io/blog/blog/2018/04/14/Ansible-Style-Guide/#fn:TheBook">5</a>(<em>i.e.</em>, everything is broken).</p><p>Based purely on my own experience however, infrastructures often lag considerably behind the pace of development of their components. This makes sense — there is always more rapid development at the edges of technology than at its centre; it’s called the “Bleeding Edge”<a href="https://brucellino.github.io/blog/blog/2018/04/14/Ansible-Style-Guide/#fn:BleedingEdge">6</a> for a reason, after all: that’s where most of the pain is! But why do we have to make a choice between a decaying, if stable infrastructure, and one which is so brittle that it hurts to use it? There is perhaps a sweet spot in terms of proximity to the bleeding edge — a situation where we can move fast enough for infrastructures to adopt relevant new technologies (before communities get fed up with the slow pace and branch off on their own), but not so fast that we break things.</p><h3>Keeping pace, together</h3><p>How can we balance the need for <strong>change</strong> with the need for <strong>collaboration</strong> and <strong>co-operation</strong> ?</p><p>I want to discuss one specific case here, specifically related to the smooth delivery of <em>e-infrastructure</em> service components<a href="https://brucellino.github.io/blog/blog/2018/04/14/Ansible-Style-Guide/#fn:ServiceComponent">7</a>. What I’ll describe here is a <em>style guide</em> for developing the code which builds our services, and how that guide can be an expression of our operations methodology and our culture of collaboration, mutual support and desire to build something that our children will still be using. I will be using the case of <a href="http://www.ansible.com/">Ansible</a> <a href="http://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html">roles</a>, but hopefully the points discussed here, as well as the later implementation, will be generic enough to cover other use cases too<a href="https://brucellino.github.io/blog/blog/2018/04/14/Ansible-Style-Guide/#fn:others">8</a>.</p><h3>Infrastructure as code</h3><p>The <em>“Infrastructure as Code”</em> pattern <a href="https://www.martinfowler.com/bliki/InfrastructureAsCode.html">has come to some maturity recently</a><a href="https://brucellino.github.io/blog/blog/2018/04/14/Ansible-Style-Guide/#fn:IaC">9</a>, but refers mostly to “Managing Servers in the Cloud”. What about “Managing the actual cloud” ? Well, this may be well-covered by a similar pattern (or more precisely, job description) — the <a href="https://landing.google.com/sre/"><strong>Site Reliability Engineer</strong></a>, or SRE<a href="https://brucellino.github.io/blog/blog/2018/04/14/Ansible-Style-Guide/#fn:SREBook">10</a>. To quote Google:</p><blockquote><em>SRE is what you get when you treat operations as if it’s a software problem</em></blockquote><p>While we’re a long way away from that, there is a quiet shift happening in the e-Infrastructure world. There is a recognition that infrastructures are complex, interacting systems, but that these systems <strong>can indeed be described by software</strong>.</p><p>We do have a pretty good framework for managing services in EGI, based on a few industry standards. These standards require certain procedures and documentation to be in place in order to comply with them, and help to ensure that services are delivered in a consistent, reliable way to customers and peers in a federation.</p><p>Compliance, however can be attained in many ways — the standards make few statements about <em>how</em> requirements are met — only that they are. This leaves a lot of room for interpretation, which is a good thing if the standard is to apply in the widest possible set of cases. However, that can also leave open the possibility for confusion and conflicting styles to take hold, with some negative consequences we describe below.</p><h3>Code as Community</h3><p>Style is almost always a matter of opinion. As the old saying goes, there’s no accounting for taste. Modern configuration management tools use high-level languages such as YAML to describe what they do and how they do it, allowing developers and operators to communicate their work almost in plain English. The great irony is that while this makes it easier for <em>individuals</em> to read and write code, it can make it quite difficult for communities or even teams to do so, since individuals are prone to expressing their individual style. Differences in style can be a really positive thing, allowing freer-thinking, more creativity and ultimately more satisfaction in working together, as long as there is consensus along broad lines as to what constitutes good style, and more importantly <em>what constitutes bad style</em>.</p><p><strong>If a community is to truly be a community, the individuals which comprise it must have values and ideas in common, beyond what is required by the language, the framework and the standards adopted.</strong></p><p>Part of the security that comes with adopting a tool like Ansible<a href="https://brucellino.github.io/blog/blog/2018/04/14/Ansible-Style-Guide/#fn:CanNotMust">11</a>is the huge community that comes along with it. The fact that it is in use in so many different environments, with so many different goals and usage patterns, is in a way a vaccine against bias. This diversity can be channelled into some form of common understanding of what constitutes good style, and highlighting where the flexibility of the tool or language is being abused (as well as whether that abuse is justified).</p><p>Almost all languages have their linters<a href="https://brucellino.github.io/blog/blog/2018/04/14/Ansible-Style-Guide/#fn:ListOfLinters">12</a>, and Ansible is no different. There are in fact two different style checkers for Ansible:</p><ol><li><a href="https://github.com/willthames/ansible-lint">ansible-lint</a></li><li><a href="https://github.com/willthames/ansible-review">Ansible Review</a></li></ol><p>The jury is currently out on whether the latter is still alive, but given the tenfold ratio of almost all the metrics, I think it’s safe to say that at the time of writing ansible-lint wins.</p><h3>Contributing to the Commons</h3><p>In a service federation like EGI, there is a strong temptation for individual service providers to develop these roles themselves — a symptom of the <a href="https://en.wikipedia.org/wiki/Not_invented_here">“Not Invented Here”</a> syndrome. The barrier to creating these roles is particularly low, especially if we consider the case where the community using these roles is <em>empowered</em> with solid knowledge of how the tool works. Much of the impetus to “rediscover the wheel” derives from the quality and reliability of the <em>other</em> wheels which have already been built. Instead of a robust design for “a wheel”, which can be re-used by anyone who wants to build a car, we end up with many flimsy wheels which just barely work. This is clearly a suboptimal situation — there is little to be gained by having such duplication of work, and the individual effort required to produce high-quality work is high. It is, however, a situation which nevertheless persists in part due to the lack of <strong>ownership</strong> of the products created.</p><p>How then can we create useful bits of infrastructure <em>as a community</em>, where these things are owned by the community itself? Ownership need not be restricted to the mere authorship of code — there are other ways to “own”, for example <strong>code reviews</strong>, <strong>bug fixes</strong>, <strong>contributing to the style guide</strong>, and of course <strong>ownership through usage</strong>, <em>i.e.</em> reporting issues, helping developers produce high-quality work, talking about the work at meetings, etc.</p><p>The main point here is that there are <strong>many roles to play</strong>, beyond the mere authorship of code, and each of them is important.</p><h3>A guide, not a standard</h3><p>Finally, a style guide is <strong>not a standard</strong>. It can be <em>treated</em> as one, but then it mostly ceases to offer the benefits of creativity described above. A guide is most useful when it is the sincere expression of consensus, based on the experience of a community of practice, of a <em>better</em> way of conducting an activity — not the <em>only</em> way, nor indeed the <em>best</em> way<a href="https://brucellino.github.io/blog/blog/2018/04/14/Ansible-Style-Guide/#fn:WhoKnows">13</a>. A guide should be more <em>descriptive</em> than prescriptive — describing <em>how</em> one should go about doing something rather than <em>what</em> one should be doing.</p><p>We’ve hit this problem so many times that the time has come to address it.</p><h3>Reducing “Not Invented Here” Syndrome</h3><p>Let’s say you’re starting work on the development of a new role. This could be either an existing service that doesn’t have a configuration management repository, or perhaps you’re working on a whole new service. The chances are that this role <em>already exists</em> — but the only easy way to check that is to see if it’s on <a href="https://galaxy.ansible.com/">Galaxy</a>. Let’s see:</p><pre>ansible-galaxy search umd Found 3 roles matching your search: Name Description ---- ----------- brucellino.UMD3 UMD3 repository for CentOS 6.x egi-qc.umd UMD distribution repository deployment AAROC.UMD-role Configures the Unified Middleware Distribution and Cloud Middleware Distrbution Stacks on your host</pre><p>Uh-oh…</p><p>OK — but middleware components will be there, right? I’ll save you a lot of frustration, dear reader — they are not. This is not to say that a lot of work has not been done in our community in writing roles for “domestic use”. The tragedy is however that all this effort usually doesn’t produce a result of sufficient quality and scope that it’s reusable. Now, this is usually a problem with the role metadata, meaning that either it’s not enabled on Galaxy, or metadata doesn’t parse properly — but a larger problem is when roles are written to be so specific to a given use case or site that they cannot be re-used elsewhere.</p><h3>Improving re-usability</h3><p>For a role to be re-used, it has to be absolutely trustworthy, and this means putting some more effort into developing these infrastructure components, with a wider appreciation of it’s benefit to the wider community.</p><p>All of these problems could be entirely avoided, and transparently to the developer, by slightly changing the environment and making the development process a little more frictionless.</p><h3>A better generator</h3><p>Ansible, like almost any good tool out there, provides a neat way to generate a skeleton for a new project: <a href="http://docs.ansible.com/ansible/latest/reference_appendices/galaxy.html#create-roles">ansible-galaxy init</a>. It’s clear that many of the roles for EGI infrastructure that have been produced so far have not taken advantage of this, from the missing directories, files, <em>etc.</em>, but even those that <em>have</em> been generated with Ansible Galaxy have conflicting or missing metadata<a href="https://brucellino.github.io/blog/blog/2018/04/14/Ansible-Style-Guide/#fn:Typical">14</a>, resulting in them failing to show up in the Galaxy search.</p><p><strong>But why should we be fiddling about with metadata in the first place?</strong></p><p>In terms of the middleware, we only have a few options — these should be automatically added to the supported platforms in metadata.yml. By the same token, if you’re developing a piece of infrastructure, it’s probably a good idea to have your role cover the possible platforms, and not just one specific option.</p><h3>Testing by default</h3><p>Another sore point in re-use is knowing whether the role <em>actually works</em>. Sure, the documentation can express the limits of what the role is designed for, but again we hit the bias implicit in the developer’s mind. The only way to know if a role really does what it says it does is:</p><ul><li>Apply it to various initial states.</li><li>Make assertions on the final state.</li></ul><p>This borrows a lot from the <a href="https://www.agilealliance.org/glossary/tdd/">Test-Driven Development (TDD)</a> paradigm that Agilists know and love. Which now begs the question:</p><blockquote><strong><em>Where are all the tests?</em></strong></blockquote><p>There are two things we can do to improve both the re-usability of the role and the life of the developer:</p><ul><li>Write the tests first</li><li>Generate appropriate test coverage along with the role skeleton</li></ul><p>The former needs a whole post in infrastructure spec tests, which is in the pipeline. For the latter, we can easily include at least a default <a href="http://molecule.readthedocs.io/">testing scenario with molecule</a>, as well as a <a href="https://docs.travis-ci.com/">.travis.yml</a> so that the role can have continuous integration.</p><p>This won’t solve <em>all</em> of our problems and certainly doesn’t <em>guarantee</em> re-use of existing roles, but laying this groundwork and making it easy to write solid, widely applicable roles will help. Infrastructure components should be reliable, do what they says they do, satisfy the needs of the community rather than the individual, and not introduce any vulnerabilities!</p><p>Stay tuned…</p><p>Tagged with <a href="https://brucellino.github.io/blog/tags/index.html#community">community</a> • <a href="https://brucellino.github.io/blog/tags/index.html#style">style</a> • <a href="https://brucellino.github.io/blog/tags/index.html#commons">commons</a> • <a href="https://brucellino.github.io/blog/tags/index.html#TDD">TDD</a> • <a href="https://brucellino.github.io/blog/tags/index.html#DevOps">DevOps</a> • <a href="https://brucellino.github.io/blog/tags/index.html#Infrastructure">Infrastructure</a></p><p><em>Originally published at </em><a href="https://brucellino.github.io/blog/blog/2018/04/14/Ansible-Style-Guide/"><em>brucellino.github.io</em></a><em> on April 14, 2018.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b407e34e83a3" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[DevSecOps]]></title>
            <link>https://medium.com/@brusisceddu/devsecops-1223732b8086?source=rss-34e9af91c30d------2</link>
            <guid isPermaLink="false">https://medium.com/p/1223732b8086</guid>
            <category><![CDATA[vulnerability]]></category>
            <category><![CDATA[continuous-integration]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[continuous-delivery]]></category>
            <dc:creator><![CDATA[Bruce Becker]]></dc:creator>
            <pubDate>Sun, 08 Apr 2018 00:00:00 GMT</pubDate>
            <atom:updated>2018-04-11T07:33:20.589Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tLNMa-ZNJoAnQxI6BhE9ww.jpeg" /><figcaption>You can’t heal what you can’t see</figcaption></figure><p>I have been thinking about how to include a vulnerability scan in a pipeline to deliver applications to EGI FedCloud sites. It goes a little like this.</p><h3>The big picture</h3><p>A CSIRT’s job is never done! A distributed computing platform is inherently open to risks, even more so a collaborative platform. Ensuring that the platform is safe and secure for users is a thankless, full-time job. The attack surface can be very large indeed when one considers a platform like <a href="https://www.egi.eu/federation/egi-federated-cloud/">FedCloud</a> — there are several layers to it which may provide vectors for exploits. While the majority of these can be locked down by the operators of these sites, at the end of the day, they are still used by … well, <strong>users</strong>.</p><h3>Whose cloud is it anyway ?</h3><p>There is the usual thin line to tread between usability, ease of access, and security. Much of the appeal of a thing like FedCloud is the freedom of users — and the communities which they belong to — to define their own applications and workload scenarios, molding the basic infrastructure into something they are comfortable with. In essence, by providing a common IaaS or PaaS layer, FedCloud allows users to deploy arbitrary applications, at their own speed, under their own control. Of course, with great freedom comes great responsibility.</p><p>There is an inherent difference between users and operators : the former are trying to optimise their <em>usage</em> of an infrastructure, while the latter are trying to optimise the <em>stability</em> thereof. It’s not that either of these player is malicious <em>per se</em>, but their different priorities generate a natural conflict — one which perhaps cannot entirely be <strong>removed</strong>, but which can be <strong>mediated</strong>.</p><h3>Something to talk about</h3><p>How could subtle changes to the environment improve the relationship between operators and users ? Perhaps the first positive step is to surface issues before they become a problem. The second is to provide a common language for announcing vulnerabilities and clear, easy-to-execute instructions for mitigating them when detected. With Dev (the users), Sec (the CSIRT) and Ops (the infrastructure) all on the same page, any conflicts can be discussed in an objective manner.</p><h3>Prevention is better than cure</h3><p>Currently, <a href="http://csirt.egi.eu/">EGI CSIRT</a> does a great job of scanning the endpoints of the infrastructure to detect vulnerabilities. This is necessary, since these vulnerabilities are not a static set, but new ones are being found continuously. Fixing machines that are already deployed is a necessity in order to provide a secure <em>platform</em>, but what about the new applications that are built and deployed by user communities ? Wouldn’t it be nice if these applications could be checked <em>before</em> they were deployed<a href="https://brucellino.github.io/blog/blog/2018/04/08/DevSecOps/#fn:maybe">1</a>? In a perfect world, there would be a more-or-less well-defined pipeline through which applications could flow, before landing in the production environment.</p><p>Typically, this would include all the great things that you can imagine in a pipeline — continuous integration, testing, and delivery. It would be awesome if we could surface the vulnerabilities or security risks <strong>at the same time</strong> as surfacing run-time or deploy-time issues. Put differently, we wouldn’t deploy a broken application, so why deploy an insecure one ?</p><h3>How to spot a vulnerability</h3><p>That of course begs the question:</p><blockquote><em>How do we know that an application is insecure ?</em></blockquote><p>A naive answer appears to be <strong>“Just scan the damn things for known vulnerabilities”</strong>. Indeed there are several tools out there for doing this, including <a href="https://github.com/CESNET/pakiti-server">Pakiti</a>, <a href="https://github.com/coreos/clair">clair</a> and others. There are also tools for delivering “compliance as code” — particularly <a href="https://inspec.io/">InSpec</a>, <a href="https://testinfra.http//testinfra.readthedocs.io/">TestInfra</a>. These tools typically compare installed <em>packages</em> against a vulnerability database. They are designed to check OS packages. They may also work with some language ecosystems like Ruby<a href="https://brucellino.github.io/blog/blog/2018/04/08/DevSecOps/#fn:Gemnasium">2</a>and Node<a href="https://brucellino.github.io/blog/blog/2018/04/08/DevSecOps/#fn:AppCanary">3</a>- maybe not so much with Python or Go — but that relies on specific packages which can be matched against a vulnerability database. These scanners do not actually do penetration testing, as is usually the case in network scanning systems, or more advanced penetration testing systems.</p><p>And herein lies the catch : <strong>What if your applications are not delivered with packages</strong>. This is indeed the case with, <em>e.g.</em> CODE-RADE, where everything is built from scratch and no “packages” are installed. We could, for example, tag builds according to the versions of the source code built, and then match <em>those</em> against the CVE databases, perhaps.</p><p>Although this is a <em>design</em> feature of CODE-RADE, it may be a mere convenience for many use cases. Users may simply hack their application into shape until it works, then tag a VM or container and call it a day. Detecting vulnerabilities introduced in such applications is going to be a risky business <strong>unless a true penetration testing suite can be introduced to the delivery pipeline</strong>. There are some tools, again mostly language specific, which can be called to the cause of keeping applications in the production infrastructure safe, <em>e.g.</em> <a href="https://www.owasp.org/index.php/OWASP_Dependency_Check">OWASP Dependency Check</a><a href="https://brucellino.github.io/blog/blog/2018/04/08/DevSecOps/#fn:OWASP">4</a>.</p><h3>Adding Sec to the DevOps pipeline</h3><p>Let’s face it, we’re not running a Fortune500 company here. You can’t have 100% secure applications, but we can do a damn sight better than what we’ve got right now ! I propose a shift from vulnerability monitoring of the infrastructure to <em>vulnerability testing</em> of the applications before they even get there.</p><p>If development of research applications follows a continuous integration, adding compliance and vulnerability testing to the pipeline represents just another step for the application to pass. Sure, there is a conceptual leap to make: from “Trust me, Ops ! This opaque blob of data is totally benign!” to “Ok Ops, you’ve got your tests, I’ve got mine and they’re all passing” is perhaps a big one for many. In order to have people adopt this way, Ops needs to deliver a smoother experience and better support than they are currently delivering to users : builds for arbitrary applications, arbitrary environments and configurations and what Devs love about <a href="http://12factor.net/">12 Factor Apps</a> : <strong>Dev/Prod Parity</strong><a href="https://brucellino.github.io/blog/blog/2018/04/08/DevSecOps/#fn:DevProd">5</a>.</p><h3>Something we can all trust</h3><p>Once we have a pipeline, we can and should raise security or vulnerability issues wherever we can, along with all the infrastructure tests. Furthermore, these tests should be separated from the application tests themselves. In other words, if Ops provides a tested and immutable environment for Dev to build on, then the application should:</p><ol><li><strong>Ensure that it can build</strong> — Are the compilers and dependencies available ? Are the relevant infrastructure services available ?</li><li><strong>Ensure that it is correct</strong> — Have errors been introduced into the environment in recent commits ? Does the application maintain internal consistency in the build and execution environment provided by Ops ?</li><li><strong>Ensure that it will run</strong> — Does the execution environment permit the proper execution of the application, with access to relevant backing<a href="https://brucellino.github.io/blog/blog/2018/04/08/DevSecOps/#fn:backing">6</a>services ?</li><li><strong>Ensure that infrastructure remains immutable</strong> — Has the application made detectable changes to our infrastructure ?</li></ol><p>That last point is key. The rest of the tests (integration tests, unit or functional tests) are up to Dev. But trusting Dev to ensure that Prod is ok is like trusting the fox with the chickens — there’s an inherent conflict of interest, even if there is, as is most often the case, no malice. No, these tests need to be maintained by Prod, in collaboration with Sec.</p><h3>Asserting Compliance</h3><p>We then come full-circle. EGI has an extensive list of security policies which can be used as a basis for writing compliance as code. They need to get out of whatever format they’re in now, and into something that can be executed. To quote the <a href="https://www.chef.io/inspec">Chef pitch for Inspec</a>:</p><blockquote><em>Transform your requirements into versioned, executable, human-readable code.</em></blockquote><blockquote><em>Detect Fleet-wide Issues and Prioritize Their Remediation</em></blockquote><blockquote><em>Reduce Ambiguity and Miscommunication Around Rules</em></blockquote><blockquote><em>Keep up with Rapidly Changing Threat and Compliance Landscapes</em></blockquote><p><em>Originally published at </em><a href="https://brucellino.github.io/blog/blog/2018/04/08/DevSecOps/"><em>brucellino.github.io</em></a><em> on April 8, 2018.</em></p><p>Update: Thanks to <a href="https://medium.com/u/a5a5f390343c">Baptiste Grenier</a> for useful comments and proof-reading.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1223732b8086" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Memento mori]]></title>
            <link>https://medium.com/@brusisceddu/memento-mori-a03c9b182b45?source=rss-34e9af91c30d------2</link>
            <guid isPermaLink="false">https://medium.com/p/a03c9b182b45</guid>
            <dc:creator><![CDATA[Bruce Becker]]></dc:creator>
            <pubDate>Tue, 05 Dec 2017 22:39:34 GMT</pubDate>
            <atom:updated>2017-12-05T22:39:34.687Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>Even this shall pass</blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a03c9b182b45" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The African Data Infrastructure Community Map]]></title>
            <link>https://medium.com/dirisa/the-african-data-infrastructure-community-map-54bfadea73c4?source=rss-34e9af91c30d------2</link>
            <guid isPermaLink="false">https://medium.com/p/54bfadea73c4</guid>
            <category><![CDATA[open-data]]></category>
            <category><![CDATA[open-science]]></category>
            <category><![CDATA[data]]></category>
            <category><![CDATA[africa]]></category>
            <category><![CDATA[community]]></category>
            <dc:creator><![CDATA[Bruce Becker]]></dc:creator>
            <pubDate>Thu, 31 Aug 2017 08:01:01 GMT</pubDate>
            <atom:updated>2017-08-31T08:41:23.090Z</atom:updated>
            <cc:license>http://creativecommons.org/licenses/by/4.0/</cc:license>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rNJUcGd17xODYtGPZRIOog.jpeg" /><figcaption>Where the hell am I ?</figcaption></figure><p>Last week, we published <a href="https://medium.com/dirisa/making-sense-of-the-data-infrastructure-community-map-6c3e55cb7503">a story</a> on making sense of the data infrastructures community. There was a question on the table of how various initiatives and projects related to each other, and who was involved in what — questions which could best be answered by providing some visual representation of the stream of emails that tried to describe the situation. I started a map of relationships, which quickly spread out into a map of a wider community.</p><p><a href="https://kumu.io/dirisa/community#community">community</a></p><p>The response has been a bit positively overwhelming and we’d like to respond to a few common questions and issues raised.</p><p>I tried to summarise the effort as follows:</p><ol><li>The map is a network of <strong><em>entities</em></strong><em>.</em></li><li>These entities are <strong>people</strong><em> </em>and <strong>things</strong><em>.</em></li><li>Things are <strong>projects</strong>, <strong>organisations</strong> or <strong>subdivisions</strong> thereof.</li><li>People and things can have <strong>attributes </strong>like You can add any tag you like, for example. Tags should describe the thing or the person <em>itself</em>, not its relation to anything else.</li><li>Things and people are connected via … wait for it… <strong>connections.</strong></li><li>Connections can be <strong>directed</strong>. Connections must describe the relationship between things and people. Usually this takes the form of a verb. <em>IE</em>, directs, employs, builds, <em>etc</em></li><li>Things are connected to other things via people. there should few or no thing-to-thing connections, this is an abstract connection. Sometimes it is necessary, when say you have an MoU or an institutional peering arrangement, but these should be really, really well-defined. The only obvious exception is the relationship between organisations and organisational units — <em>e.g. </em>The University of the Free State and the Library of the University of the Free State.</li></ol><h3>Questions</h3><h4>What is this ?</h4><p>This is a <strong>map</strong>.</p><blockquote>A <strong>map</strong> is a symbolic depiction emphasizing relationships between elements of some space, such as <a href="https://en.wikipedia.org/wiki/Physical_body">objects</a>, <a href="https://en.wikipedia.org/wiki/Region">regions</a>, or themes. — <a href="https://en.wikipedia.org/wiki/Map">Wikipedia</a></blockquote><p>It is also <strong>data</strong>. This is a map of <em>relationships </em>between <em>entities. </em>See above for a deeper description of what’s on the map.</p><h4>What is this for ?</h4><p>It’s what all maps are for: to find out where you are, what’s around you and how to get where you want to go. To be more concrete, this serves a variety of purposes, depending on who is using it:</p><ol><li>A resource for describing relationships between relevant entities in the e-Infrastructure communities</li><li>A tool to answer questions about the nature of the community (<em>how well-connected are various national initiatives? What degree of separation is there between libraries and national initiatives ?</em>), or specific entities in it (<em>who do I need to contact at institute X about project Y? Who is funding initiative Z?</em>).</li></ol><h4>Who is this for?</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/760/1*eI5iuv-ajlKrVKM6lgFTKw.jpeg" /><figcaption>Every map has a perspective. No map is universal. Image: <a href="https://en.wikipedia.org/wiki/View_of_the_World_from_9th_Avenue">“The world from 9th Avenue, Saul Steinberg” (New Yorker, March 29 1976 cover)</a></figcaption></figure><p>Who knows? In a very limited sense, it’s for people who are directly involved in the construction of data infrastructure. However, data infrastructure has a lot of edges, and interfaces with a lot of other things — libraries, scientific consortia, government agencies, elements of the <a href="http://www.sci-gaia.eu/osp/#hotspot-hotspot-1801-16">e-Infrastructure Commons</a>.</p><p>If you are at all involved with scientific data in Africa, you will probably find yourself in this map.</p><h4>Who is this <em>not</em> for?</h4><p>We consider Open Data initiatives like that of the <a href="http://dataportal.opendataforafrica.org/">African Development Bank </a>to be on the periphery of our map. The same goes for peer infrastructures across the world like <a href="http://www.egi.eu">EGI</a>, <a href="http://www.eudat.eu">EUDAT</a>, <a href="http://www.opensciencegrid.org">OSG</a>, <a href="https://www.openaire.eu/">OpenAIRE</a>, <em>etc. </em>Every map needs a <em>hic sunt leones</em> and ours will have quite a few, at least initially.</p><h4>What exactly do you mean ?</h4><blockquote>Kindly let me know what you mean by ‘data infrastructures’ and ‘involvement’.<br>- Moses Thiga</blockquote><p>Great question… my tentative response is :</p><p><strong>“Data Infrastructures”</strong> means</p><ul><li><strong>resources</strong> (storage, caches, archives, course material)</li><li><strong>services</strong> (persistence and uniqueness, publication, movement, replication)</li><li><strong>actors</strong> which extract knowledge from data — things and people which process and publish data: librarians, researchers, science gateways, automated agents.</li></ul><p>Data Infrastructures are probably best not considered as a binary thing — either they are or they are not — they are best considered on a <em>spectrum</em>. <strong>The more they are used by and for more than one actor, the more they are infrastructure.</strong></p><p>So, let’s say you have a university with a researcher who has a data set on their desk and does research with it. This is clearly not data infrastructure.</p><p>If that same dataset is shared with other researchers via something simple, it is still not data infrastructure, but it’s closer.</p><p>If that dataset is stored in an OAI-PMH-compliant data repository, indexed by a metadata harvester, published with DOI and that repository is connected to a national federation, and a national compute infrastructure then you are close to 100% a data infrastructure.</p><p><strong>“Involvement”</strong> means that the person performs one or other function in this system — they are connected to an entity in the map (a library, a HPC site) via some verb (data curator, data movement service developer).</p><p>When in doubt, just shout out and we’ll deal with things on a case-by-case basis.</p><h4>How can I use this ?</h4><p>The data is published under a CC-BY-ND-4.0 license:</p><p><a href="https://creativecommons.org/licenses/by-nd/4.0/">Attribution-NoDerivatives 4.0 International</a></p><p>You can re-use the data, as long as you cite the original data set. You may not change the data, unless through the agreed mechanism for contributing.</p><h3>How do I contribute ?</h3><blockquote>Would you mind please to elaborate the how I can help.<br>- <strong>Fireweini Gebreegziabiher. And literally everyone else.</strong></blockquote><p>This seems like the obvious question, very politely put. One might rephrase it as</p><blockquote>OK NOW WHAT !?</blockquote><p>Perhaps we need to answer a different question first : <strong>what can I contribute ? </strong>There are two things one can contribute:</p><ol><li>Knowledge.</li><li>Questions.</li></ol><p>Knowledge is <strong>things you know</strong> — independently verifiable facts about entities in this map. This is the only hard criterion: whatever you think should be on this map — a person, an institute, a project, a connection between any of these — it needs to be an objective statement of reality.</p><h4>Contributing and sharing data</h4><p>If you have been doing similar work in the past, building up databases of people and institutes, let’s share our notes ! <a href="https://docs.kumu.io/guides/import.html">Kumu can ingest various data formats</a>. If you would like to contribute your data, you would be added as an author of the data, and a co-owner of the license. Of course, this has no impact on existing conditions of your original dataset.</p><p>If you have any doubts about the <strong>validity </strong>of a particular piece of data <em>e.g. </em>“Should this project be included?”, then likely it <em>should</em>, we just need to figure out <em>how.</em></p><p>This means we’re in for a lot of discussion… I look forward to that.</p><h4>Feedback</h4><p>The easiest way to start these discussions is right in the map itself — <a href="https://kumu.io/dirisa/community/issues/">Open an issue</a> and we’ll take it from there.</p><p>Of course, you’re welcome to engage right here — leave us notes, share this article, let your network know. I look forward to seeing this map take ever more shape.</p><p>Thanks to all who got in touch, in and out of band, in no particular order:</p><ul><li><a href="https://kumu.io/dirisa/community#map-01DBbmEw/elem-Ivysnx9A">Peter van Heusden</a></li><li><a href="https://kumu.io/dirisa/community#map-01DBbmEw/elem-Bg0C72Ql">Kasandra Pillay</a></li><li><a href="https://kumu.io/-/52349#map-01DBbmEw/elem-zbrzIniA">Ina Smith</a></li><li>Ronald Osure</li><li>Moses Thiga</li><li>Fireweini Gebreegziabiher</li><li>Uli Horn</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=54bfadea73c4" width="1" height="1" alt=""><hr><p><a href="https://medium.com/dirisa/the-african-data-infrastructure-community-map-54bfadea73c4">The African Data Infrastructure Community Map</a> was originally published in <a href="https://medium.com/dirisa">🛠️ Building Data-Intensive Research Initiative for South Africa</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Making sense of the data infrastructure community map]]></title>
            <link>https://medium.com/dirisa/making-sense-of-the-data-infrastructure-community-map-6c3e55cb7503?source=rss-34e9af91c30d------2</link>
            <guid isPermaLink="false">https://medium.com/p/6c3e55cb7503</guid>
            <category><![CDATA[south-africa]]></category>
            <category><![CDATA[community]]></category>
            <category><![CDATA[mapping-tool]]></category>
            <category><![CDATA[infrastructure]]></category>
            <category><![CDATA[data-visualization]]></category>
            <dc:creator><![CDATA[Bruce Becker]]></dc:creator>
            <pubDate>Fri, 25 Aug 2017 10:59:27 GMT</pubDate>
            <atom:updated>2017-08-25T10:59:27.116Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pynuPmftsPrKXhKNfOwajQ.jpeg" /><figcaption>Image credit : <a href="https://commons.wikimedia.org/wiki/File%3A1660_Oost_Indien_Goos&#39;.jpg">Pieter Goos [Public domain], via Wikimedia Commons</a></figcaption></figure><h3>Splendid Isolation</h3><p>Building something is easy when you’re doing it for yourself. You get to make all the decisions, and execute all the tasks, bound only by your own limits. Just focus on that burning idea in your head, and <em>do it.</em> However, as soon as you have to build <em>together. </em>Then, things get a little tricky.</p><p>Data infrastructure is one of those tricky things. In terms of mere complexity and scale, it’s not what one would call a “pet project” — good infrastructure is built for and is usable by the widest possible group of people. This implies a certain amount of consideration into <strong>what </strong>gets built. It may help to add more people to the project, to speed things up… but that may complicate <strong>how</strong> things get built. It also doesn’t address <strong>why</strong> things get built or done in the way that they are.</p><p>I think it’s fair to say that it’s not the scale or complexity of the <em>technology</em> that makes it so difficult, but rather <strong>that of the</strong> <strong><em>community</em>. </strong>Doing things <em>with</em> people is different to doing them <em>for</em> people. Projects become ecosystems. and making sure that one has a coherent understanding of the <em>implications</em> of any particular action down the line requires a fine understanding of the subtle connections in that ecosystem. Making <em>sense </em>of this community — especially how you or others fit into it — can be confusing, to say the least. But that doesn’t mean we shouldn’t try.</p><h3>Community and connections</h3><p>During the <a href="http://www.sci-gaia.eu/final-event">Sci-GaIA Final Conference</a>, we had a presentation from Mario Marais, on “Commmunal Sensemaking using Social Mapping”</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fvideoseries%3Flist%3DPLpDEU1mUCxGZGm2jgB5wYYVPet478t0GQ&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DcSwfJPuN31w&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FcSwfJPuN31w%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/8a58590c6ecaec8aed8fcfb1902be8e4/href">https://medium.com/media/8a58590c6ecaec8aed8fcfb1902be8e4/href</a></iframe><p>This presentation inspired and educated me about how one could slowly build up a picture of the relationships, connections and other features of an ecosystem of stakeholders, and eventually make sense of it. Mario demonstrated how <a href="https://kumu.io">Kumu</a> could be used to enrich the nodes and metadata of the network. Mapping tools like Kumu can really help to visualise the shape of a social network, as well as many more aspects besides.</p><h3>Making sense</h3><p>Now, I have recently started working in the data infrastructure community. As a newcomer, I have a lot of catching up to do, to make sense of what I’m being asked to do, how it impacts others, and vice-versa. One of the exciting developments which has recently started was the <a href="https://figshare.com">Figshare</a> <a href="https://www.dirisa.ac.za/figshare-pilot-pretoria-durban/">pilot</a>, announced during a few workshops held across the country. As developer of the infrastructure which eventually needs to inter-operate with these repositories, I need to know which institutes are participating, who is involved, and what state the deployment is in.</p><p>Sure, I <em>could</em> have spent the rest of my life sending emails around, but…</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2FbWM2eWYfN3r20%2Ftwitter%2Fiframe&amp;display_name=Giphy&amp;url=https%3A%2F%2Fgiphy.com%2Fgifs%2Faint-nobody-got-time-for-that-gif-bWM2eWYfN3r20&amp;image=https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2FbWM2eWYfN3r20%2Fgiphy.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=giphy" width="435" height="435" frameborder="0" scrolling="no"><a href="https://medium.com/media/67954b979849715f1c59bab4c7da3e1f/href">https://medium.com/media/67954b979849715f1c59bab4c7da3e1f/href</a></iframe><p>This information — these connections and meaning and context — that’s all <strong>data</strong>. <em>Precious</em> <em>data</em>. I want to do data things to it, like preserve it, protect it, version control it, analyse it, use it to tell stories to convince people of things I don’t even know yet.</p><p>I want to make sure this data is there for future me, but also for everyone else in the ecosystem, so that they can help make sense of it, improve, add to and correct it, as we go.</p><h3>Never Alone</h3><p>There’s an <a href="http://knowyourmeme.com/memes/forever-alone">internet meme</a> which people use to express their solitude and sadness in a hyperconnected world. It’s particularly tragic when, in a sea of potential collaborators, we feel isolated and disconnected. There is a natural tendency amongst many people to see connections, and a temptation to connect the dots. However that internet meme also expresses a kind of subtle <strong><em>acceptance</em></strong><em> of the disconnected status quo. </em>We simply cannot afford to ignore the connections that exist between us.</p><p>It is inevitable that <em>subjective impressions</em> are created (does this person <em>really</em> connect to that project ? In what way, specifically, does this person interact with this person ?) so we need to be careful in constructing such community maps. It’s very easy to misrepresent others, and indeed to create a distorted view of reality.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fembed.kumu.io%2F9cff9d7e305066acee67330a5fd381af%3Fsimple%3D1&amp;url=https%3A%2F%2Fembed.kumu.io%2F9cff9d7e305066acee67330a5fd381af%3Fsimple%3D1&amp;image=https%3A%2F%2Fassets.kumu.io%2Fproduction%2Fpublic%2Fassets%2Ftree-pen-black-d0361958df633822fcb095229247c5e2547f37f3fd6549699a895e9f40fbde79.png&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=kumu" width="940" height="600" frameborder="0" scrolling="no"><a href="https://medium.com/media/e930d2b00c032a698af134062b0c2efd/href">https://medium.com/media/e930d2b00c032a698af134062b0c2efd/href</a></iframe><p>As you can see, I started with the simple spoke-like map of the Figshare pilot implementation in South Africa. Each participating institute got a representative (which I gleaned from an email chain). This immediately allowed me to start adding metadata to enrich the nodes, such as the node type (person, institute or project), as well as relationship type (<em>e.g.</em> employed by, directs, advisor to, funds, <em>etc</em>).</p><p>This map immediately answered the one question I had had —</p><blockquote>How is the figshare project linked to DIRISA?</blockquote><p>Answer : through <a href="https://kumu.io/-/52349#map-01DBbmEw/elem-1RC7dvPa">Xolani Nkosi !</a> Note that this is a person, but also a node in a complex network.</p><h3>Next question: Where are you ?</h3><p>This map doesn’t have to be <em>perfect immediately</em> — it can and should evolve. But now everyone with an interest, or a connection to data infrastructure in South Africa or our region can stake and claim their place.</p><p>I look forward to making sense of this jungle together.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6c3e55cb7503" width="1" height="1" alt=""><hr><p><a href="https://medium.com/dirisa/making-sense-of-the-data-infrastructure-community-map-6c3e55cb7503">Making sense of the data infrastructure community map</a> was originally published in <a href="https://medium.com/dirisa">🛠️ Building Data-Intensive Research Initiative for South Africa</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What’s in a name?]]></title>
            <link>https://medium.com/@brusisceddu/whats-in-a-name-41edd7e55d19?source=rss-34e9af91c30d------2</link>
            <guid isPermaLink="false">https://medium.com/p/41edd7e55d19</guid>
            <category><![CDATA[storytelling]]></category>
            <category><![CDATA[poetry]]></category>
            <category><![CDATA[medium-italia]]></category>
            <category><![CDATA[birth]]></category>
            <category><![CDATA[personal]]></category>
            <dc:creator><![CDATA[Bruce Becker]]></dc:creator>
            <pubDate>Tue, 01 Aug 2017 06:47:20 GMT</pubDate>
            <atom:updated>2017-08-01T16:52:05.945Z</atom:updated>
            <cc:license>https://creativecommons.org/licenses/by-nd/4.0/</cc:license>
            <content:encoded><![CDATA[<blockquote>O, be some other name!<br>What’s in a name? that which we call a rose<br>By any other name would smell as sweet;</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*x9XsFabJ_7MRWzmft4MLlw.jpeg" /><figcaption>Perhaps this happens in every contemporary man’s life. At some point, he stops, looks around and wonders what strange carriage brought him to this particular station.</figcaption></figure><p>Banalities of the waiting room make it difficult to concentrate, distract my attention and derail my thoughts. Recovering from the intrusion, I take another look at my surroundings. Vending machines, rebellious announcements scribbled on an otherwise bare yellow wall, half a family tree seated beside me.</p><p>The sky darkens. After weeks of oppressive heat and squinting at blue skies, the thunder outside induces a counter-intuitive calm.</p><p>We have arrived. Today is the day… whoever you are, today we’ll be meeting you, in this familiar, crowded, noisy hospital.</p><p>We seem ready. We’ve been here before, for your brother, then for your sister. Your mother and I (well, perhaps just your mother) have done everything, taken every precaution, measured every risk and considered every angle. All of the aspects of adulthood are here, all of the trappings of experienced parents.</p><p>Except one.</p><p><strong>You don’t yet have a name</strong></p><p>You are number three, the third. We couldn’t rightly call you “Bruce Becker III”, pronounced “Bruce Becker the third”, as awesome as that sounds, with its air of inheritance and lineage. For one thing you’ve not much inheritance to speak of, and what little <em>is </em>there you will have to share with your brother and sister who came before you. What is more, your lineage only goes back so far. You are being born into a <em>new</em> family, one which stretches back just as far as the eye can see, but no further. Perhaps this is just the view from where I stand though, with my obstinate inclination to the future. Where <em>I </em>come from, you’re better in the future, kid.</p><p>No, we can’t very well call you anything to do with this line. I had had a name chosen for you, to tell the truth, depending on who you turned out to be. So long ago, ages, a lifetime, I remember a song, heard through a dream as barely more than a teenager…</p><blockquote>Elle vole le velours et la soie<br>Qu’offre la guitare à l’infante<br>Pour se les poser dans la voix<br>Belle Isabelle quand elle chante</blockquote><p>In the gardens of the Alhambra, still naive, I decided that should I have a daughter, she should be named Isabelle. That name spoke to me through the carved corridors and discreet fountains of the palace, and through the image of a woman who would be the inspiration for mirth, art and music.</p><p><strong>Isabelle</strong>. What poetry lay in that name.</p><p>You are already late. It’s been more than a week since you were due, and now we’re getting nervous. No matter what, today is your day, though. Your mother and I move to the delivery room, your grandparents go for lunch and a walk. The sky finally breaks and the water held within it’s towering clouds comes crashing down all at once. While your mother attempts desperately to induce her contractions and convince herself that you are getting settled into position, I’m reminded of the long periods of our separation, while I lived in Pretoria, and of the summer downpours there. Another song makes its way into my sub-conscious</p><blockquote>Amìala ch’â l’arìa amìa cum’â l’é <br>Amiala cum’â l’aria ch’â l’è lê ch’â l’è lê</blockquote><p><em>Dolcenera…</em> The names of all the women in songs I’ve ever heard come to me… Caroline. Elizabeth. Eve. Rose. Matilda. Louise. Lucille… Isabelle.</p><p>The doctor comes in, has a look around, helps your mother break the water, tells us he’s giving us an hour or so to see if labour will start, then it’s into the operating room for a C-section. It’s not that things are looking <em>bad</em>, just that this is not what we had planned for. Of course, we all had this suspicion that there was something not quite right with how you were sitting in that comfortable vessel of yours. Too high, facing the wrong direction; stubbornly and brazenly with your face in our direction, almost as if to say “Here I am, look at me”. Yes, we did look at you, and with some elegantly Fourier transformed sounds got to see your face through the protective shell of your mother’s womb… but that didn’t detract from the fact that you were facing the wrong way.</p><p><em>“Bruce, che lo chiamiamo se è maschio ?”</em>. Your mother is starting to get worried. I am calm, though. I’ve been here before.</p><p>I can’t remember exactly <em>when</em> it was that I decided that my first born would be called Duncan, but I had no doubts as to <em>why</em>. Perhaps it was when I walked into that office, now empty, with his last message chalked up on the board for me. Perhaps it was during the endless late night chats with Alison. Perhaps it was when the message came that day that something terrible, something final had happened on Huascaràn down in Peru. I can’t remember — I can’t be <em>expected</em> to remember, at this distance. I just know that at some point, I looked around for a reference and found <strong>Duncan</strong>. This man had <em>lived</em> and above all, that is what I wanted for myself and for whoever came after me. A conscious, daily act of volition.</p><p>Duncan (the name, not the man), followed me from woman to woman, alighting in my mind as nothing more than a possibility. Nobody but your mother had the — shall we say “good fortune” — to be with me in the right place, at the right time, to start a family.</p><p>When finally that day came, it was nothing like I had imagined, and in a place I barely knew, much less understood. When I first proposed that name, I was taken aback by the derision that it inspired. After a time, since I was deeply in love with your mother and treasured her desires, I chose to let her choose. She chose “Federico”. A good name, no doubt, for a very good boy.</p><p>When your sister came along I was no less prepared than I am today. Again, we did not want to know whether we were awaiting a boy or a girl and again, the list of names started out long and became fractious. The story of your sister’s name is one for another time — this is about you, number 3 — suffice to say that I still longed to bring Isabelle the muse into the world. Again, I loved your mother, and out of love chose to give her the gift of choosing your sister’s name. She was no less in love with “Costanza” than I was with Isabelle, after all.</p><p>Time is up. Despite the insistent, painful exertions of your mother, despite your dried and hollowed-out capsule, despite your overdue stay, you will not budge. I laugh, as I always do when the situation is bad, and there’s nothing you can do about it. Your mother never understood this laugh, I suspect, and I do not have the words to explain it to her. How can I explain to her that it is my love for what <em>is</em> over what we <em>desire</em> that provokes it. She does not understand what I mean by <em>objectivity</em>, she comes from a world where the most important parts are deeply human. Although I am separated from that world, there has always been a bridge across it, between us. Something which allowed us to share thoughts and emotions without the least bit of translation necessary. A bridge wrought of the music of a dead poet…</p><p>We have a few minutes to prepare before she is led off into the operating room. Whoever comes out of that door with her, it will be <em>you.</em> And now, you have a name.</p><p>While we wait for the news, I hum to myself.</p><blockquote>ricorda Signore questi servi disobbedienti <br>alle leggi del branco <br>non dimenticare il loro volto <br>che dopo tanto sbandare <br>è appena giusto che la fortuna li aiuti <br>come una svista <br>come un’anomalia <br>come una distrazione <br>come un dovere</blockquote><blockquote>- “Smisurata Preghiera”</blockquote><p>Music invades my inner voice. There are no more useless diatribes on who and why in the past. There are no more names floating around, demanding to be heard, demanding to be given their time in the light.</p><p><strong>What’s in a name ?</strong></p><blockquote>“È nato ! È nato !</blockquote><blockquote><strong>Benvenuto, Fabrizio !”</strong></blockquote><p>This is our life. It is not in the Alhambra, nor on Huascaràn. We are in this ancient, provincial, rich, welcoming, corrupted, bigoted, beautiful, damaged island.</p><p>And you are my son, named for the poet who sang the bridges between your mother and I.</p><p><em>Per chi viaggia in direzione ostinata e contraria.</em></p><p><strong>Benvenuto, Fabrizio.</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=41edd7e55d19" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Test-Driven Teaching]]></title>
            <link>https://medium.com/open-science-in-africa/test-driven-teaching-26add90b57be?source=rss-34e9af91c30d------2</link>
            <guid isPermaLink="false">https://medium.com/p/26add90b57be</guid>
            <category><![CDATA[continuous-integration]]></category>
            <category><![CDATA[online-learning]]></category>
            <category><![CDATA[devops]]></category>
            <dc:creator><![CDATA[Bruce Becker]]></dc:creator>
            <pubDate>Tue, 29 Mar 2016 00:00:00 GMT</pubDate>
            <atom:updated>2018-09-05T11:05:15.718Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XHHVUU7D0qxvvE5ZsGWYGA.jpeg" /></figure><blockquote>TL;DR — Can we really get the bots to help us in an online school, or are we just going to create more work for ourselves ?</blockquote><p>We are facing a small dilemma in the development of a short technology-heavy course which we are going to run online for the <a href="http://www.sci-gaia.eu">Sci-GaIA</a> project <a href="http://www.sci-gaia.eu/winter-school">winter school</a> which starts on the 1st of April. The dilemma goes to the heart of why there is so much inertia in our methods — whether those be training, writing documentation, or actually designing new services and tools — whilst we on the other hand continually strive to stay at the cutting edge of e-Science. It’s almost easy to stay up to date with products out there — many of the great tools that we use daily are <em>designed</em> to be easy to use and adopt, but it’s worthwhile remembering that we are also in the game of developing tools and services which <strong><em>we</em></strong> want research communities to adopt. The case in point is the <a href="http://www.catania-science-gateways.it/">Science Gateway</a> framework. This is a framework for developing web-portals for allowing researchers to conduct their workflows by exposing user interfaces to their respective applications, and which is properly integrated into a federated computing backend<a href="http://brucellino.github.io/blog/2016/03/29/Test-Driven-Teaching/#fn:GridHPCCloud">1</a>. But how appealing, how useful, how functional, how relevant is this approach really, in the real world ? Are research groups really able to build their environments<a href="http://brucellino.github.io/blog/2016/03/29/Test-Driven-Teaching/#fn:VRE">2</a>around the Science Gateway concept, with the science gateway<a href="http://brucellino.github.io/blog/2016/03/29/Test-Driven-Teaching/#fn:GridEngine">3</a>? It’s always good to be skeptical about the greatness of your own ideas and the usefulness of your own tools. And I think the only way we can really be unbiased is by putting our philosophy into action, and testing it in the crucible of independent adoption.</p><h3>A lab in a school ?</h3><p>I hope to be able to use this winter school as a testing ground for some ideas that I have about <em>how</em> we should be teaching research software engineers to use tools. What exactly we teach them to <em>use</em> — which specific tool is the right one for a particular job — is determined by the scope of the course, but I’m referring rather to <strong><em>how we actually use the tools we’re talking about</em></strong>.</p><p>I would like to focus on two things which I consider as fundamental disruptions to the status quo :</p><ul><li>Testing</li><li>Automation</li></ul><p>These are at the heart of the the philosophy and practice of <a href="https://www.thoughtworks.com/continuous-integration">Continuous Integration</a> <a href="http://brucellino.github.io/blog/2016/03/29/Test-Driven-Teaching/#fn:CIDef">4</a> <a href="http://brucellino.github.io/blog/2016/03/29/Test-Driven-Teaching/#fn:DevOps">5</a> which will, for the first time at least in my experience, take centre-stage in a course.</p><h3>Automated Testing</h3><p>I touched briefly and prematurely perhaps on the benefits of adopting continuous integration tools during the <a href="http://agenda.ct.infn.it/event/1056/other-view?view=standard">CHAIN-REDS/RECAS Summer School</a> in 2014. This was the last time we’ve actually run a training event on developing science gateways, and I hope a lot has changed in the course of the last two years…</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.slideshare.net%2Fslideshow%2Fembed_code%2Fkey%2F1JchpzuLKlwVQH&amp;url=https%3A%2F%2Fwww.slideshare.net%2Fslideshow%2Fembed_code%2Fkey%2F1JchpzuLKlwVQH&amp;image=http%3A%2F%2Fcdn.slidesharecdn.com%2Fss_thumbnails%2Fcontinuousintegration-140611025103-phpapp01-thumbnail.jpg%3Fcb%3D1402636473&amp;key=d04bfffea46d4aeda930ec88cc64b87c&amp;type=text%2Fhtml&amp;schema=slideshare" width="600" height="500" frameborder="0" scrolling="no"><a href="https://medium.com/media/6aa644c79c7894022dcc9990ba185c8c/href">https://medium.com/media/6aa644c79c7894022dcc9990ba185c8c/href</a></iframe><h3>Collaboration and Code from the start</h3><p>A fundamental difference between the “old” way of doing things and the “new” way of doing things is the expression of everything as <em>code</em>. The idea that the development environment can be expressed as code, and can be created via the execution of that code is a way of re-enforcing the principle :</p><blockquote><em>If something is worth doing, it’s worth keeping</em></blockquote><p>“Keeping” in this case means putting your work into a change-controlled repository and working in a methodical way with this, using the version and change control tools at your disposal. In my opinion, this means “Use Git, duh.”, which has the corollary of “Put your repo on Github”<a href="http://brucellino.github.io/blog/2016/03/29/Test-Driven-Teaching/#fn:OrBitbucket">6</a>. This automatically provides you with an environment <em>conducive to collaboration</em>. Who knows, chances are that nobody but you, the author of the code, will ever look at — much less use ! — the code that you write, but working from the start in a manner which makes future re-use likely is a very good insurance policy.</p><h3>Cruise Missiles for Miggies <a href="http://brucellino.github.io/blog/2016/03/29/Test-Driven-Teaching/#fn:miggie">7</a>?</h3><p>It may seem like a lot of overhead to get started — perhaps a whole day may need to be spent on setting up the various tools necessary for working on a portlet. However, I reject this point of view. In my opinion, getting to work on a project like this <em>without</em> an environment that is conducive to, and actively supports, future use is probably only going to create future headaches. It’s better, in my opinion, to spend time on a supportive environment than to introduce <a href="http://martinfowler.com/bliki/TechnicalDebt.html">Technical Debt</a> at a later stage.</p><p>These science gateways start of as small, standalone portlets, with just a few lines of javascript, java and html to define them, so it may seem like total overkill to insist on the creation of a repo, integration of that repo with automation tools, <em>etc</em> — akin to using a cruise missile to kill a fly. However, introducing these things at some point down the line — once bad habits, quick fixes and ugly hacks have become the norm — can be very, very painful. It’s better to make a time investment at the beginning of the project (or course in this case), to become comfortable with the mechanics of developing these science gateways, whilst learning about the underlying infrastructure and frameworks, than to put off the payment in technical debt for later, when the interest on this debt has grown too large.</p><h3>Automated Feedback</h3><p>This is the first time I will be running a course entirely online. We will be using the <a href="https://open.edx.org/">EdX</a> open courseware platform. We will not have the ability to work side-by-side with the course students and see what they are seeing most of the time, as was the case in the previous face-to-face schools. How are we going to be “on the same page” as the students in this case ? Either we could be on call during the entire duration of the school, over videoconference, and fall back to screen-sharing, and real-time information exchange… Guess how that’s going to go !<a href="http://brucellino.github.io/blog/2016/03/29/Test-Driven-Teaching/#fn:ItIsNot">8</a></p><p>Or… we could provide a tool as part of the school which conducted the same kinds of checks which we human “teachers” would do. Except, these checks would be done <em>automatically</em> and <em>consistently</em>, and <em>every time</em> the student requested. It would and allow both sets of humans (the teachers and the students) to look at the same code and resulting artifacts (or errors), even asynchronously. Asynchronicity in this case is important, since time is at a premium and needs to be dedicated when it’s avaiable — which is probably not going to be synchronous between the student and the teacher.</p><p>Indeed, this is what we will do, with Jenkins — a dedicated instance of <a href="http://jenkins-ci.org">Jenkins</a> will be use to run tests and compilation checks on the portlets developed by the students.</p><h3>Contained tutorials.</h3><p>Another piece of shiny which we’ll be bringing to the table during the development of the course is the use of <a href="http://www.docker.com">Docker</a>. Docker will be used to provide the students with preconfigured development environments — which have been tested ! — the mission which was previously fulfilled by virtual machine images. This in itself will not make a substantial difference to the students, I think. However, the AUFS filesystem and overlay capabilities of Docker will provide us with a means to make atomic changes to the environmnet which can be expressed as code<a href="http://brucellino.github.io/blog/2016/03/29/Test-Driven-Teaching/#fn:AnsibleDockerfile">9</a>we will also be using Docker to <em>reproduce</em> various stages of the course, and compare student work with the reference material more easily. I think that using containers to express differences in the environment in a more atomic way, instead of providing the students with a perfectly configured, pre-prepared virtual machine will not only increase their confidence (since they will have to do some of the work, as tutorials, in getting to these states), but also make the lessons far more transparent and expose holes in their understanding of the various components of the framework. This will help not only them to learn, but also us to teach better.</p><h3>Automated Deployment</h3><p>The Jenkins instance will also be used to run the deployment into the testing environment of the new portlets, to estimate any negative impact on a production environment, should they eventually be deployed. It’s important that all of this extra “infrastructure” is itself reproducible, should we or someone else want to reproduce the course. For this reason, I’ve been working on the <a href="https://github.com/sci-gaia/WinterSchoolCI">Ansible role</a> for the Jenkins installation and configuration. Ansible is very capable when it comes to orchestrating services on new infrastructure, and we’re going to be using it to set up and maintain server and build slaves which will be used by the student projects.</p><p>In terms of running the tests, the idea is to run these tests in the containers that have been provided for the school. After the initial material has been covered, and the practical fundamentals have been taught, the developmnet/hacking phase can begin. By running continuous integration on their code in an environment which is as similar as posisble the real world portals where these portlets will be deployed, will allow bugs and errors to be caught early.</p><blockquote>This will be a learning curve for all involved. Hopefully, we can stick to our philosophy of doing things right even when the temptation is strongest to just get a dirty hack out the way.</blockquote><p>Discussion and critical thinking will be very important during the course of the school… either way, it’s going to be fun !</p><p><em>Originally published at </em><a href="https://brucellino.github.io/blog/Test-Driven-Teaching"><em>brucellino.github.io</em></a><em> on March 29, 2016.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=26add90b57be" width="1" height="1" alt=""><hr><p><a href="https://medium.com/open-science-in-africa/test-driven-teaching-26add90b57be">Test-Driven Teaching</a> was originally published in <a href="https://medium.com/open-science-in-africa">Open Science in Africa</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Announcing CODE-RADE Foundation Release 1]]></title>
            <link>https://medium.com/open-science-in-africa/announcing-code-rade-foundation-release-1-19261fc21319?source=rss-34e9af91c30d------2</link>
            <guid isPermaLink="false">https://medium.com/p/19261fc21319</guid>
            <category><![CDATA[science]]></category>
            <category><![CDATA[africa]]></category>
            <category><![CDATA[continuous-delivery]]></category>
            <dc:creator><![CDATA[Bruce Becker]]></dc:creator>
            <pubDate>Mon, 07 Dec 2015 00:00:00 GMT</pubDate>
            <atom:updated>2015-12-11T15:49:50.275Z</atom:updated>
            <cc:license>https://creativecommons.org/licenses/by-nc-nd/4.0/</cc:license>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Duia-TR4zb4UFySoj7B7Nw.jpeg" /></figure><p>We are pleased to announce the first <strong>Foundation Release</strong> of the CODE-RADE project :</p><h4>Continuous Delivery of Research Applciations in a Distributed Environment.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*3ml8Ca5hwdrONqN2.png" /></figure><p>This release has been the result of the efforts of several people, and in particular the input of Sakhile Masoka, Fanie Riekert and Dane Kennedy is warmly acknowledged.</p><h3>Goal and Design</h3><p>Simply put,the goal of the CODE-RADE project is to provide a user-driven, high-quality, continuous delivery platform for research applications to any site which wants them. The platform has been designed based on widely-used components and tools :</p><ul><li>Source code repositories : Github</li><li>Continuous Integration : Jenkins</li><li>Continuous Delivery : CVMFS</li><li>Service Orchestration : Ansible</li></ul><p>CODE-RADE fills a gap between the user or research software engineer who wants to have their applications available on a distributed computing infrastructure, and the site administrator who is tasked with keeping resources available and properly configured. This user- and test-driven approach allows for continuous integration and delivery of new research applications into a common repository which can be permanently configured at all participating sites.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*KUemErBJK5fFn8S2.png" /><figcaption>Actors and workflow in CODE-RADE</figcaption></figure><h3>CODE-RADE is Open Source</h3><p>The platform itself is expressible in terms of Jenkins configurations and build, test and deploy scripts. The entire platform can be reproduced, although this is not currently automated. Source configuration for the platform, as well as other supporting configurations can be found at <a href="https://github.com/AAROC/CODE-RADE">the CODE-RADE repo in AAROC on Github</a></p><h3>Targets</h3><p>CODE-RADE aims to deliver pre-built applications to any site that wishes to execute them. In order to do this, the applications need to be compiled for a range of target sites, which may vary in operating system, CPU architecture, or in other ways such as network interconnect, availability of GPU’s, etc. Each of these aspects are axes in the build system and define a build matrix as follows:</p><p>SITE : A code used to describe the particular nature of the site. Currently only generic is used for all sites.</p><p>ARCH: The CPU architecture used at the site. Currently only x86_64 is used for all sites.</p><p>OS: The operating system used at the sites. Currently only sl6 and u1404 are used for RedHat6 and derivatives and Ubuntu 14.04 LTS are used respectively</p><h3>Artefacts</h3><p>Foundation Release 1 publishes three CVMFS repositories and several base libraries necessary for compiling other applications.</p><p><strong><em>For this reason, the release is called a “Foundation” — this provides you stuff to build other stuff.</em></strong></p><p>Several projects have been built:</p><ul><li><a href="http://www.africa-grid.org/applications/#compilers">GCC Compiler toolchain</a></li><li><a href="http://www.africa-grid.org/applications/#libraries">Math libraries</a></li><li><a href="http://www.africa-grid.org/applications/#libraries">HPC libraries</a></li><li><a href="http://www.africa-grid.org/applications/#python">Python framework</a></li></ul><p>Libraries are compiled with their dependencies expressed using module files and where possible several versions of the library are built in order to check for consistency and provide a wide as possible coverage. A tradeoff has had to be made between coverage and build times due to the limited resources of the build slaves.</p><p>Details of the projects and builds can be seen on the <a href="http://ci.sagrid.ac.za/view/Foundation%20Release%201/">Foundation Release 1</a> page.</p><h3>Dependencies</h3><p>Dependencies are managed using the bash modules tool, and by relevant build triggers in Jenkins. Software dependencies have been expressed using these build triggers and inspiration has been taken from the <a href="https://easybuild.readthedocs.org/en/latest/">Easybuild</a> project. Other information on the dependencies of applications have been obtained from the project description pages.</p><p>The artefacts are built from the lowest-lying dependencies, up through the dependency chain, to end-user applications. Each build is responsible for creating it’s own modulefile.</p><h3>Build Configurations</h3><p>All build configurations are kept in change control. CODE-RADE has been designed to execute builds and tests of user-provided configuration on every commit to the source code management system. As the default SCM, we have chosen git and rely on the Github API to trigger most builds in Jenkins. While we do not have an explicit internal API, there is a working model of how builds should be configured, relying on three separate scripts executed in conditional sequence :</p><ol><li>build.sh — This starts the configuration and compilation of the application, with relevant dependencies added</li><li>check-build.sh — if the compilation has been performed without error, this script performs application-specific checks, usually provided by the project itself (typically runnning make check or similar)</li><li>deploy.sh — Once the application has been checked and staged to the continuous integration environment, this script reconfigures the build to the actual CVMFS target. This usually just involves a cleanup of the configuraiton and a re-installation to a different prefix.</li></ol><p>There are several limitations to this approach, not least the capacity for user error, since there are almost no checks on the content of the scripts. The possibility of using a domain-specific language or a build-flow approach has been considered, but</p><h3>Repositories</h3><p>CVMFS is used to distribute the artifacts to the sites. There is a Stratum-0 CVMFS server at the University of the Free State at apprepo.sagrid.ac.za. Three repositories have been created for differing use cases :</p><p>For more information on the repositories and how to use them, see <a href="http://www.africa-grid.org/cvmfs">the AfricaGrid webpage</a></p><h3>Using CODE-RADE</h3><p>With this release, the tools necessary for integrating new applications from any user are available. They can be used by mounting the repositories directly on your laptop or cluster, using the <a href="https://github.com/AAROC/DevOps/blob/master/Ansible/cvmfs.yml">Ansible playbook</a> or <a href="https://github.com/AAROC/CODE-RADE/tree/master/cvmfs">scripts</a> provided. The repositories are usually mounted under /cvmfs, <em>e.g.</em> /cvmfs/fastrepo.sagrid.ac.za</p><h3>Adding and using modules</h3><p>Modules can be used by adding them to your module library :</p><pre>module use /cvmfs/fastrepo.sagrid.ac.za/compilers <br>module avail <br>---- /cvmfs/fastrepo.sagrid.ac.za/modules/compilers ---- gcc/4.9.2 gcc/5.1.0 <br>---- /usr/share/modules/versions ---- <br>3.2.10 <br>---- /usr/share/modules/modulefiles ---- <br>dot module-git module-info modules null use.own</pre><p>The environment variables SITE, OS, ARCH and CVMFS_DIR are needed to use the modules properly on your site. You can set them by hand or use the <a href="https://github.com/AAROC/CODE-RADE/blob/master/modules.sh">set script</a> in the CODE-RADE repo.</p><h3>Contributing</h3><p>Should you be interested in contributing to the CODE-RADE project, you can :</p><h3>Roadmap and planning</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*qT_Z9qGAkSBsKjqB.png" /></figure><p>This is the first release of the CODE-RADE platform; new applications and builds are continuously added to the repositories. Further releases will contain more tooling (different compilers, application libraries and application dependencies). The <a href="https://github.com/AAROC/CODE-RADE/milestones/Infrastructure%20foundation%20release%201">Release Milestone</a> issues have all been closed.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/380/0*M5r4nioFaw93U-9Q.png" /></figure><p>We use Slack to keep in touch while developing, and automation talks to us in <a href="https://africa-arabia-roc.slack.com/messages/code-rade">#code-rade</a>. If you would like to help us deliver software better to researchers, get in touch and come hang out with us (and our trusty bots.).</p><p>Tagged with <a href="http://www.africa-grid.org/tags/index.html#blog">blog</a> • <a href="http://www.africa-grid.org/tags/index.html#CODE-RADE">CODE-RADE</a> • <a href="http://www.africa-grid.org/tags/index.html#Release">Release</a></p><p><em>Originally published at </em><a href="http://www.africa-grid.org/blog/2015/12/07/CODE-RADE-Foundation-Release-1/"><em>www.africa-grid.org</em></a><em> on December 7, 2015.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=19261fc21319" width="1" height="1" alt=""><hr><p><a href="https://medium.com/open-science-in-africa/announcing-code-rade-foundation-release-1-19261fc21319">Announcing CODE-RADE Foundation Release 1</a> was originally published in <a href="https://medium.com/open-science-in-africa">Open Science in Africa</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Back home]]></title>
            <link>https://medium.com/open-science-in-africa/back-home-d4248b1f7b05?source=rss-34e9af91c30d------2</link>
            <guid isPermaLink="false">https://medium.com/p/d4248b1f7b05</guid>
            <category><![CDATA[africa]]></category>
            <category><![CDATA[research]]></category>
            <category><![CDATA[network]]></category>
            <dc:creator><![CDATA[Bruce Becker]]></dc:creator>
            <pubDate>Thu, 19 Nov 2015 00:00:00 GMT</pubDate>
            <atom:updated>2015-12-08T08:52:35.829Z</atom:updated>
            <cc:license>https://creativecommons.org/licenses/by-nc-nd/4.0/</cc:license>
            <content:encoded><![CDATA[<h3>Cathrin Stöver on Twitter</h3><p>Here are the Ladies of the Ubuntunet Alliance celebrating 10 years of success!! @UbuntuNet @AfricaConnect2 pic.twitter.com/9qs2DHbkBb</p><h3>Back home</h3><p>Everybody has a place that they like to call home. It may be a place, or it may be a group of people — and coming back to an Ubuntunet Connect meeting felt a bit like this for me — coming home. It’s a community meeting of people who are sincerely engaged with their constituents and are committed to making a difference to research communities in the long run. Most of us there know how little positive feedback there is in developing an NREN — when the bandwidth is slow and the services don’t work, we hear complaints and murmurings of discontent, but when everything <em>works</em>, we hardly ever get a pat on the back for a job well done. When the network works, it disappears (as most well-functioning techonlogy). Yet, despite the often lacking feeling appreciation from user communities, the NREN community is really close and there’s plenty of support from within.</p><p>So, this was the first time in Mozambique for me, and the <em>n-th</em> time “back home” in Ubuntunet’s annual meeting. The conference was held over 19–20 November in Maputo.</p><h3>Looking back…</h3><p>This event was an especially important one for two reasons : for one thing, it’s Ubuntunet’s 10-year birthday !</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/64/0*PijhE6lG941Ga9cM.png" /></figure><p>Now, you can write your own <em>“where was I …”</em> anecdote in the comments; in my case, ten years ago, I was in the thick of my Ph.D. at the University of Cape Town, working on the <a href="http://alice-collaboration.web.cern.ch/">ALICE</a> experiment at <a href="http://cern.ch/">CERN</a>. Part of my job was developing software for the alignment of the Dimuon spectrometer of the ALICE experiment, but we were also tasked with building part of the <a href="http://wlcg.web.cern.ch/">Worldwide LHC computing Grid</a>. Turns out it’s quite hard to do that without a network…</p><p>Skip ahead 10 years and in South Africa we’re running jobs like a boss at several sites in the WLCG, including ALICE jobs at the <a href="http://www.chpc.ac.za/">Centre for High-Performance Computing</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*lNQoaEjmzzEC-0rM.png" /></figure><p>It’s obvious to see things taking off around 2012. The availability of adequate bandwidth to South Africa via undersea cables around this period played a huge part in this continued success<a href="http://www.africa-grid.org/blog/2015/11/19/UC2015/#fn:NotSimple">1</a>. This is just one case where NRENs are directly enabling research which couldn’t be done without them; Several more can be found at <a href="http://www.africa-grid.org/blog/2015/11/19/UC2015/www.casefornrens.org">http://www.casefornrens.org</a><a href="http://www.africa-grid.org/blog/2015/11/19/UC2015/#fn:cas4nren">2</a>. It’s worthwhile to remember that in times of plenty (which we in South Africa are experiencing now) <em>as well as</em> in times of scarcity, which many of our colleagues in Africa are living through. It is as a community that we grow and mutually support each other, and it’s important to remember that this is how we achieve the greatest goals: through collective action.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/175/0*5WLYJ1wLHn0X7oGg.gif" /></figure><p>Seeing continued investment in the network is one of the most satisfying feelings we can have as infrastructure developers, and it was therefore with great excitement that we heard that the <a href="http://www.africaconnect.eu/MediaCentre/Pages/AfricaConnect2.aspx">AfricaConnect 2</a> project agreement had been signed :</p><blockquote><em>AfricaConnect2 sets out to extend the success story initiated by AfricaConnect and EUMEDCONNECT to the whole African continent, thus accelerating the development of the Information Society in Africa. Whilst the connectivity boost will improve the lives of millions of Africans through accelerated research and education, it will equally benefit collaborative scientific research the world over, in areas such as climate change, biodiversity, crop research, malaria and other infectious diseases. AfricaConnect2 is expected to commence in July 2015 and will have a duration of 3.5 years.</em></blockquote><blockquote><em>— </em><a href="http://www.africaconnect.eu/MediaCentre/Pages/AfricaConnect2.aspx"><em>AfricaConnect Project closing statement</em></a></blockquote><p>There were several speakers of note at the first day of the meeting, who commented on these milestones. We had representatives of the African Association of Universities, the African Academy of Sciences, GEANT, the regional NRENs of course (Ubuntunet, WACREN and ASREN), as well as the Network Startup Resources Centre, who has been there for the African RENs amongst others for … well, since the beginning ! A few things stood out as they gave their speeches.</p><p>First of all, the realisation that Africa is a first-class citizen of the research world. Perhaps one with a tiny voice, but still a full citizen, participating and contributing to efforts at every scale and in every area. Research networking is needed more than ever now and this was noted by the AAU as well as the AAS. This may sound obvious to the casual observer, but for those of us who have been around 10 years or longer, we can appreciate how much of a change this is. Research networking and advanced services were scoffed at not so long ago as a luxury that could not be afforded (in the best cases), or as an outside influence (possibly even a corrupting one at that) of dubious value.</p><p>Words of encouragement came from the regional NRENS in the North of Europe (Nordunet), Latin America (Clara) and the Caribbean (CKLN). Of course GÉANT’s presence — in the person of Katrin Stover — was also warmly felt in the room.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/128/0*D5WCATIBCjCUtSTP.png" /><figcaption><a href="http://www.orcid.org">ORCID provides persistent and unique identifiers for researchers and institutes</a></figcaption></figure><h3>Highlights</h3><p>The first highlight was that ORCID made a huge showing at this meeting. Whether this was a coincidence, due to the fact that it is objectively gaining traction, or the fact that we had organised a pre-conference workshop on Open Science wherein ORCID and <a href="http://www.datacite.org">DataCite</a> featured heavily, is hard to tell. At the end of the day, it doesn’t matter — what matters is that the audience was hearing the same message consistently :</p><blockquote><em>Unique identifiers and persistence are key to research output.</em></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/105/1*tLCDLWhlEQtQ5RWF5WSFYA.png" /><figcaption><a href="http://www.datacite.org">DataCite provides persistent digital object identifiers to research products and other advanced services</a></figcaption></figure><p><em>Good to know we’re all on the same page.</em></p><h3>Service and Identity Federations</h3><p>The second big thing was the breakthrough of Identity Federations. I would perhaps be going out on a limb to say that they have “arrived” in Africa — and that’s certainly not true across the board — but everyone in the room understood that Identity Federations were something that the research and education communities needed — and what is more needed to develop amongst themselves. Federated services are being heavily promoted by all three cluster projects (<a href="http://www.magic-project.eu/">MAGIC</a>, <a href="http://www.tandem-wacren.eu/">TANDEM</a> and <a href="http://www.sci-gaia.eu">Sci-GaIA</a>) and I’m proud to say that we’ve helped to bring new identity providers and services online across the continent. If the old saying goes that <em>“You can take a horse to water, but you can’t make it drink”</em> then perhaps in this case, the horses are starting to get thirsty !</p><p>With the work that Roberto Barbera and team is doing around the Catch-All Identity Federation, and the effort we’re putting into the development of infrastructure services for these federations in African countries, we might well see a few new African Federations in <em>edugain</em> by the end of 2016. Hey, maybe it’ll even be <a href="http://www.safire.ac.za">SAFIRE</a> !</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ew5mCQOSyyIjT-6IoWaOAA.jpeg" /><figcaption><a href="http://www.safire.ac.za">South African Federated Identity for Research and Education</a></figcaption></figure><h3>e-Infrastructure and Collaboration Platforms</h3><p>The third big theme that came out of the conference was discussion around those phantomatic <em>“advanced services”</em>. Since the official theme of the Conference was “The Road to Maturity”, this was on-topic, but what struck me was the maturity of the discussion and opinions. Gone is the euphoria of expectation for what “the almighty network” will bring us. “The Grid” is no longer referred to in capital letters, and we’re getting a pretty good idea of what collaboration actually is : a long slog of a thousand dancers all dancing to a slightly different tune, continually stepping on each others toes and only apologising when it suits them. The real world is a harsh place ! But it’s the only one we’ve got for now. Making it any better, unfortunately, means making it better for all — and that means working together, collectively where possible, and as I’ve said above, trying to support each other wherever we can.</p><p>It was very encouraging however to see that there are new computing resources coming to light, and new investments in data capacity and people in areas of the region. Mozambique, Zambia, Kenya, Sudan, DRC, Ghana, Nigeria, all bringing systems online. I hope that we will be able to coalesce around some common goals and work together to build a platform which will benefit us all. This is clearly a pipe dream — there’s no way we could even design something that broad — but I think it’s a worthy ideal. In order to get anything done in the long run, we will have to pick our battles carefully — especially when the opponents are our own brothers and sisters, academically speaking !</p><h3>Videoconferencing, Security and Open Science</h3><p>There were as usual a very good selection of presentations from across the NREN world at the conference. I was particularly happy to see presentations on very mature videoconferencing platforms<a href="http://www.africa-grid.org/blog/2015/11/19/UC2015/#fn:VidyoMconf">3</a>as well as a much-needed presentation on the development of a CSIRT in Kenya. There were a lot of good talk about Open Access and Open Science activities in Mozambique and beyond. There were also some demonstrations of mature services such as <a href="http://community.wacren.net/">Collaboratorio</a> and the Open Science Commons Platform being developed by Sci-GaIA. More about these in the future…</p><h3>Thoughts</h3><p>As I sat through the presentations, I considered how all ideas and technologies sort of <em>have their time</em>. When things come ahead of their time, they fail because of lack of perceived need or a general comprehension of how things work… Nicola Tesla might have something to say about that. When ideas come to fruition after their time has passed, for whatever reason, they also fail because they are born obsolete.</p><p>Well distributed computing is such an idea — particularly this idea that we can build common platforms for different kinds of research. It all makes sense on paper, but it’s <strong><em>not paper that decides what works</em></strong>, it’s the communities out there. We started building massive community-based distributed computing facilities in preparation for the the LHC data… and hey — they worked very well ! Then, they took a look around and said “hey, everyone’s like us — they need this too”. And so the general-solution of grid computing was born.</p><p>To be fair, a lot of people believed this over the years and many hundreds of millions of euros were spent. Some communities got productive use out of it, but not many. Especially, this was not a solution for the “generalised case”… but was it because the technology of grid computing was premature, or that the factors behind it’s success in a few fields were not generally applicable ? There is no answer, this is just a point to reflect on as we embark on the construction of yet another panacea — the academic cloud. I’m willing to bet that the architects will make many of the same logical connections drawn from successful use cases and eventually convince themselves that they are doing the right thing. User communities will also be bombarded with the message :</p><blockquote><strong><em>“You’re doing it wrong”</em></strong></blockquote><p>If you take umbrage, dear reader, at this crude analysis, I certainly can’t fault you. However, the point of this discussion is not to find fault with the past, but to learn from it; and more even more to the point, the discussion is aimed entirely at yours truly — there’s no greater critic than yourself, they say.</p><p>So, as we embark on the development of new infrastructure in our region, moving on and learning from the good old grid paradigm, trying to make things cloudier and user-friendlier and more flexible and whatnot, I would like to keep in mind a few things :</p><h4>If it ain’t broke don’t fix it.</h4><p>There’s a lot of juice to be squeezed from the “good old grid” yet, and indeed, the Africa-Arabia Regional Operations Centre still has resources to consume. So, don’t decide that we need to build something new just because it’s new.</p><h4>Let’s build with users, not for users</h4><p>Whether it’s Science Gateway user interfaces, new publishing platforms, or distributed computing and data infrastructure, user experience needs to be included from the start. Sure, many communities don’t know what’s possible and may feel constricted in their approach, and a new analysis of the situation may bring them more productivity, but let’s be on the look out for that ever present, oh-so-tempting “You’re doing it wrong.”</p><h4>Building community is better than building impunity<a href="http://www.africa-grid.org/blog/2015/11/19/UC2015/#fn:somethinglikethat">4</a></h4><p>Perhaps “impunity” is the wrong word, but hey, it rhymes with community. There has to be a symbiotic relationship between research communities and research infrastructures. e-Infrastructures should probably <em>not</em> be built by individual research communities, since that would result in huge duplication of effort, which means that true e-Infrastructures (as opposed to, say an ICT component of a research infrastructure) need to be built <em>with</em> researchers, not simply <em>for</em> researchers. As we need to understand their way of doing things, they need to understand by we can’t just do anything they want; they — like we — would be entwined in an ecosystem. This would emphasise the long-term benefits of a healthy community over the shorter term benefits of specific project outputs. This may be hard for research groups to hear, but it may be even harder for <strong><em>funders</em></strong> to swallow, since they want to know that their money is going to the cause they want to support <em>right now</em>.</p><p>There’s no easy fix to this and not every case would follow this co-design route. We can’t run a workshop or send an email or make a position paper that will make things better, because this is about a culture of sharing and collaboration and an emphasis on the “big picture”, rather than a technical challenge.</p><p>Perhaps what we can aim for is a common understanding, better and more open communication, and most of all, some <strong><em>emphathy</em></strong> between those building and those using the tools of the knowledge economy.</p><p>On that note, I leave you. Until the next meeting, somewhere warm<a href="http://www.africa-grid.org/blog/2015/11/19/UC2015/#fn:Durban">5</a>.</p><h3>— <a href="http://brucellino.github.io">Bruce Becker</a></h3><p>(with tweets from Katrin Stöver)</p><h3>Cathrin Stöver on Twitter</h3><p>Back home (sweet home) from the exciting UbuntunetConnect conference in Maputo! @UbuntuNet @AfricaConnect2 pic.twitter.com/hkfv7cNsGb</p><p>Tagged with <a href="http://www.africa-grid.org/tags/index.html#Ubuntunet%20Connect">Ubuntunet Connect</a> • <a href="http://www.africa-grid.org/tags/index.html#conference">conference</a> • <a href="http://www.africa-grid.org/tags/index.html#commentary">commentary</a> • <a href="http://www.africa-grid.org/tags/index.html#community">community</a></p><p><em>Originally published at </em><a href="http://www.africa-grid.org/blog/2015/11/19/UC2015/"><em>www.africa-grid.org</em></a><em> on November 19, 2015.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d4248b1f7b05" width="1" height="1" alt=""><hr><p><a href="https://medium.com/open-science-in-africa/back-home-d4248b1f7b05">Back home</a> was originally published in <a href="https://medium.com/open-science-in-africa">Open Science in Africa</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>