Author: anthonyshaw
Date: Wed Jun 15 01:32:13 2016
New Revision: 1748478
URL: http://svn.apache.org/viewvc?rev=1748478&view=rev
Log:
Added assets
Added:
libcloud/site/trunk/generated/assets/global-52715da7c55e2d86c5b5bfc2a8e7c73e.css
libcloud/site/trunk/generated/assets/global-52715da7c55e2d86c5b5bfc2a8e7c73e.css.gz
(with props)
libcloud/site/trunk/generated/assets/global-9c9298ad4670c6fcb2e40b5291d6c657.js
libcloud/site/trunk/generated/assets/global-9c9298ad4670c6fcb2e40b5291d6c657.js.gz
(with props)
libcloud/site/trunk/generated/assets/index-d2b5f16dce0cff3423840ceaa54edec2.js
libcloud/site/trunk/generated/assets/index-d2b5f16dce0cff3423840ceaa54edec2.js.gz
(with props)
libcloud/site/trunk/generated/blog/2016/04/12/
libcloud/site/trunk/generated/blog/2016/04/12/help-wanted.html
libcloud/site/trunk/generated/blog/page/15/
libcloud/site/trunk/generated/blog/page/15/index.html
libcloud/site/trunk/generated/blog/tags/community.html
Removed:
libcloud/site/trunk/generated/assets/global-14c8e0124e6d563413005cb909342e2a.js
libcloud/site/trunk/generated/assets/global-14c8e0124e6d563413005cb909342e2a.js.gz
libcloud/site/trunk/generated/assets/global-57b0092d353d0369071e1021782bb38d.css
libcloud/site/trunk/generated/assets/global-57b0092d353d0369071e1021782bb38d.css.gz
libcloud/site/trunk/generated/assets/index-326436a009a390ecdd6ea59e13a2e1bc.js
libcloud/site/trunk/generated/assets/index-326436a009a390ecdd6ea59e13a2e1bc.js.gz
Modified:
libcloud/site/trunk/generated/blog/atom.xml
Added:
libcloud/site/trunk/generated/assets/global-52715da7c55e2d86c5b5bfc2a8e7c73e.css
URL:
http://svn.apache.org/viewvc/libcloud/site/trunk/generated/assets/global-52715da7c55e2d86c5b5bfc2a8e7c73e.css?rev=1748478&view=auto
==============================================================================
---
libcloud/site/trunk/generated/assets/global-52715da7c55e2d86c5b5bfc2a8e7c73e.css
(added)
+++
libcloud/site/trunk/generated/assets/global-52715da7c55e2d86c5b5bfc2a8e7c73e.css
Wed Jun 15 01:32:13 2016
@@ -0,0 +1,9 @@
+/*!
+ * Bootstrap v3.0.3
+ *
+ * Copyright 2013 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
[... 3 lines stripped ...]
Added:
libcloud/site/trunk/generated/assets/global-52715da7c55e2d86c5b5bfc2a8e7c73e.css.gz
URL:
http://svn.apache.org/viewvc/libcloud/site/trunk/generated/assets/global-52715da7c55e2d86c5b5bfc2a8e7c73e.css.gz?rev=1748478&view=auto
==============================================================================
Binary file - no diff available.
Propchange:
libcloud/site/trunk/generated/assets/global-52715da7c55e2d86c5b5bfc2a8e7c73e.css.gz
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
libcloud/site/trunk/generated/assets/global-9c9298ad4670c6fcb2e40b5291d6c657.js
URL:
http://svn.apache.org/viewvc/libcloud/site/trunk/generated/assets/global-9c9298ad4670c6fcb2e40b5291d6c657.js?rev=1748478&view=auto
==============================================================================
---
libcloud/site/trunk/generated/assets/global-9c9298ad4670c6fcb2e40b5291d6c657.js
(added)
+++
libcloud/site/trunk/generated/assets/global-9c9298ad4670c6fcb2e40b5291d6c657.js
Wed Jun 15 01:32:13 2016
@@ -0,0 +1,33 @@
+/*!
+ * jQuery JavaScript Library v2.0.3
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2013-07-03T13:30Z
+ */
+(function(window,undefined){var rootjQuery,readyList,core_strundefined=typeof
undefined,location=window.location,document=window.document,docElem=document.documentElement,_jQuery=window.jQuery,_$=window.$,class2type={},core_deletedIds=[],core_version="2.0.3",core_concat=core_deletedIds.concat,core_push=core_deletedIds.push,core_slice=core_deletedIds.slice,core_indexOf=core_deletedIds.indexOf,core_toString=class2type.toString,core_hasOwn=class2type.hasOwnProperty,core_trim=core_version.trim,jQuery=function(selector,context){return
new
jQuery.fn.init(selector,context,rootjQuery)},core_pnum=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,core_rnotwhite=/\S+/g,rquickExpr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,rsingleTag=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,rmsPrefix=/^-ms-/,rdashAlpha=/-([\da-z])/gi,fcamelCase=function(all,letter){return
letter.toUpperCase()},completed=function(){document.removeEventListener("DOMContentLoaded",completed,false);window.removeEventListener("load",completed,false);jQue
ry.ready()};jQuery.fn=jQuery.prototype={jquery:core_version,constructor:jQuery,init:function(selector,context,rootjQuery){var
match,elem;if(!selector){return this}if(typeof
selector==="string"){if(selector.charAt(0)==="<"&&selector.charAt(selector.length-1)===">"&&selector.length>=3){match=[null,selector,null]}else{match=rquickExpr.exec(selector)}if(match&&(match[1]||!context)){if(match[1]){context=context
instanceof
jQuery?context[0]:context;jQuery.merge(this,jQuery.parseHTML(match[1],context&&context.nodeType?context.ownerDocument||context:document,true));if(rsingleTag.test(match[1])&&jQuery.isPlainObject(context)){for(match
in
context){if(jQuery.isFunction(this[match])){this[match](context[match])}else{this.attr(match,context[match])}}}return
this}else{elem=document.getElementById(match[2]);if(elem&&elem.parentNode){this.length=1;this[0]=elem}this.context=document;this.selector=selector;return
this}}else{if(!context||context.jquery){return(context||rootjQuery).find(selector)}else
{return
this.constructor(context).find(selector)}}}else{if(selector.nodeType){this.context=this[0]=selector;this.length=1;return
this}else{if(jQuery.isFunction(selector)){return
rootjQuery.ready(selector)}}}if(selector.selector!==undefined){this.selector=selector.selector;this.context=selector.context}return
jQuery.makeArray(selector,this)},selector:"",length:0,toArray:function(){return
core_slice.call(this)},get:function(num){return
num==null?this.toArray():(num<0?this[this.length+num]:this[num])},pushStack:function(elems){var
ret=jQuery.merge(this.constructor(),elems);ret.prevObject=this;ret.context=this.context;return
ret},each:function(callback,args){return
jQuery.each(this,callback,args)},ready:function(fn){jQuery.ready.promise().done(fn);return
this},slice:function(){return
this.pushStack(core_slice.apply(this,arguments))},first:function(){return
this.eq(0)},last:function(){return this.eq(-1)},eq:function(i){var
len=this.length,j=+i+(i<0?len:0);return this.pushStack(j>=0&&j<le
n?[this[j]]:[])},map:function(callback){return
this.pushStack(jQuery.map(this,function(elem,i){return
callback.call(elem,i,elem)}))},end:function(){return
this.prevObject||this.constructor(null)},push:core_push,sort:[].sort,splice:[].splice};jQuery.fn.init.prototype=jQuery.fn;jQuery.extend=jQuery.fn.extend=function(){var
options,name,src,copy,copyIsArray,clone,target=arguments[0]||{},i=1,length=arguments.length,deep=false;if(typeof
target==="boolean"){deep=target;target=arguments[1]||{};i=2}if(typeof
target!=="object"&&!jQuery.isFunction(target)){target={}}if(length===i){target=this;--i}for(;i<length;i++){if((options=arguments[i])!=null){for(name
in
options){src=target[name];copy=options[name];if(target===copy){continue}if(deep&©&&(jQuery.isPlainObject(copy)||(copyIsArray=jQuery.isArray(copy)))){if(copyIsArray){copyIsArray=false;clone=src&&jQuery.isArray(src)?src:[]}else{clone=src&&jQuery.isPlainObject(src)?src:{}}target[name]=jQuery.extend(deep,clone,copy)}else{if(copy!==undefi
ned){target[name]=copy}}}}}return
target};jQuery.extend({expando:"jQuery"+(core_version+Math.random()).replace(/\D/g,""),noConflict:function(deep){if(window.$===jQuery){window.$=_$}if(deep&&window.jQuery===jQuery){window.jQuery=_jQuery}return
jQuery},isReady:false,readyWait:1,holdReady:function(hold){if(hold){jQuery.readyWait++}else{jQuery.ready(true)}},ready:function(wait){if(wait===true?--jQuery.readyWait:jQuery.isReady){return}jQuery.isReady=true;if(wait!==true&&--jQuery.readyWait>0){return}readyList.resolveWith(document,[jQuery]);if(jQuery.fn.trigger){jQuery(document).trigger("ready").off("ready")}},isFunction:function(obj){return
jQuery.type(obj)==="function"},isArray:Array.isArray,isWindow:function(obj){return
obj!=null&&obj===obj.window},isNumeric:function(obj){return
!isNaN(parseFloat(obj))&&isFinite(obj)},type:function(obj){if(obj==null){return
String(obj)}return typeof obj==="object"||typeof
obj==="function"?class2type[core_toString.call(obj)]||"object":typeof
obj},isPlain
Object:function(obj){if(jQuery.type(obj)!=="object"||obj.nodeType||jQuery.isWindow(obj)){return
false}try{if(obj.constructor&&!core_hasOwn.call(obj.constructor.prototype,"isPrototypeOf")){return
false}}catch(e){return false}return true},isEmptyObject:function(obj){var
name;for(name in obj){return false}return true},error:function(msg){throw new
Error(msg)},parseHTML:function(data,context,keepScripts){if(!data||typeof
data!=="string"){return null}if(typeof
context==="boolean"){keepScripts=context;context=false}context=context||document;var
parsed=rsingleTag.exec(data),scripts=!keepScripts&&[];if(parsed){return[context.createElement(parsed[1])]}parsed=jQuery.buildFragment([data],context,scripts);if(scripts){jQuery(scripts).remove()}return
jQuery.merge([],parsed.childNodes)},parseJSON:JSON.parse,parseXML:function(data){var
xml,tmp;if(!data||typeof data!=="string"){return null}try{tmp=new
DOMParser();xml=tmp.parseFromString(data,"text/xml")}catch(e){xml=undefined}if(!xml||xml.getElement
sByTagName("parsererror").length){jQuery.error("Invalid XML: "+data)}return
xml},noop:function(){},globalEval:function(code){var
script,indirect=eval;code=jQuery.trim(code);if(code){if(code.indexOf("use
strict")===1){script=document.createElement("script");script.text=code;document.head.appendChild(script).parentNode.removeChild(script)}else{indirect(code)}}},camelCase:function(string){return
string.replace(rmsPrefix,"ms-").replace(rdashAlpha,fcamelCase)},nodeName:function(elem,name){return
elem.nodeName&&elem.nodeName.toLowerCase()===name.toLowerCase()},each:function(obj,callback,args){var
value,i=0,length=obj.length,isArray=isArraylike(obj);if(args){if(isArray){for(;i<length;i++){value=callback.apply(obj[i],args);if(value===false){break}}}else{for(i
in
obj){value=callback.apply(obj[i],args);if(value===false){break}}}}else{if(isArray){for(;i<length;i++){value=callback.call(obj[i],i,obj[i]);if(value===false){break}}}else{for(i
in obj){value=callback.call(obj[i],i,obj[i]);if(value===
false){break}}}}return obj},trim:function(text){return
text==null?"":core_trim.call(text)},makeArray:function(arr,results){var
ret=results||[];if(arr!=null){if(isArraylike(Object(arr))){jQuery.merge(ret,typeof
arr==="string"?[arr]:arr)}else{core_push.call(ret,arr)}}return
ret},inArray:function(elem,arr,i){return
arr==null?-1:core_indexOf.call(arr,elem,i)},merge:function(first,second){var
l=second.length,i=first.length,j=0;if(typeof
l==="number"){for(;j<l;j++){first[i++]=second[j]}}else{while(second[j]!==undefined){first[i++]=second[j++]}}first.length=i;return
first},grep:function(elems,callback,inv){var
retVal,ret=[],i=0,length=elems.length;inv=!!inv;for(;i<length;i++){retVal=!!callback(elems[i],i);if(inv!==retVal){ret.push(elems[i])}}return
ret},map:function(elems,callback,arg){var
value,i=0,length=elems.length,isArray=isArraylike(elems),ret=[];if(isArray){for(;i<length;i++){value=callback(elems[i],i,arg);if(value!=null){ret[ret.length]=value}}}else{for(i
in elems){value=callback(e
lems[i],i,arg);if(value!=null){ret[ret.length]=value}}}return
core_concat.apply([],ret)},guid:1,proxy:function(fn,context){var
tmp,args,proxy;if(typeof
context==="string"){tmp=fn[context];context=fn;fn=tmp}if(!jQuery.isFunction(fn)){return
undefined}args=core_slice.call(arguments,2);proxy=function(){return
fn.apply(context||this,args.concat(core_slice.call(arguments)))};proxy.guid=fn.guid=fn.guid||jQuery.guid++;return
proxy},access:function(elems,fn,key,value,chainable,emptyGet,raw){var
i=0,length=elems.length,bulk=key==null;if(jQuery.type(key)==="object"){chainable=true;for(i
in
key){jQuery.access(elems,fn,i,key[i],true,emptyGet,raw)}}else{if(value!==undefined){chainable=true;if(!jQuery.isFunction(value)){raw=true}if(bulk){if(raw){fn.call(elems,value);fn=null}else{bulk=fn;fn=function(elem,key,value){return
bulk.call(jQuery(elem),value)}}}if(fn){for(;i<length;i++){fn(elems[i],key,raw?value:value.call(elems[i],i,fn(elems[i],key)))}}}}return
chainable?elems:bulk?fn.call(elems):length?
fn(elems[0],key):emptyGet},now:Date.now,swap:function(elem,options,callback,args){var
ret,name,old={};for(name in
options){old[name]=elem.style[name];elem.style[name]=options[name]}ret=callback.apply(elem,args||[]);for(name
in options){elem.style[name]=old[name]}return
ret}});jQuery.ready.promise=function(obj){if(!readyList){readyList=jQuery.Deferred();if(document.readyState==="complete"){setTimeout(jQuery.ready)}else{document.addEventListener("DOMContentLoaded",completed,false);window.addEventListener("load",completed,false)}}return
readyList.promise(obj)};jQuery.each("Boolean Number String Function Array Date
RegExp Object Error".split(" "),function(i,name){class2type["[object
"+name+"]"]=name.toLowerCase()});function isArraylike(obj){var
length=obj.length,type=jQuery.type(obj);if(jQuery.isWindow(obj)){return
false}if(obj.nodeType===1&&length){return true}return
type==="array"||type!=="function"&&(length===0||typeof
length==="number"&&length>0&&(length-1) in obj)}rootjQuery=jQuery
(document);
+/*!
+ * Sizzle CSS Selector Engine v1.9.4-pre
+ * http://sizzlejs.com/
+ *
+ * Copyright 2013 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2013-06-03
+ */
[... 11 lines stripped ...]
Added:
libcloud/site/trunk/generated/assets/global-9c9298ad4670c6fcb2e40b5291d6c657.js.gz
URL:
http://svn.apache.org/viewvc/libcloud/site/trunk/generated/assets/global-9c9298ad4670c6fcb2e40b5291d6c657.js.gz?rev=1748478&view=auto
==============================================================================
Binary file - no diff available.
Propchange:
libcloud/site/trunk/generated/assets/global-9c9298ad4670c6fcb2e40b5291d6c657.js.gz
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
libcloud/site/trunk/generated/assets/index-d2b5f16dce0cff3423840ceaa54edec2.js
URL:
http://svn.apache.org/viewvc/libcloud/site/trunk/generated/assets/index-d2b5f16dce0cff3423840ceaa54edec2.js?rev=1748478&view=auto
==============================================================================
---
libcloud/site/trunk/generated/assets/index-d2b5f16dce0cff3423840ceaa54edec2.js
(added)
+++
libcloud/site/trunk/generated/assets/index-d2b5f16dce0cff3423840ceaa54edec2.js
Wed Jun 15 01:32:13 2016
@@ -0,0 +1 @@
+var LINE_TOOLTIPS={"compute-1":{"1":"Import libcloud type we
need","2":['Import "get_driver" method for obtaining a reference to the driver
'," class."],"4":["Obtain a reference to the provider driver class. <br /><br
/>Keep in ","mind that Libcloud supports more than 30 providers total and
","Provider.RACKSPACE constant can be replaced with a provider constant ","of
any other of the supported providers."],"5":["Instantiate the driver with your
provider credentials. ",'Rackspace driver supports multiple regions so in this
case, "region" ',"argument is used as well."],"7":["List all the available
sizes. <br /><br />In Libcloud, size ","represents a server hardware
configuration. Usually this is the amount ","of the available RAM, bandwidth,
CPU speed and disk size. Most of ","the drivers also expose an hourly price (in
US dollars) for the Node ","of this size."],"8":["List all the available
images.<br /><br />In Libcloud, image ","represents an operating system
image."],"10":"Select
a size to use.","11":"Select an image to use.","13":"Create a node using a
previously selected size and image.","14":"Print representation of the created
Node object."},"dns-1":{"1":"Import libcloud types we need","2":['Import
"get_driver" method for obtaining a reference to the driver ',"
class."],"4":"Obtain a reference to the provider driver
class.","5":"Instantiate the driver with your provider credentials.","7":"List
all the available zones (domains) on this account.","8":"Select the zone to
operate on.","10":['Create a new "A" record with a name of "www" and a value of
','"127.0.0.1" under the selected zone.'],"11":"Print representation of the
created Record object."}};jQuery(document).ready(function(a){a(".example code
span[id]").on("mouseover click",function(b){var
f,c,e,d,h,j,i,g;d=a(this).closest("div.example");h=d.attr("data-example");f=LINE_TOOLTIPS[h];if(!f){return}g=a(this).attr("title")!==undefined;c=a(this).attr("id").replace("line-","");i=f[c];if(!i){return}if(g){if
(b.type==="click"){a(this).popover("toggle")}return}if(i instanceof
Array){e=i.join("")}else{e=i}j={content:e,placement:"auto
right",html:true,trigger:"hover",container:"body"};a(this).popover(j);a(this).popover("show")})});
\ No newline at end of file
Added:
libcloud/site/trunk/generated/assets/index-d2b5f16dce0cff3423840ceaa54edec2.js.gz
URL:
http://svn.apache.org/viewvc/libcloud/site/trunk/generated/assets/index-d2b5f16dce0cff3423840ceaa54edec2.js.gz?rev=1748478&view=auto
==============================================================================
Binary file - no diff available.
Propchange:
libcloud/site/trunk/generated/assets/index-d2b5f16dce0cff3423840ceaa54edec2.js.gz
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: libcloud/site/trunk/generated/blog/2016/04/12/help-wanted.html
URL:
http://svn.apache.org/viewvc/libcloud/site/trunk/generated/blog/2016/04/12/help-wanted.html?rev=1748478&view=auto
==============================================================================
--- libcloud/site/trunk/generated/blog/2016/04/12/help-wanted.html (added)
+++ libcloud/site/trunk/generated/blog/2016/04/12/help-wanted.html Wed Jun 15
01:32:13 2016
@@ -0,0 +1,310 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+
+
+ <meta name="author" content="The Apache Software Foundation">
+
+
+ <meta name="keywords" content="news,community" />
+
+
+
+ <title>Help Wanted | 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="Help Wanted" property="og:title">
+
+
+
+
+
+
+
+ <meta content="article" property="og:type">
+
+
+
+ <meta
content="https://libcloud.apache.org/blog/2016/04/12/help-wanted.html"
property="og:url">
+
+
+ <meta content="2016-04-12T00:00:00+10:00"
property="article:published_time">
+ <meta content="https://libcloud.apache.org/about.html"
property="article:author">
+
+
+
+
+ <meta content="news" property="article:tag">
+
+ <meta content="community" property="article:tag">
+
+
+
+ <link href='/assets/global-52715da7c55e2d86c5b5bfc2a8e7c73e.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/latest/"
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="row section page-content">
+ <div class="col-lg-8 col-lg-offset-2">
+
+<div class="post">
+
+ <h2>Help Wanted</h2>
+
+
+
+
+
+ <span class="post-date-author">By Anthony Shaw on Apr 12, 2016</span>
+
+ <div class="post-content">
+ <h1>Help wanted - a summary of community contributions we really need your
help with</h1>
+
+<p>Libcloud has a fantastic community, we value our community contributions
and having a wide and varied experience and skillset.</p>
+
+<p>Recently people have been asking what else they can do to help that
isn't creating another driver, there's still plenty to do, here is a
summary of some contributions
+that would be really valuable and don't nessecarily require advanced
Python experience.</p>
+
+<h2>Skill set - documentation</h2>
+
+<ul>
+<li>Develop a 'writing a driver' from scratch tutorial that covers all
the steps to developing a new DNS, Storage, Compute etc driver.</li>
+<li>Improve the provider feature matrix, it's difficult to navigate and a
more screen friendly format needs to be found <a
href="http://libcloud.readthedocs.org/en/latest/supported_providers.html#provider-matrix">page</a></li>
+<li>Develop a "Libcloud in 30 minutes" tutorial that takes you
through installation, getting started and loading up your cloud and using the
driver.</li>
+</ul>
+
+<h2>Skill set - Web Authoring</h2>
+
+<p>Our website is written using Jekyll, Markdown and HTML. </p>
+
+<p><a href="http://svn.apache.org/viewvc/libcloud/site/trunk/">Source
Code</a></p>
+
+<p>We would really value</p>
+
+<ul>
+<li>Additional copy on the homepage explaining what the project does and
potential use cases</li>
+<li>Develop out the community pages</li>
+<li>Extend the Using pages to link to the documentation site</li>
+<li>Integrating video/GIF tutorials on the homepage</li>
+</ul>
+
+<h2>Skill set - Video tutorials</h2>
+
+<p>Complimenting our documentation with video tutorials (or GIF tutorials) on
basic concepts and how to use the library would be really useful for
beginners.</p>
+
+<h2>Skill set - Advanced Python development</h2>
+
+<h3>Compute driver</h3>
+
+<ul>
+<li>The base <code>Node</code> class is missing standard fields to describe
the CPU, Memory and Disk information for the Node. Propose, design and develop
an implementation for this problem.</li>
+<li>Update the Azure driver to support the ARM APIs.</li>
+<li>Solve the <code>create_node</code> problem - (this is a big one). The
driver classes are interchangable with the large and important exception of
<code>create_node</code>. Some drivers use implicitly required
<code>kwargs</code>, some require additional
+named keyword arguments, like the GCE driver requires the project name. This
means any code needs to switch the argument set depending on the driver.
+We need a method(s) in the base driver which is consistent, and can be used
across drivers. This would most likely use an Adapter or Proxy design pattern.
</li>
+</ul>
+
+<h3>Container driver</h3>
+
+<ul>
+<li>Extend the <a
href="http://libcloud.readthedocs.org/en/latest/container/drivers/kubernetes.html">Kubernetes</a>
driver to implement a <a
href="https://cloud.google.com/container-engine/">Google Container Engine</a>
driver</li>
+<li>Develop an Azure Container Service driver</li>
+<li>Test and extend the Docker driver</li>
+<li>Test and extend the Kubernetes driver for compatibility with the 1.2
release</li>
+</ul>
+
+<h3>Backup driver</h3>
+
+<ul>
+<li>Implement a driver using Amazon EBS snapshots</li>
+<li>Implement an Azure Backup driver</li>
+</ul>
+
+<h3>DNS driver</h3>
+
+<ul>
+<li>Implement an Azure <a
href="https://azure.microsoft.com/en-us/services/dns/">DNS</a> driver</li>
+</ul>
+
+<h2>Skill set - Testing and experience</h2>
+
+<p>We have 2 major changes that need testing against real life</p>
+
+<ul>
+<li><p>The <code>requests</code> implementation of our base HTTP classes, see
my <a
href="http://libcloud.apache.org/blog/2016/04/06/requests-support.html">previous
post</a> on details. This needs thoroughly testing against</p>
+
+<ul>
+<li>Compute classes, POST, GET methods</li>
+<li>AWS auth token signing</li>
+<li>Storage drivers using PUT and file streams</li>
+</ul></li>
+<li><p>The container base class promoting to a "stable" state</p>
+
+<ul>
+<li>Testing the docker driver against different implementations and auth
mechanisms</li>
+<li>Testing the Amazon ECS driver against real-world scenarios</li>
+</ul></li>
+</ul>
+
+<h2>Use case projects</h2>
+
+<p>There are a number of use cases that have been discussed but not
implemented in a public repository. These would
+demonstrate the power of libcloud.</p>
+
+<ul>
+<li>A storage migration utility - Our storage APIs are a great way </li>
+<li>A DNS management library - Configure your DNS providers in a DSL file and
have a command line utility to list records, zones and manage DNS</li>
+<li>A bind export utility - Our DNS driver supports <a
href="http://libcloud.readthedocs.org/en/latest/dns/api.html#libcloud.dns.base.DNSDriver.export_zone_to_bind_format">exporting
a zone to bind format</a>. Some cloud providers, such as Amazon Route53
don't offer this feature publically, so using libcloud would be
+a great use to allow people to export and backup data from Route53 or other
services to a secondary NS slave.</li>
+<li>A REST API for Libcloud - @tonybaloney has already started this using
Flask RESTful supporting GET methods, this needs to extended and developed. The
idea is
+to allow non-Python users to leverage libcloud via a RESTful API. The API will
be dynamically constructed using Pythons introspection capabilities. <a
href="https://github.com/tonybaloney/libcloud.api">See the project and fork
this to get started</a></li>
+</ul>
+
+<h2>OK, I'm ready - what now?</h2>
+
+<p>Depending on what level of experience you are at, you can learn more about
how to get started. You'll be pleased to learn that the libcloud project is
beginner friendly, we accept contributions from all levels as well as abiding
by the ASF code of ethics.</p>
+
+<h3>New to open-source?</h3>
+
+<p>Check out this <a
href="https://www.thinkful.com/learn/github-pull-request-tutorial/">tutorial on
creating your first PR</a> </p>
+
+<h3>New to Python?</h3>
+
+<p>Check out <a href="http://www.learnpython.org/">LearnPython.org</a> to cut
your teeth on some interactive tutorials.</p>
+
+<p>Specifically to develop on libcloud you will need some tools:</p>
+
+<ul>
+<li>A Python text editor like <a href="https://atom.io/">Atom</a>, <a
href="http://komodoide.com/">Komodo</a>, <a
href="https://www.jetbrains.com/pycharm/">PyCharm</a> or emacs.</li>
+<li>The Python 2.7 and 3.5 CPython interpreters installed</li>
+<li>Tox for running the unit tests (<code>easy_install tox</code>)</li>
+<li>Linting tools for checking PEP8 compliance, Flake8 (<code>easy_install
flake8</code>) and PyLint (<code>easy_install pylint</code>)</li>
+<li>Sphinx for building the docs</li>
+</ul>
+
+<h3>New to Apache?</h3>
+
+<p>Firstly, checkout <a href="http://www.theapacheway.com/">The Apache Way</a>
to understand the principles of the Apache community projects.</p>
+
+<p>If you're a committer on an Apache project, it means that you can
commit directly to the project's repository. For instance, with Apache
Libcloud committers are allowed to directly push commits into the git
repository. Non-Committers can
+raise pull-requests on the read-only mirror on <a
href="https://github.com/apache/libcloud">github.com/apache/libcloud</a>, one
of the committers will then use <code>git am</code> to merge your patch
directly into the ASF git repository on your behalf. You will still
+get contribution recognition in the git logs.</p>
+
+<h3>I'm a pro, come at me</h3>
+
+<ul>
+<li>Read our project style and best-practice guidance on <a
href="http://libcloud.readthedocs.org/en/latest/development.html#getting-started-with-contributing-to-libcloud">the
documentation site</a> for all of the things that are checked during the PR
process.</li>
+</ul>
+
+ </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/community.html" rel="tag">community</a></p>
+ </div>
+ </div>
+</div>
+
+Share : <a href="https://twitter.com/share"
class="twitter-share-button"{count} data-via="libcloud" data-size="large"
data-hashtags="cloud">Tweet</a>
+<script>!function(d,s,id){var
js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document,
'script', 'twitter-wjs');</script>
+
+ </div>
+</div>
+
+
+ <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 © 2009-2016 <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>
+</div>
+
+ </div>
+ </div>
+ </footer>
+
+ </div><!-- /.container -->
+
+ <!-- JavaScript -->
+ <script src='/assets/global-9c9298ad4670c6fcb2e40b5291d6c657.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>
Modified: libcloud/site/trunk/generated/blog/atom.xml
URL:
http://svn.apache.org/viewvc/libcloud/site/trunk/generated/blog/atom.xml?rev=1748478&r1=1748477&r2=1748478&view=diff
==============================================================================
--- libcloud/site/trunk/generated/blog/atom.xml (original)
+++ libcloud/site/trunk/generated/blog/atom.xml Wed Jun 15 01:32:13 2016
@@ -5,7 +5,7 @@
<link href="https://libcloud.apache.org" rel="self" />
<link href="https://libcloud.apache.org" />
<id>https://libcloud.apache.org</id>
- <updated>2016-06-15T11:25:39+10:00</updated>
+ <updated>2016-06-15T11:31:00+10:00</updated>
<author>
<name>The Apache Software Foundation</name>
</author>
Added: libcloud/site/trunk/generated/blog/page/15/index.html
URL:
http://svn.apache.org/viewvc/libcloud/site/trunk/generated/blog/page/15/index.html?rev=1748478&view=auto
==============================================================================
--- libcloud/site/trunk/generated/blog/page/15/index.html (added)
+++ libcloud/site/trunk/generated/blog/page/15/index.html Wed Jun 15 01:32:13
2016
@@ -0,0 +1,191 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+
+
+ <meta name="author" content="The Apache Software Foundation">
+
+
+ <meta name="keywords" content="python,libcloud,cloud,cloud
computing,rackspace,amazon ec2,cloudfiles,openstack,cloudstack" />
+
+
+
+ <title>Blog | 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="Blog" property="og:title">
+
+
+
+
+
+
+
+ <meta content="website" property="og:type">
+
+
+
+ <meta content="https://libcloud.apache.org/blog/page/15/index.html"
property="og:url">
+
+
+
+
+
+ <link href='/assets/global-52715da7c55e2d86c5b5bfc2a8e7c73e.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/latest/"
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="row section page-content">
+ <div class="col-lg-8">
+ <h1>Blog</h1>
+
+<div class="posts">
+
+
+
+ <div class="post">
+
+ <h2><a href="/blog/2010/02/02/libcloud-0-2-0-released.html">Libcloud 0.2.0
released</a></h2>
+
+
+
+
+
+ <span class="post-date-author">By Paul Querna <span style="display:none">(<a
href="https://plus.google.com/114551141389167971892?rel=author">Google+</a>)</span>on
Feb 02, 2010</span>
+
+ <div class="post-content">
+ <p>Libcloud 0.2.0 has been released.</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/release%20announcement.html" rel="tag">release
announcement</a></p>
+ </div>
+ </div>
+</div>
+
+
+
+</div>
+
+<p class="navigation">
+
+
+
+
+
+ <span class="pull-right"><a href="/blog/page/14/">Next Page
»</a></span>
+
+
+
+</p>
+
+
+ </div>
+
+ <div class="col-lg-3 col-lg-offset-1">
+ <h2>Archive</h1>
+ <ul>
+ <li> <a href="/blog/archives/2016/04/"> April 2016</a>
(3)</li><li> <a href="/blog/archives/2016/02/"> February 2016</a>
(2)</li><li> <a href="/blog/archives/2016/01/"> January 2016</a>
(4)</li><li> <a href="/blog/archives/2015/12/"> December 2015</a>
(1)</li><li> <a href="/blog/archives/2015/11/"> November 2015</a>
(1)</li><li> <a href="/blog/archives/2015/10/"> October 2015</a>
(2)</li><li> <a href="/blog/archives/2015/08/"> August 2015</a>
(1)</li><li> <a href="/blog/archives/2015/03/"> March 2015</a>
(1)</li><li> <a href="/blog/archives/2015/02/"> February 2015</a>
(1)</li><li> <a href="/blog/archives/2014/12/"> December 2014</a>
(1)</li><li> <a href="/blog/archives/2014/11/"> November 2014</a>
(1)</li><li> <a href="/blog/archives/2014/07/"> July 2014</a>
(2)</li><li> <a href="/blog/archives/2014/06/"> June 2014</a>
(1)</li><li> <a href="/blog/archives/2014/05/"> May 2014</a>
(1)</li><li> <
a href="/blog/archives/2014/04/"> April 2014</a> (1)</li><li> <a
href="/blog/archives/2014/02/"> February 2014</a> (8)</li><li> <a
href="/blog/archives/2014/01/"> January 2014</a> (4)</li><li> <a
href="/blog/archives/2013/12/"> December 2013</a> (3)</li><li> <a
href="/blog/archives/2013/11/"> November 2013</a> (2)</li><li> <a
href="/blog/archives/2013/09/"> September 2013</a> (1)</li><li> <a
href="/blog/archives/2013/08/"> August 2013</a> (1)</li><li> <a
href="/blog/archives/2013/07/"> July 2013</a> (1)</li><li> <a
href="/blog/archives/2013/03/"> March 2013</a> (1)</li><li> <a
href="/blog/archives/2013/02/"> February 2013</a> (1)</li><li> <a
href="/blog/archives/2012/12/"> December 2012</a> (2)</li><li> <a
href="/blog/archives/2012/11/"> November 2012</a> (2)</li><li> <a
href="/blog/archives/2012/09/"> September 2012</a> (1)</li><li> <a
href="/blog/archives/2012/08/"> August 2012</a> (1)</li><li> <a
href="/blog/archives/2012/07/"> July 2012</a> (1)</li><li> <a
href="/blog/archives/2012/05/"> May 2012</a> (2)</li><li> <a
href="/blog/archives/2012/04/"> April 2012</a> (1)</li><li> <a
href="/blog/archives/2012/02/"> February 2012</a> (1)</li><li> <a
href="/blog/archives/2011/12/"> December 2011</a> (2)</li><li> <a
href="/blog/archives/2011/11/"> November 2011</a> (3)</li><li> <a
href="/blog/archives/2011/10/"> October 2011</a> (1)</li><li> <a
href="/blog/archives/2011/09/"> September 2011</a> (1)</li><li> <a
href="/blog/archives/2011/07/"> July 2011</a> (1)</li><li> <a
href="/blog/archives/2011/06/"> June 2011</a> (1)</li><li> <a
href="/blog/archives/2011/05/"> May 2011</a> (1)</li><li> <a
href="/blog/archives/2011/02/"> February 2011</a> (1)</li><li> <a
href="/blog/archives/2011/01/"> January 2011</a> (1)</li><li> <a
href="/blog/archives/2010/10/"> October 2010</a> (1)</li><li> <a
href="/blog/arch
ives/2010/05/"> May 2010</a> (1)</li><li> <a
href="/blog/archives/2010/02/"> February 2010</a> (1)</li>
+ </ul>
+ </div>
+</div>
+
+
+ <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 © 2009-2016 <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>
+</div>
+
+ </div>
+ </div>
+ </footer>
+
+ </div><!-- /.container -->
+
+ <!-- JavaScript -->
+ <script src='/assets/global-9c9298ad4670c6fcb2e40b5291d6c657.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>
Added: libcloud/site/trunk/generated/blog/tags/community.html
URL:
http://svn.apache.org/viewvc/libcloud/site/trunk/generated/blog/tags/community.html?rev=1748478&view=auto
==============================================================================
--- libcloud/site/trunk/generated/blog/tags/community.html (added)
+++ libcloud/site/trunk/generated/blog/tags/community.html Wed Jun 15 01:32:13
2016
@@ -0,0 +1,305 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+
+
+ <meta name="author" content="The Apache Software Foundation">
+
+
+ <meta name="keywords" content="python,libcloud,cloud,cloud
computing,rackspace,amazon ec2,cloudfiles,openstack,cloudstack" />
+
+
+
+ <title>Tag Archive | 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="Tag Archive" property="og:title">
+
+
+
+
+
+
+
+ <meta content="website" property="og:type">
+
+
+
+ <meta content="https://libcloud.apache.org/blog/tags/community.html"
property="og:url">
+
+
+
+
+
+ <link href='/assets/global-52715da7c55e2d86c5b5bfc2a8e7c73e.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/latest/"
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="row section page-content">
+ <div class="col-lg-8 col-lg-offset-2">
+ <h1>Tag: community</h1>
+
+
+
+
+ <div class="post">
+
+ <h2><a href="/blog/2016/04/12/help-wanted.html">Help Wanted</a></h2>
+
+
+
+
+
+ <span class="post-date-author">By Anthony Shaw on Apr 12, 2016</span>
+
+ <div class="post-content">
+ <h1>Help wanted - a summary of community contributions we really need your
help with</h1>
+
+<p>Libcloud has a fantastic community, we value our community contributions
and having a wide and varied experience and skillset.</p>
+
+<p>Recently people have been asking what else they can do to help that
isn't creating another driver, there's still plenty to do, here is a
summary of some contributions
+that would be really valuable and don't nessecarily require advanced
Python experience.</p>
+
+<h2>Skill set - documentation</h2>
+
+<ul>
+<li>Develop a 'writing a driver' from scratch tutorial that covers all
the steps to developing a new DNS, Storage, Compute etc driver.</li>
+<li>Improve the provider feature matrix, it's difficult to navigate and a
more screen friendly format needs to be found <a
href="http://libcloud.readthedocs.org/en/latest/supported_providers.html#provider-matrix">page</a></li>
+<li>Develop a "Libcloud in 30 minutes" tutorial that takes you
through installation, getting started and loading up your cloud and using the
driver.</li>
+</ul>
+
+<h2>Skill set - Web Authoring</h2>
+
+<p>Our website is written using Jekyll, Markdown and HTML. </p>
+
+<p><a href="http://svn.apache.org/viewvc/libcloud/site/trunk/">Source
Code</a></p>
+
+<p>We would really value</p>
+
+<ul>
+<li>Additional copy on the homepage explaining what the project does and
potential use cases</li>
+<li>Develop out the community pages</li>
+<li>Extend the Using pages to link to the documentation site</li>
+<li>Integrating video/GIF tutorials on the homepage</li>
+</ul>
+
+<h2>Skill set - Video tutorials</h2>
+
+<p>Complimenting our documentation with video tutorials (or GIF tutorials) on
basic concepts and how to use the library would be really useful for
beginners.</p>
+
+<h2>Skill set - Advanced Python development</h2>
+
+<h3>Compute driver</h3>
+
+<ul>
+<li>The base <code>Node</code> class is missing standard fields to describe
the CPU, Memory and Disk information for the Node. Propose, design and develop
an implementation for this problem.</li>
+<li>Update the Azure driver to support the ARM APIs.</li>
+<li>Solve the <code>create_node</code> problem - (this is a big one). The
driver classes are interchangable with the large and important exception of
<code>create_node</code>. Some drivers use implicitly required
<code>kwargs</code>, some require additional
+named keyword arguments, like the GCE driver requires the project name. This
means any code needs to switch the argument set depending on the driver.
+We need a method(s) in the base driver which is consistent, and can be used
across drivers. This would most likely use an Adapter or Proxy design pattern.
</li>
+</ul>
+
+<h3>Container driver</h3>
+
+<ul>
+<li>Extend the <a
href="http://libcloud.readthedocs.org/en/latest/container/drivers/kubernetes.html">Kubernetes</a>
driver to implement a <a
href="https://cloud.google.com/container-engine/">Google Container Engine</a>
driver</li>
+<li>Develop an Azure Container Service driver</li>
+<li>Test and extend the Docker driver</li>
+<li>Test and extend the Kubernetes driver for compatibility with the 1.2
release</li>
+</ul>
+
+<h3>Backup driver</h3>
+
+<ul>
+<li>Implement a driver using Amazon EBS snapshots</li>
+<li>Implement an Azure Backup driver</li>
+</ul>
+
+<h3>DNS driver</h3>
+
+<ul>
+<li>Implement an Azure <a
href="https://azure.microsoft.com/en-us/services/dns/">DNS</a> driver</li>
+</ul>
+
+<h2>Skill set - Testing and experience</h2>
+
+<p>We have 2 major changes that need testing against real life</p>
+
+<ul>
+<li><p>The <code>requests</code> implementation of our base HTTP classes, see
my <a
href="http://libcloud.apache.org/blog/2016/04/06/requests-support.html">previous
post</a> on details. This needs thoroughly testing against</p>
+
+<ul>
+<li>Compute classes, POST, GET methods</li>
+<li>AWS auth token signing</li>
+<li>Storage drivers using PUT and file streams</li>
+</ul></li>
+<li><p>The container base class promoting to a "stable" state</p>
+
+<ul>
+<li>Testing the docker driver against different implementations and auth
mechanisms</li>
+<li>Testing the Amazon ECS driver against real-world scenarios</li>
+</ul></li>
+</ul>
+
+<h2>Use case projects</h2>
+
+<p>There are a number of use cases that have been discussed but not
implemented in a public repository. These would
+demonstrate the power of libcloud.</p>
+
+<ul>
+<li>A storage migration utility - Our storage APIs are a great way </li>
+<li>A DNS management library - Configure your DNS providers in a DSL file and
have a command line utility to list records, zones and manage DNS</li>
+<li>A bind export utility - Our DNS driver supports <a
href="http://libcloud.readthedocs.org/en/latest/dns/api.html#libcloud.dns.base.DNSDriver.export_zone_to_bind_format">exporting
a zone to bind format</a>. Some cloud providers, such as Amazon Route53
don't offer this feature publically, so using libcloud would be
+a great use to allow people to export and backup data from Route53 or other
services to a secondary NS slave.</li>
+<li>A REST API for Libcloud - @tonybaloney has already started this using
Flask RESTful supporting GET methods, this needs to extended and developed. The
idea is
+to allow non-Python users to leverage libcloud via a RESTful API. The API will
be dynamically constructed using Pythons introspection capabilities. <a
href="https://github.com/tonybaloney/libcloud.api">See the project and fork
this to get started</a></li>
+</ul>
+
+<h2>OK, I'm ready - what now?</h2>
+
+<p>Depending on what level of experience you are at, you can learn more about
how to get started. You'll be pleased to learn that the libcloud project is
beginner friendly, we accept contributions from all levels as well as abiding
by the ASF code of ethics.</p>
+
+<h3>New to open-source?</h3>
+
+<p>Check out this <a
href="https://www.thinkful.com/learn/github-pull-request-tutorial/">tutorial on
creating your first PR</a> </p>
+
+<h3>New to Python?</h3>
+
+<p>Check out <a href="http://www.learnpython.org/">LearnPython.org</a> to cut
your teeth on some interactive tutorials.</p>
+
+<p>Specifically to develop on libcloud you will need some tools:</p>
+
+<ul>
+<li>A Python text editor like <a href="https://atom.io/">Atom</a>, <a
href="http://komodoide.com/">Komodo</a>, <a
href="https://www.jetbrains.com/pycharm/">PyCharm</a> or emacs.</li>
+<li>The Python 2.7 and 3.5 CPython interpreters installed</li>
+<li>Tox for running the unit tests (<code>easy_install tox</code>)</li>
+<li>Linting tools for checking PEP8 compliance, Flake8 (<code>easy_install
flake8</code>) and PyLint (<code>easy_install pylint</code>)</li>
+<li>Sphinx for building the docs</li>
+</ul>
+
+<h3>New to Apache?</h3>
+
+<p>Firstly, checkout <a href="http://www.theapacheway.com/">The Apache Way</a>
to understand the principles of the Apache community projects.</p>
+
+<p>If you're a committer on an Apache project, it means that you can
commit directly to the project's repository. For instance, with Apache
Libcloud committers are allowed to directly push commits into the git
repository. Non-Committers can
+raise pull-requests on the read-only mirror on <a
href="https://github.com/apache/libcloud">github.com/apache/libcloud</a>, one
of the committers will then use <code>git am</code> to merge your patch
directly into the ASF git repository on your behalf. You will still
+get contribution recognition in the git logs.</p>
+
+<h3>I'm a pro, come at me</h3>
+
+<ul>
+<li>Read our project style and best-practice guidance on <a
href="http://libcloud.readthedocs.org/en/latest/development.html#getting-started-with-contributing-to-libcloud">the
documentation site</a> for all of the things that are checked during the PR
process.</li>
+</ul>
+
+ </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/community.html" rel="tag">community</a></p>
+ </div>
+ </div>
+</div>
+
+
+
+
+ </div>
+</div>
+
+
+ <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 © 2009-2016 <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>
+</div>
+
+ </div>
+ </div>
+ </footer>
+
+ </div><!-- /.container -->
+
+ <!-- JavaScript -->
+ <script src='/assets/global-9c9298ad4670c6fcb2e40b5291d6c657.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>