<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    
      <meta name="description" content="Archive: 2018 06">
    

    <meta name="author" content="The Apache Software Foundation">

    
      <meta name="keywords" content="python,libcloud,cloud,cloud computing,rackspace,amazon ec2,cloudfiles,openstack,cloudstack" />
    

    
      <title>Archive: 2018 &raquo; June | Apache Libcloud</title>
    

    <!-- fav icons -->
    <link rel="shortcut icon" href="/images/favicon.png" />
    <link rel="apple-touch-icon" href="/images/apple-touch-icon.png" />
    <link rel="apple-touch-icon-precomposed" href="/images/apple-touch-icon.png" />

    <link href="/blog/atom.xml" type="application/atom+xml" rel="alternate" title="Apache Libcloud Blog Feed" />

    <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,400italic' rel='stylesheet' type='text/css'>
    <link href='https://fonts.googleapis.com/css?family=Inconsolata' rel='stylesheet' type='text/css'>

    <!-- Facebook OpenGraph tags -->
    <meta content="Apache Libcloud" property="og:site_name">
    
      <meta content="Archive: 2018 &raquo; June" property="og:title">
    

    

    
      <meta content="Archive: 2018 06" property="og:description">
    

    
      <meta content="website" property="og:type">
    

    
      <meta content="https://libcloud.apache.org/blog/archives/2018/06/" property="og:url">
    
    

    

    <link href='/assets/global-1308c666680167d866048809d7a668bf.css' rel='stylesheet' type='text/css' />
  </head>

  <body data-spy="scroll" data-target=".sidebar-nav" data-offset="80">
    <nav class="navbar navbar-fixed-top navbar-inverse" role="navigation">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="/index.html"><img src="/images/libcloud_logo.png" class="navbar-logo" /> Apache Libcloud</a>
        </div>
        <div class="collapse navbar-collapse navbar-ex1-collapse">
          <ul class="nav navbar-nav">
            
            
              <li ><a href="/" >Home</a></li>
            
              <li ><a href="/about.html" >About</a></li>
            
              <li ><a href="/getting-started.html" >Quick Start</a></li>
            
              <li ><a href="https://libcloud.readthedocs.org/en/stable/" target="_blank">Documentation</a></li>
            
              <li ><a href="/downloads.html" >Downloads</a></li>
            
              <li ><a href="/community.html" >Community</a></li>
            
              <li ><a href="/blog/" >Blog</a></li>
            
          </ul>
        </div><!-- /.navbar-collapse -->
      </div><!-- /.container -->
    </nav>

    <div class="container main-container">
      

  <div class="post">
  
    <h2><a href="/blog/2018/06/27/rick-van-de-loo-joins-our-team.html">Rick van de Loo (vdloo) joins our team</a></h2>
  
  <span class="post-date-author">By Tomaz Muraus on Jun 27, 2018</span>

  <div class="post-content">
    <p>Please help us extend a warm welcome to our newest team member <a href="https://github.com/vdloo">Rick van de
Loo</a>!</p>

<p>The Project Management Committee (PMC) for Apache Libcloud has invited Rick
van de Loo to join us as a committer and we are pleased to announce that he
has accepted.</p>

<p>In the last couple of years Rick has <a href="https://github.com/apache/libcloud/pulls?q=is%3Apr+author%3Avdloo+is%3Aclosed">contributed various high quality
changes</a> to the project and we are happy to have him on board.</p>

<p>For anyone who would like to know more about Rick here is his short bio:</p>

<blockquote>
  <p>Rick van de Loo is the lead developer on Hypernode, a highly automated and
cloud agnostic hosting platform specialised for Magento built on top of Apache
Libcloud. Since Rick started working on Hypernode he has seen it scale from
double digits to thousands of servers, along the road orchestrating various
high volume cross-provider migrations. His main focus is on platform
stability and feature development, of which a large part has been integrating
cloud APIs and working around their incompatibilities and unreliable nature.</p>
</blockquote>

<p>And in his own words:</p>

<blockquote>
  <p>Since we started using Libcloud around four years ago the landscape has
changed a lot. But even though container-based and serverless architectures
have become more prominent, compute is still the cornerstone of cloud. Most
of my contributions have been about standardising functionality across
different compute providers and implementing new driver methods, mainly
related to the AWS, DigitalOcean and OpenStack APIs. As an Apache Libcloud
team member I will continue to contribute changes that help us scratch our
own itch and encourage other members of the Hypernode team to do the same.</p>
</blockquote>

<p>We are happy to have him in our team and we are looking forward to his future
participation and contributions.</p>


  </div>

  <div class="row section post-meta">
    <div class="col-md-12 post-tags">
      <p>Tags: <a href="/blog/tags/news.html" rel="tag">news</a>, <a href="/blog/tags/new-committer.html" rel="tag">new committer</a></p>
    </div>
  </div>
</div>



<p class="navigation">
  

  
</p>



      <hr />

      <footer>
        <div class="row">
          <div class="col-lg-12 text-center">
            <div class="footer-links">
  <p><a href="http://www.apache.org/licenses/">License</a> | <a
  href="/security.html">Security</a> | <a
  href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> |
  <a href="http://www.apache.org/foundation/thanks.html">Thanks</a> |
  <a href="/credits.html">Credits</a> | <a href="/media.html">Media</a>
</div>

<div class="footer-text">
  <p class="">Copyright &copy; 2009-2022 <a href="https://www.apache.org/" target="_blank">The Apache Software Foundation</a></p>
  <p class="">Apache Libcloud, Libcloud, Apache, the Apache feather, and the Apache Libcloud project logo are trademarks of the Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
  <p class="">Site last updated on 2022-03-29 16:54:10 +0000</p>
</div>

          </div>
        </div>
      </footer>

    </div><!-- /.container -->

    <!-- JavaScript -->
    <script src='/assets/global-ee7144fe899318cbe27f817bbbea49a3.js' type='text/javascript'></script>

    

    <script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-23580482-1']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>

  </body>
</html>
