You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ma...@apache.org on 2015/11/13 06:18:01 UTC

[02/21] incubator-geode git commit: Initial import of the new website

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/content/js/jquery.icheck.js
----------------------------------------------------------------------
diff --git a/gemfire-site/website/content/js/jquery.icheck.js b/gemfire-site/website/content/js/jquery.icheck.js
new file mode 100755
index 0000000..c92faa0
--- /dev/null
+++ b/gemfire-site/website/content/js/jquery.icheck.js
@@ -0,0 +1,397 @@
+/*!
+ * iCheck v0.8, http://git.io/uhUPMA
+ * =================================
+ * Powerful jQuery plugin for checkboxes and radio buttons customization
+ *
+ * (c) 2013 Damir Foy, http://damirfoy.com
+ * MIT Licensed
+ */
+
+(function($, _iCheck, _checkbox, _radio, _checked, _disabled, _type, _click, _touch, _add, _remove, _cursor) {
+
+  // Create a plugin
+  $.fn[_iCheck] = function(options, fire) {
+
+    // Cached vars
+    var user = navigator.userAgent,
+      ios = /ipad|iphone|ipod/i.test(user),
+      handle = ':' + _checkbox + ', :' + _radio;
+
+    // Check if we should operate with some method
+    if (/^(check|uncheck|toggle|disable|enable|update|destroy)$/.test(options)) {
+
+      // Find checkboxes and radio buttons
+      return this.each(function() {
+        var self = $(this),
+          tree = self.is(handle) ? self : self.find(handle);
+
+        tree.each(function() {
+          self = $(this);
+
+          if (options == 'destroy') {
+            tidy(self, 'ifDestroyed');
+          } else {
+            operate(self, true, options);
+          };
+
+          // Fire method's callback
+          if ($.isFunction(fire)) {
+            fire();
+          };
+        });
+      });
+
+    // Customization
+    } else if (typeof options == 'object' || !options) {
+
+      //  Check if any options were passed
+      var settings = $.extend({
+          checkedClass: _checked,
+          disabledClass: _disabled,
+          labelHover: true
+        }, options),
+
+        selector = settings.handle,
+        hoverClass = settings.hoverClass || 'hover',
+        focusClass = settings.focusClass || 'focus',
+        activeClass = settings.activeClass || 'active',
+        labelHover = !!settings.labelHover,
+        labelHoverClass = settings.labelHoverClass || 'hover',
+
+        // Setup clickable area
+        area = ('' + settings.increaseArea).replace('%', '') | 0;
+
+      // Selector limit
+      if (selector == _checkbox || selector == _radio) {
+        handle = ':' + selector;
+      };
+
+      // Clickable area limit
+      if (area < -50) {
+        area = -50;
+      };
+
+      // Walk around the selector
+      return this.each(function() {
+        var self = $(this),
+          tree = self.is(handle) ? self : self.find(handle);
+
+        tree.each(function() {
+          self = $(this);
+
+          // If already customized
+          tidy(self);
+
+          var node = this,
+            id = node.id,
+
+            // Layer styles
+            offset = -area + '%',
+            size = 100 + (area * 2) + '%',
+            layer = {
+              position: 'absolute',
+              top: offset,
+              left: offset,
+              display: 'block',
+              width: size,
+              height: size,
+              margin: 0,
+              padding: 0,
+              background: '#fff',
+              border: 0,
+              opacity: 0
+            },
+
+            // Choose how to hide input
+            hide = ios || /android|blackberry|windows phone|opera mini/i.test(user) ? {
+              position: 'absolute',
+              visibility: 'hidden'
+            } : area ? layer : {
+              position: 'absolute',
+              opacity: 0
+            },
+
+            // Get proper class
+            className = node[_type] == _checkbox ? settings.checkboxClass || 'i' + _checkbox : settings.radioClass || 'i' + _radio,
+
+            // Find assigned labels
+            label = $('label[for="' + id + '"]').add(self.closest('label')),
+
+            // Wrap input
+            parent = self.wrap('<div class="' + className + '"/>').trigger('ifCreated').parent().append(settings.insert),
+
+            // Layer addition
+            helper = $('<ins class="' + _iCheck + '-helper"/>').css(layer).appendTo(parent);
+
+          // Finalize customization
+          self.data(_iCheck, {o: settings, s: self.attr('style')}).css(hide);
+          !!settings.inheritClass && parent[_add](node.className);
+          !!settings.inheritID && id && parent.attr('id', _iCheck + '-' + id);
+          parent.css('position') == 'static' && parent.css('position', 'relative');
+          operate(self, true, 'update');
+
+          // Label events
+          if (label.length) {
+            label.on(_click + '.i mouseenter.i mouseleave.i ' + _touch, function(event) {
+              var type = event[_type],
+                item = $(this);
+
+              // Do nothing if input is disabled
+              if (!node[_disabled]) {
+
+                // Click
+                if (type == _click) {
+                  operate(self, false, true);
+
+                // Hover state
+                } else if (labelHover) {
+                  if (/ve|nd/.test(type)) {
+                    // mouseleave|touchend
+                    parent[_remove](hoverClass);
+                    item[_remove](labelHoverClass);
+                  } else {
+                    parent[_add](hoverClass);
+                    item[_add](labelHoverClass);
+                  };
+                };
+
+                if (ios) {
+                  event.stopPropagation();
+                } else {
+                  return false;
+                };
+              };
+            });
+          };
+
+          // Input events
+          self.on(_click + '.i focus.i blur.i keyup.i keydown.i keypress.i', function(event) {
+            var type = event[_type],
+              key = event.keyCode;
+
+            // Click
+            if (type == _click) {
+              return false;
+
+            // Keydown
+            } else if (type == 'keydown' && key == 32) {
+              if (!(node[_type] == _radio && node[_checked])) {
+                if (node[_checked]) {
+                  off(self, _checked);
+                } else {
+                  on(self, _checked);
+                };
+              };
+
+              return false;
+
+            // Keyup
+            } else if (type == 'keyup' && node[_type] == _radio) {
+              !node[_checked] && on(self, _checked);
+
+            // Focus/blur
+            } else if (/us|ur/.test(type)) {
+              parent[type == 'blur' ? _remove : _add](focusClass);
+            };
+          });
+
+          // Helper events
+          helper.on(_click + ' mousedown mouseup mouseover mouseout ' + _touch, function(event) {
+            var type = event[_type],
+
+              // mousedown|mouseup
+              toggle = /wn|up/.test(type) ? activeClass : hoverClass;
+
+            // Do nothing if input is disabled
+            if (!node[_disabled]) {
+
+              // Click
+              if (type == _click) {
+                operate(self, false, true);
+
+              // Active and hover states
+              } else {
+
+                // State is on
+                if (/wn|er|in/.test(type)) {
+                  // mousedown|mouseover|touchbegin
+                  parent[_add](toggle);
+
+                // State is off
+                } else {
+                  parent[_remove](toggle + ' ' + activeClass);
+                };
+
+                // Label hover
+                if (label.length && labelHover && toggle == hoverClass) {
+
+                  // mouseout|touchend
+                  label[/ut|nd/.test(type) ? _remove : _add](labelHoverClass);
+                };
+              };
+
+              if (ios) {
+                event.stopPropagation();
+              } else {
+                return false;
+              };
+            };
+          });
+        });
+      });
+    } else {
+      return this;
+    };
+  };
+
+  // Do something with inputs
+  function operate(input, direct, method) {
+    var node = input[0];
+
+      // disable|enable
+      state = /ble/.test(method) ? _disabled : _checked,
+      active = method == 'update' ? {checked: node[_checked], disabled: node[_disabled]} : node[state];
+
+    // Check and disable
+    if (/^ch|di/.test(method) && !active) {
+      on(input, state);
+
+    // Uncheck and enable
+    } else if (/^un|en/.test(method) && active) {
+      off(input, state);
+
+    // Update
+    } else if (method == 'update') {
+
+      // Both checked and disabled states
+      for (var state in active) {
+        if (active[state]) {
+          on(input, state, true);
+        } else {
+          off(input, state, true);
+        };
+      };
+
+    } else if (!direct || method == 'toggle') {
+
+      // Helper or label was clicked
+      if (!direct) {
+        input.trigger('ifClicked');
+      };
+
+      // Toggle checked state
+      if (active) {
+        if (node[_type] !== _radio) {
+          off(input, state);
+        };
+      } else {
+        on(input, state);
+      };
+    };
+  };
+
+  // Set checked or disabled state
+  function on(input, state, keep) {
+    var node = input[0],
+      parent = input.parent(),
+      label = input.parent().siblings(),
+      remove = state == _disabled ? 'enabled' : 'un' + _checked,
+      regular = option(input, remove + capitalize(node[_type])),
+      specific = option(input, state + capitalize(node[_type]));
+
+    // Prevent unnecessary actions
+    if (node[state] !== true && !keep) {
+
+      // Toggle state
+      node[state] = true;
+
+      // Trigger callbacks
+      input.trigger('ifChanged').trigger('if' + capitalize(state));
+
+      // Toggle assigned radio buttons
+      if (state == _checked && node[_type] == _radio && node.name) {
+        var form = input.closest('form'),
+          stack = 'input[name="' + node.name + '"]';
+
+        stack = form.length ? form.find(stack) : $(stack);
+
+        stack.each(function() {
+          if (this !== node && $(this).data(_iCheck)) {
+            off($(this), state);
+          };
+        });
+      };
+    };
+
+    // Add proper cursor
+    if (node[_disabled] && !!option(input, _cursor, true)) {
+      parent.find('.' + _iCheck + '-helper').css(_cursor, 'default');
+    };
+
+    // Add state class
+    parent[_add](specific || option(input, state));
+    label[_add](specific || option(input, state));
+
+    // Remove regular state class
+    parent[_remove](regular || option(input, remove) || '');
+    label[_remove](regular || option(input, remove) || '');
+  };
+
+  // Remove checked or disabled state
+  function off(input, state, keep) {
+    var node = input[0],
+      parent = input.parent(),
+      label = input.parent().siblings(),
+      callback = state == _disabled ? 'enabled' : 'un' + _checked,
+      regular = option(input, callback + capitalize(node[_type])),
+      specific = option(input, state + capitalize(node[_type]));
+
+    // Prevent unnecessary actions
+    if (node[state] !== false && !keep) {
+
+      // Toggle state
+      node[state] = false;
+
+      // Trigger callbacks
+      input.trigger('ifChanged').trigger('if' + capitalize(callback));
+    };
+
+    // Add proper cursor
+    if (!node[_disabled] && !!option(input, _cursor, true)) {
+      parent.find('.' + _iCheck + '-helper').css(_cursor, 'pointer');
+    };
+
+    // Remove state class
+    parent[_remove](specific || option(input, state) || '');
+    label[_remove](specific || option(input, state) || '');
+
+    // Add regular state class
+    parent[_add](regular || option(input, callback));
+    label[_add](regular || option(input, callback));
+  };
+
+  // Remove all traces of iCheck
+  function tidy(input, callback) {
+    if (input.data(_iCheck)) {
+
+      // Remove everything except input
+      input.parent().html(input.attr('style', input.data(_iCheck).s || '').trigger(callback || ''));
+
+      // Unbind events
+      input.off('.i').unwrap();
+      $('label[for="' + input[0].id + '"]').add(input.closest('label')).off('.i');
+    };
+  };
+
+  // Get some option
+  function option(input, state, regular) {
+    if (input.data(_iCheck)) {
+      return input.data(_iCheck).o[state + (regular ? '' : 'Class')];
+    };
+  };
+
+  // Capitalize some string
+  function capitalize(string) {
+    return string.charAt(0).toUpperCase() + string.slice(1);
+  };
+})(jQuery, 'iCheck', 'checkbox', 'radio', 'checked', 'disabled', 'type', 'click', 'touchbegin.i touchend.i', 'addClass', 'removeClass', 'cursor');

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/content/js/respond.min.js
----------------------------------------------------------------------
diff --git a/gemfire-site/website/content/js/respond.min.js b/gemfire-site/website/content/js/respond.min.js
new file mode 100755
index 0000000..8353e99
--- /dev/null
+++ b/gemfire-site/website/content/js/respond.min.js
@@ -0,0 +1,6 @@
+/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */
+/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */
+window.matchMedia=window.matchMedia||function(a){"use strict";var c,d=a.documentElement,e=d.firstElementChild||d.firstChild,f=a.createElement("body"),g=a.createElement("div");return g.id="mq-test-1",g.style.cssText="position:absolute;top:-100em",f.style.background="none",f.appendChild(g),function(a){return g.innerHTML='&shy;<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',d.insertBefore(f,e),c=42===g.offsetWidth,d.removeChild(f),{matches:c,media:a}}}(document);
+
+/*! Respond.js v1.1.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs  */
+(function(a){"use strict";function x(){u(!0)}var b={};if(a.respond=b,b.update=function(){},b.mediaQueriesSupported=a.matchMedia&&a.matchMedia("only all").matches,!b.mediaQueriesSupported){var q,r,t,c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=c.getElementsByTagName("base")[0],l=j.getElementsByTagName("link"),m=[],n=function(){for(var b=0;l.length>b;b++){var c=l[b],d=c.href,e=c.media,f=c.rel&&"stylesheet"===c.rel.toLowerCase();d&&f&&!h[d]&&(c.styleSheet&&c.styleSheet.rawCssText?(p(c.styleSheet.rawCssText,d,e),h[d]=!0):(!/^([a-zA-Z:]*\/\/)/.test(d)&&!k||d.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&m.push({href:d,media:e}))}o()},o=function(){if(m.length){var b=m.shift();v(b.href,function(c){p(c,b.href,b.media),h[b.href]=!0,a.setTimeout(function(){o()},0)})}},p=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),g=d&&d.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(/
 (url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c;b.length&&(b+="/"),i&&(g=1);for(var j=0;g>j;j++){var k,l,m,n;i?(k=c,f.push(h(a))):(k=d[j].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),m=k.split(","),n=m.length;for(var o=0;n>o;o++)l=m[o],e.push({media:l.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:f.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},s=function(){var a,b=c.createElement("div"),e=c.body,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",e||(e=f=c.createElement("body"),e.style.background="none"),e.appendChild(b),d.insertBefore(e,d.firstChild),a=b.offsetWidth,f?d.removeChild(e):e.removeChild(b),a=t=parseFloat(a)},u=function(b){var h="clientWidth",k=d[h],m="CSS1Compat"===c.c
 ompatMode&&k||c.body[h]||k,n={},o=l[l.length-1],p=(new Date).getTime();if(b&&q&&i>p-q)return a.clearTimeout(r),r=a.setTimeout(u,i),void 0;q=p;for(var v in e)if(e.hasOwnProperty(v)){var w=e[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?t||s():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?t||s():1)),w.hasquery&&(z&&A||!(z||m>=x)||!(A||y>=m))||(n[w.media]||(n[w.media]=[]),n[w.media].push(f[w.rules]))}for(var C in g)g.hasOwnProperty(C)&&g[C]&&g[C].parentNode===j&&j.removeChild(g[C]);for(var D in n)if(n.hasOwnProperty(D)){var E=c.createElement("style"),F=n[D].join("\n");E.type="text/css",E.media=D,j.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(c.createTextNode(F)),g.push(E)}},v=function(a,b){var c=w();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},w=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new
  a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}();n(),b.update=n,a.addEventListener?a.addEventListener("resize",x,!1):a.attachEvent&&a.attachEvent("onresize",x)}})(this);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/content/js/usergrid-site.js
----------------------------------------------------------------------
diff --git a/gemfire-site/website/content/js/usergrid-site.js b/gemfire-site/website/content/js/usergrid-site.js
new file mode 100644
index 0000000..1a513fa
--- /dev/null
+++ b/gemfire-site/website/content/js/usergrid-site.js
@@ -0,0 +1,50 @@
+var start = 40;
+var end = 210;
+
+function setHeaderForScroll(scrollTop) {
+  if ( ($( window ).width() > 768) && ($('header.secondary').length == 0) ) {
+
+    if(scrollTop > start) {
+        opacity = (Math.floor(scrollTop) - start)/end;
+        //console.log(opacity);
+        percent = Math.min(opacity, 1)
+        red = Math.floor(36 + (52-36) * percent);
+        green = Math.floor(129 - (129-73) * percent);
+        blue = Math.floor(166 - (166-94) * percent);
+        blur = Math.floor(2 * percent);
+    } else {
+        opacity = 0;
+        red = 36;
+        green = 129;
+        blue = 166;
+        blur = 0;
+    }
+    $("#home-logo").css("opacity", opacity);
+    $("header").css("box-shadow", "0px 1px "+blur+"px rgb("+red+','+green+','+blue+")");
+  } else {
+    $("#home-logo").css("opacity", 1);
+    $("header").css("box-shadow", "0px 1px 2px rgb(52,73,94)");
+  }
+}
+
+$(document).ready(function() {
+
+    $('table').addClass('table');
+
+    // Detect initial scroll on page load
+    setHeaderForScroll($("body").scrollTop());
+
+    //reduce the opacity of the banner if the page is scrolled.
+    $(window).scroll(function () {
+      setHeaderForScroll($("body").scrollTop());
+    });
+
+    // $(".navbar-toggle").bind("click", function(){
+    //     if($(".collapse").hasClass("collapse"))
+    //         $("#home-logo").css("opacity", 100);
+    //     else
+    //         $("#home-logo").css("opacity", 0);
+    // });
+  
+
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/content/releases/index.html
----------------------------------------------------------------------
diff --git a/gemfire-site/website/content/releases/index.html b/gemfire-site/website/content/releases/index.html
new file mode 100644
index 0000000..15b460f
--- /dev/null
+++ b/gemfire-site/website/content/releases/index.html
@@ -0,0 +1,65 @@
+<section class="bf-tagline">
+    <div class="container">
+    	<div class="row">
+    	    <div class="col-md-12">
+    	    	<h2>Apache Geode Releases</h2>
+			</div>
+		</div>
+	</div>
+</section>
+
+<section class="bf-releases">
+    <div class="container">
+    	<div class="row">
+    	    <div class="col-md-12" id="events">
+    	    	<h2 class="icns-download"><span>Releases</span></h2>
+			</div>
+		</div>
+		</br>
+		<div class="row">
+    		<div class="col-md-9 done">
+    			<p>
+				Releases of Geode are made available to the general public at no charge, under the <a href="http://apache.org/licenses/">Apache License</a>, in both binary and source distributions.
+				</p>
+				<p>
+        <ul>
+          <li>Alpha 1.0 Releases - Geode 1.0.0-ALPHA - <strong>N/A</strong></li>
+          <li>General Availability (GA) Releases - Geode 1.0.0 - <strong>N/A</strong></li>
+        </ul>
+        </p>
+        <p>
+					Project releases are approved by vote of the Apache Geode Podling Project Management Committee (PPMC) and Apache Incubator (PMC). Support for a release is provided by project volunteers on the project <a href="http://geode.incubator.apache.org/community/#mailing-lists">mailing lists</a>. Bugs found in a release may be discussed on the list and reported through the <a href="https://issues.apache.org/jira/browse/GEODE">issue tracker</a>. The user mailing list and issue tracker are the only support options hosted by the Apache Geode project.
+				</p>
+				<p>
+					Note: When downloading from a mirror, please be sure to verify that checksums and signatures are correct. To do so, use the checksum and signature files from the main Apache site at <a href="https://dist.apache.org/repos/dist/release/geode/">https://dist.apache.org/repos/dist/release/geode/</a>. Find here the KEYS file, which contains all OpenPGP keys we use to sign releases here: <a href="https://dist.apache.org/repos/dist/release/geode/KEYS">https://dist.apache.org/repos/dist/release/geode/KEYS</a>
+				</p>
+				<p>
+					The PGP signatures can be verified using PGP or GPG. First download the <a href="https://dist.apache.org/repos/dist/release/geode/KEYS">KEYS</a> as well as the <a href="https://dist.apache.org/repos/dist/release/geode/geode-1/v1.0.0/">asc signature</a> file for the particular distribution. Then verify the signatures using:
+				</p>
+				<p>
+       				% pgpk -a KEYS
+					</br></br>
+        			% pgpv ${filename}.tar.gz.asc
+        			</br></br>
+    				or
+    				</br></br>
+        			% pgp -ka KEYS
+        			</br></br>
+        			% pgp ${filename}.tar.gz.asc
+        			</br></br>
+    				or
+    				</br></br>
+        			% gpg --import KEYS
+        			</br></br>
+        			% gpg --verify ${filename}.tar.gz.asc
+        			</br></br>
+        		</p>
+    			<p>
+					Alternatively, you can verify the MD5 signature on the files. A Unix program called md5 or md5sum is included in many Unix distributions. It is also available as part of <a href="http://www.gnu.org/software/textutils/textutils.html">GNU Textutils</a>. Windows users can get binary md5 programs from <a href="http://www.fourmilab.ch/md5/">here</a>, <a href="http://www.pc-tools.net/win32/md5sums/">here</a>, or <a href="http://www.slavasoft.com/fsum/">here</a>.
+				<p>
+					If you want to build directly from the sources, please check the <a href="/docs/getting-up-and-running-locally/">Project Docs</a>.
+				</p>
+			</div>
+		</div>
+	</div>
+</section>

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/content/static/github-btn.html
----------------------------------------------------------------------
diff --git a/gemfire-site/website/content/static/github-btn.html b/gemfire-site/website/content/static/github-btn.html
new file mode 100644
index 0000000..76a7c55
--- /dev/null
+++ b/gemfire-site/website/content/static/github-btn.html
@@ -0,0 +1,2 @@
+
+<html><body><style type="text/css">body{padding:0;margin:0;font:bold 11px/14px "Helvetica Neue",Helvetica,Arial,sans-serif;text-rendering:optimizeLegibility;overflow:hidden}.github-btn{height:20px;overflow:hidden}.gh-btn,.gh-count,.gh-ico{float:left}.gh-btn,.gh-count{padding:2px 5px 2px 4px;color:#555;text-decoration:none;text-shadow:0 1px 0 #fff;white-space:nowrap;cursor:pointer;border-radius:3px}.gh-btn{background-color:#e6e6e6;background-image:-webkit-gradient(linear,0 0,0 100%,from(#fafafa),to(#eaeaea));background-image:-webkit-linear-gradient(#fafafa,#eaeaea);background-image:-moz-linear-gradient(top,#fafafa,#eaeaea);background-image:-ms-linear-gradient(#fafafa,#eaeaea);background-image:-o-linear-gradient(#fafafa,#eaeaea);background-image:linear-gradient(#fafafa,#eaeaea);background-repeat:no-repeat;border:1px solid #d4d4d4;border-bottom-color:#bcbcbc}.gh-btn:hover,.gh-btn:focus,.gh-btn:active{color:#fff;text-decoration:none;text-shadow:0 -1px 0 rgba(0,0,0,.25);border-color:#518
 cc6 #518cc6 #2a65a0;background-color:#3072b3}.gh-btn:hover,.gh-btn:focus{background-image:-webkit-gradient(linear,0 0,0 100%,from(#599bdc),to(#3072b3));background-image:-webkit-linear-gradient(#599bdc,#3072b3);background-image:-moz-linear-gradient(top,#599bdc,#3072b3);background-image:-ms-linear-gradient(#599bdc,#3072b3);background-image:-o-linear-gradient(#599bdc,#3072b3);background-image:linear-gradient(#599bdc,#3072b3)}.gh-btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 5px rgba(0,0,0,.10);-moz-box-shadow:inset 0 2px 5px rgba(0,0,0,.10);box-shadow:inset 0 2px 5px rgba(0,0,0,.10)}.gh-ico{width:14px;height:15px;margin-top:-1px;margin-right:4px;vertical-align:middle;background-image:url(data:image/png;base64,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);background-repeat:no-repeat;background-position:0 0}.gh-btn:hover .gh-ico,.gh-btn:focus .gh-ico,.gh-btn:active .gh-ico{background-position:-25px 0}.gh-count{position:relative;display:none;margin-left:4px;background-color:#fafafa;border:1px solid #d4d4d4}.gh-count:hover,.gh-count:focus{color:#4183c4}.gh-count:before,.gh-count:after{content:' ';position:absolute;display:inline-block;width:0;height:0;border-color:transparent;border-style:solid}.gh-count:before{top:50%;left:-3px;margin-top:-4px;
 border-width:4px 4px 4px 0;border-right-color:#fafafa}.gh-count:after{top:50%;left:-4px;z-index:-1;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#d4d4d4}.github-btn-large{height:30px}.github-btn-large .gh-btn,.github-btn-large .gh-count{padding:3px 10px 3px 8px;font-size:16px;line-height:22px;border-radius:4px}.github-btn-large .gh-ico{width:22px;height:23px;background-position:0 -20px}.github-btn-large .gh-btn:hover .gh-ico,.github-btn-large .gh-btn:focus .gh-ico,.github-btn-large .gh-btn:active .gh-ico{background-position:-25px -20px}.github-btn-large .gh-count{margin-left:6px}.github-btn-large .gh-count:before{left:-5px;margin-top:-6px;border-width:6px 6px 6px 0}.github-btn-large .gh-count:after{left:-6px;margin-top:-7px;border-width:7px 7px 7px 0}@media(-moz-min-device-pixel-ratio:2),(-o-min-device-pixel-ratio:2/1),(-webkit-min-device-pixel-ratio:2),(min-device-pixel-ratio:2){.gh-ico{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABaCAQAA
 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);background-size:50px 45px}}</style> <span class=github-btn id=github-btn> <a class=gh-btn id=gh-btn href="#" target=_blank> <span 
 class=gh-ico></span> <span class=gh-text id=gh-text></span> </a> <a class=gh-count id=gh-count href="#" target=_blank></a> </span> <script type="text/javascript">var params=function(){var d=[],c;var a=window.location.href.slice(window.location.href.indexOf("?")+1).split("&");for(var b=0;b<a.length;b++){c=a[b].split("=");d.push(c[0]);d[c[0]]=c[1]}return d}();var user=params.user,repo=params.repo,type=params.type,count=params.count,size=params.size,head=document.getElementsByTagName("head")[0],button=document.getElementById("gh-btn"),mainButton=document.getElementById("github-btn"),text=document.getElementById("gh-text"),counter=document.getElementById("gh-count");function addCommas(a){return String(a).replace(/(\d)(?=(\d{3})+$)/g,"$1,")}function jsonp(b){var a=document.createElement("script");a.src=b+"?callback=callback";head.insertBefore(a,head.firstChild)}function callback(a){if(type=="watch"){counter.innerHTML=addCommas(a.data.watchers)}else{if(type=="fork"){counter.innerHTML=addC
 ommas(a.data.forks)}else{if(type=="follow"){counter.innerHTML=addCommas(a.data.followers)}}}if(count=="true"){counter.style.display="block"}}button.href="https://github.com/"+user+"/"+repo+"/";if(type=="watch"){mainButton.className+=" github-watchers";text.innerHTML="Star";counter.href="https://github.com/"+user+"/"+repo+"/stargazers"}else{if(type=="fork"){mainButton.className+=" github-forks";text.innerHTML="Fork";counter.href="https://github.com/"+user+"/"+repo+"/network"}else{if(type=="follow"){mainButton.className+=" github-me";text.innerHTML="Follow @"+user;button.href="https://github.com/"+user;counter.href="https://github.com/"+user+"/followers"}}}if(size=="large"){mainButton.className+=" github-btn-large"}if(type=="follow"){jsonp("https://api.github.com/users/"+user)}else{jsonp("https://api.github.com/repos/"+user+"/"+repo)};</script></body></html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/layouts/community.html
----------------------------------------------------------------------
diff --git a/gemfire-site/website/layouts/community.html b/gemfire-site/website/layouts/community.html
new file mode 100644
index 0000000..1111028
--- /dev/null
+++ b/gemfire-site/website/layouts/community.html
@@ -0,0 +1 @@
+<%= render 'default', :community => true, :content => @content, :item => @item %>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/layouts/default.html
----------------------------------------------------------------------
diff --git a/gemfire-site/website/layouts/default.html b/gemfire-site/website/layouts/default.html
new file mode 100644
index 0000000..5e5ba68
--- /dev/null
+++ b/gemfire-site/website/layouts/default.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<%= render 'header', {:docs => @docs, :community => @community} %>
+
+<% if @docs %>
+<div class="container bf-docs-container">
+    <div class="row">
+
+        <div class="col-md-9 main-article" role="main">
+            <div class="page-article">
+                <div class="page-header">
+                    <h1><%= @item[:title] %></h1>
+                    <!-- TODO: reenable this when we sync SVN to GitHub
+                  <small><a target="_blank" href="https://github.com/geode/website/blob/master/content<%= @item.path[0..-2] %>.md">contribute to this article on github</a></small>
+                    -->
+                </div>
+                <%= @content %>
+            </div>
+        </div>
+    </div>
+    <div class="row">
+        <div class="col-md-3"></div>
+        <div class="col-md-9">
+            <div class="github-callout">
+                <strong>Questions?</strong> Please do <a href="/community">ask on the mailing-lists</a>!<br/>
+                <!--
+                <strong>Found an error?</strong> We’d greatly appreciate a pull request about <a target="_blank" href="https://github.com/geode/website/blob/master/content<%= @item.path[0..-2] %>.md">this article on github</a>.</div>
+                -->
+            </div>
+        </div>
+    </div>
+</div>
+<% else %>
+
+<%= @content %>
+
+<% end %>
+
+<%= render 'footer' %>
+
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/layouts/docs.html
----------------------------------------------------------------------
diff --git a/gemfire-site/website/layouts/docs.html b/gemfire-site/website/layouts/docs.html
new file mode 100644
index 0000000..119b865
--- /dev/null
+++ b/gemfire-site/website/layouts/docs.html
@@ -0,0 +1 @@
+<%= render 'default', :docs => true, :content => @content, :item => @item %>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/layouts/footer.html
----------------------------------------------------------------------
diff --git a/gemfire-site/website/layouts/footer.html b/gemfire-site/website/layouts/footer.html
new file mode 100644
index 0000000..38fcd6c
--- /dev/null
+++ b/gemfire-site/website/layouts/footer.html
@@ -0,0 +1,94 @@
+<footer class="bf-footer" role="contentinfo">
+    <div class="container">
+        <div class="row">
+            <div class="col-md-2">
+                <ul class="nav nav-list">
+                    <li class="nav-header"><a href="/">Home</a></li>
+                    <li class="nav-header"><a href="/community/">Community</a></li>
+                        <li><a href="/community/#events">Events</a></li>
+                        <li><a href="/community/#mailing-lists">Mailing Lists</a></li>
+                        <li><a href="/community/#deployments">Deployments</a></li>
+                        <!-- <li><a href="/community/#committers">Commiters</a></li> -->
+                </ul>
+            </div>
+            <div class="col-md-2">
+                <ul class="nav nav-list">
+                    <li class="nav-header"><a href="http://github.com/apache/incubator-geode" target="_blank">Code</a></li>
+                    <li><a href="https://cwiki.apache.org/confluence/display/GEODE/Project+Proposals+and+Specifications" target="_blank">Specifications</a></li>
+                    <li><a href="https://cwiki.apache.org/confluence/display/GEODE/Geode+Internal+Architecture" target="_blank">Internal Architecture</a></li>
+                    <li><a href="https://cwiki.apache.org/confluence/display/GEODE/Writing+tests" target="_blank">Writing Tests</a></li>
+                    <li><a href="https://cwiki.apache.org/confluence/display/GEODE/Criteria+for+Code+Submissions" target="_blank">Code Submissions</a></li>
+                </ul>
+            </div>
+            <div class="col-md-2">
+                <ul class="nav nav-list">
+                    <li class="nav-header">Resources</li>
+                    <li><a href="http://github.com/apache/geode-incubator" target="_blank">GitHub Code</a></li>
+                    <li><a href="docs" target="_blank">Docs</a></li>
+                    <li><a href="https://issues.apache.org/jira/browse/GEODE" target="_blank">JIRA Bug Tracker</a></li>
+                    <li><a href="http://stackoverflow.com/search?q=Apache%20Geode" target="_blank">StackOverflow</a></li>
+                    <li><a href="/community/#live">Live Chat</a></li>
+                    <li><a href="https://twitter.com/apachegeode" target="_blank">Twitter</a></li>
+                    <li><a href="https://cwiki.apache.org/confluence/display/GEODE/Index#Index-Geodein5minutesGeodein5minutes" target="_blank">Geode in 5 minutes</a></li>
+                    <li><a href="https://cwiki.apache.org/confluence/display/GEODE/How+to+Contribute" target="_blank">How to Contribute</a></li>
+                    <li><a href="https://cwiki.apache.org/confluence/display/GEODE/Application+Development" target="_blank">Application Development</a></li>
+
+                    <li><a href="https://cwiki.apache.org/confluence/display/GEODE/Technology+FAQ" target="_blank">FAQ</a></li>
+
+                </ul>
+            </div>
+            <div class="col-md-2">
+                <ul class="nav nav-list">
+                    <li class="nav-header">Apache</li>
+                    <li><a href="http://www.apache.org/licenses/" target="_blank">License</a></li>
+                    <li><a href="http://www.apache.org/foundation/sponsorship.html" target="_blank">Sponsorship</a></li>
+                    <li><a href="http://www.apache.org/foundation/thanks.html" target="_blank">Thanks</a></li>
+                    <li><a href="http://www.apache.org/security/">Security</a></li>
+                    <li><a href="http://www.apache.org/" target="_blank">Apache Foundation</a></li>
+                </ul>
+            </div>
+            <div class="col-md-4">
+              <a class="twitter-timeline" href="https://twitter.com/search?q=ApacheGeode" height="450px" data-widget-id="662798762926997504">Tweets about Apache Geode</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 class="col-md-4">
+                <div class="input-group form-search">
+                    <input type="text" class="form-control search-query">
+                    <span class="input-group-btn">
+                        <button type="submit" class="btn btn-primary" data-type="last">Search</button>
+                    </span>
+                </div>
+            </div> -->
+        </div>
+        <div class="row">
+            <div id="copyright">
+                <img src="/img/egg-logo.png" /><br/><br/>
+                <p>
+                Apache Geode is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
+                </p>
+                <p>Copyright © 2015 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.<br>
+                Apache, Apache Geode (incubating), and the Apache feather logos are trademarks of The Apache Software Foundation.</p>
+                <p class="credits">Site designed & assembled with love by <a href="https://github.com/ryuneeee">@ryuneeee</a> + <a href="https://github.com/realbeast">@realbeast</a> + <a href="https://twitter.com/timanglade">@timanglade</a> + <a href="https://twitter.com/snoopdave">@snoopdave</a> for Apache Usergrid.</p>
+                <p>Modified for Apache Geode by <a href="https://twitter.com/william_markito">@william_markito</a>.</p>
+            </div>
+        </div>
+    </div>
+</footer>
+
+<script type="text/javascript" src="/js/head.js"></script>
+<script type="text/javascript">
+    head.js("/js/jquery-1.10.1.min.js", "/js/bootstrap.min.js", "/js/usergrid-site.js");
+</script>
+<!-- update the code below for google analytics -->
+<!--
+ <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-45815079-1', 'apache.org');
+  ga('send', 'pageview');
+
+</script> -->

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/layouts/header.html
----------------------------------------------------------------------
diff --git a/gemfire-site/website/layouts/header.html b/gemfire-site/website/layouts/header.html
new file mode 100644
index 0000000..2226c9c
--- /dev/null
+++ b/gemfire-site/website/layouts/header.html
@@ -0,0 +1,228 @@
+<head>
+    <meta charset="utf-8">
+    <title>Apache Geode (incubating) — <%= @item[:title] %></title>
+    <meta http-equiv="x-ua-compatible" content="ie=edge" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
+    <meta name="keywords" content="Apache Geode, Geode, GemFire, In-memory, IMDB, IMDG">
+    <meta name="description" content="" />
+    <meta property="og:title" content="Apache Geode (incubating)" />
+    <meta property="og:description" content="Apache Geode is an open source, distributed, in-memory database for scale-out applications." />
+    <!-- Loading Typekit -->
+    <script type="text/javascript" src="//use.typekit.net/ddl7izx.js"></script>
+    <script type="text/javascript">try{Typekit.load();}catch(e){}</script>
+    <!-- Loading Bootstrap -->
+    <link href="/bootstrap/bootstrap.min.css" rel="stylesheet" type='text/css'>
+    <link href="/css/bootflat.css" rel="stylesheet" type='text/css'>
+    <link href="/css/geode-site.css" rel="stylesheet" type='text/css'>
+    <link href="https://fonts.googleapis.com/css?family=Open+Sans:200,400,500,300,600,800,700,400italic,600italic,700italic,800italic,300italic" rel="stylesheet" type="text/css">
+    <link href="/css/font-awesome.min.css" rel="stylesheet" type='text/css'>
+
+    <% if @community == true %>
+    <script type="text/javascript"
+      src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBYSxyIKS22zC4wSLFXZGR8QKXbGWLFwYw&sensor=false">
+    </script>
+    <script type="text/javascript">
+
+        var points = [
+                new google.maps.LatLng(-33.8674869,151.2069902),
+                new google.maps.LatLng(40.2338438,-111.6585337),
+                new google.maps.LatLng(37.6909682,-122.3107517),
+                new google.maps.LatLng(-37.6825027,176.1880232),
+                new google.maps.LatLng(-0.023559,37.906193),
+                new google.maps.LatLng(41.00527,28.97696),
+                new google.maps.LatLng(47.1569444,27.5902778),
+                new google.maps.LatLng(49.261226,-123.1139268),
+                new google.maps.LatLng(55.378051,-3.435973),
+                new google.maps.LatLng(30.3321838,-81.65565099999999),
+                new google.maps.LatLng(30.267153,-97.7430608),
+                new google.maps.LatLng(-14.235004,-51.92528),
+                new google.maps.LatLng(41.76371109999999,-72.6850932),
+                new google.maps.LatLng(53.3498053,-6.2603097),
+                new google.maps.LatLng(-37.814107,144.96328),
+                new google.maps.LatLng(26.820553,30.802498),
+                new google.maps.LatLng(34.0522342,-118.2436849),
+                new google.maps.LatLng(37.566535,126.9779692),
+                new google.maps.LatLng(7.873053999999999,80.77179699999999),
+                new google.maps.LatLng(39.737567,-104.9847179),
+                new google.maps.LatLng(52.9399159,-73.5491361),
+                new google.maps.LatLng(40.7143528,-74.00597309999999),
+                new google.maps.LatLng(44.9374831,-93.20099979999999),
+                new google.maps.LatLng(38.963745,35.243322),
+                new google.maps.LatLng(35.7795897,-78.6381787),
+                new google.maps.LatLng(35.907757,127.766922),
+                new google.maps.LatLng(-6.2689913,106.8060388),
+                new google.maps.LatLng(27.3364347,-82.53065269999999),
+                new google.maps.LatLng(44.494887,11.3426163),
+                new google.maps.LatLng(39.952335,-75.16378900000001),
+                new google.maps.LatLng(37.09024,-95.712891),
+                new google.maps.LatLng(40.5852602,-105.084423),
+                new google.maps.LatLng(43.653226,-79.3831843),
+                new google.maps.LatLng(47.6062095,-122.3320708),
+                new google.maps.LatLng(31.046051,34.851612),
+                new google.maps.LatLng(51.41233,-0.300689),
+                new google.maps.LatLng(39.4699075,-0.3762881),
+                new google.maps.LatLng(51.51121389999999,-0.1198244),
+                new google.maps.LatLng(42.3556899,-83.361853),
+                new google.maps.LatLng(33.4483771,-112.0740373),
+                new google.maps.LatLng(45.5234515,-122.6762071),
+                new google.maps.LatLng(43.0730517,-89.4012302),
+                new google.maps.LatLng(36.1031378,-80.202394),
+                new google.maps.LatLng(37.7749295,-122.4194155),
+                new google.maps.LatLng(5.263234100000001,100.4846227),
+                new google.maps.LatLng(35.5950581,-82.5514869),
+                new google.maps.LatLng(35.86166,104.195397),
+                new google.maps.LatLng(34.4208305,-119.6981901),
+                new google.maps.LatLng(1.352083,103.819836),
+                new google.maps.LatLng(36.8507689,-76.28587259999999),
+                new google.maps.LatLng(22.396428,114.109497),
+                new google.maps.LatLng(48.856614,2.3522219),
+                new google.maps.LatLng(40.4167754,-3.7037902),
+                new google.maps.LatLng(18.5204303,73.8567437),
+                new google.maps.LatLng(36.1666667,-86.7833333),
+                new google.maps.LatLng(53.3498053,-6.2603097),
+                new google.maps.LatLng(26.0993883,-80.1343301),
+                new google.maps.LatLng(42.331427,-83.0457538),
+                new google.maps.LatLng(37.82206000000001,-122.272437),
+                new google.maps.LatLng(30.42130899999999,-87.2169149),
+                new google.maps.LatLng(44.4325,26.1038889),
+                new google.maps.LatLng(41.0700485,-81.49516210000002),
+                new google.maps.LatLng(12.9715987,77.5945627),
+                new google.maps.LatLng(53.41291,-8.24389),
+                new google.maps.LatLng(34.0583995,-106.8914159),
+                new google.maps.LatLng(-9.189967,-75.015152),
+                new google.maps.LatLng(55.6760968,12.5683371),
+                new google.maps.LatLng(53.9807737,-6.7148821),
+                new google.maps.LatLng(31.230416,121.473701),
+                new google.maps.LatLng(33.7489954,-84.3879824),
+                new google.maps.LatLng(8.4874949,76.948623),
+                new google.maps.LatLng(13.0524139,80.25082460000002),
+                new google.maps.LatLng(28.0836269,-80.60810889999999),
+                new google.maps.LatLng(39.0457549,-76.64127119999999),
+                new google.maps.LatLng(17.385044,78.486671),
+                new google.maps.LatLng(-23.5489433,-46.6388182),
+                new google.maps.LatLng(52.09179,5.114569899999999),
+                new google.maps.LatLng(19.2667,76.7833),
+                new google.maps.LatLng(19.0759837,72.8776559),
+                new google.maps.LatLng(12.9715987,77.5945627),
+                new google.maps.LatLng(41.1566892,-8.6239254),
+                new google.maps.LatLng(39.90403,116.407526),
+                new google.maps.LatLng(42.3584308,-71.0597732),
+                new google.maps.LatLng(32.725409,-97.3208496),
+                new google.maps.LatLng(39.074208,21.824312),
+                new google.maps.LatLng(10.066049,123.538599),
+                new google.maps.LatLng(37.42410599999999,-122.1660756),
+                new google.maps.LatLng(36.204824,138.252924)
+              ];
+
+        var map;
+        var markers = [];
+        var iterator = 0;
+        var dropped = false;
+        var recentered = false;
+
+        function initialize() {
+            var mapOptions = {
+              center: new google.maps.LatLng(0,0),
+              //draggable: false,
+              //zoomControl: false,
+              scrollwheel: false,
+              streetViewControl: false,
+              mapTypeControl: false,
+              panControl: false,
+              //disableDoubleClickZoom: true,
+              zoom: 2,
+              //disableDefaultUI: true,
+              mapTypeId: google.maps.MapTypeId.ROADMAP
+            };
+            map = new google.maps.Map(document.getElementById("map-canvas"),
+                mapOptions);
+
+            google.maps.event.addDomListener(map, 'idle', function() {
+                        if (recentered == false) {
+                            map.setCenter(new google.maps.LatLng(20,0));
+                            recentered = true;
+                        }
+                    });
+
+            var bounds = new google.maps.LatLngBounds();
+
+            // Extend bounds with each point
+            for (var i = 0; i < points.length; i++) {
+            bounds.extend(points[i]);
+            }
+            map.fitBounds(bounds);
+
+            if (document.hasFocus()) {
+                dropped = true;
+                drop();
+            }
+
+
+        }
+        function drop() {
+            dropped = true;
+            for (var i = 0; i < points.length; i++) {
+                setTimeout(function() {
+                    addMarker();
+                }, i * 50);
+            }
+        }
+
+        function addMarker() {
+            markers.push(new google.maps.Marker({
+                position: points[iterator],
+                map: map,
+                draggable: false,
+                animation: google.maps.Animation.DROP
+            }));
+            iterator++;
+        }
+
+        google.maps.event.addDomListener(window, 'load', initialize);
+
+        window.onfocus = function () {
+            if (dropped == false) {
+                drop();
+            }
+        };
+    </script>
+    <% end %>
+
+    <!-- HTML5 shim, for IE6-8 support of HTML5 elements. All other JS at the end of file. -->
+    <!--[if lt IE 9]>
+      <script src="js/html5shiv.js"></script>
+      <script src="js/respond.min.js"></script>
+    <![endif]-->
+</head>
+<body>
+
+    <header class="navbar navbar-inverse navbar-fixed-top bf-docs-nav <%= 'secondary' if @docs or @community %>" role="banner">
+    <div class="container">
+        <div class="navbar-header">
+            <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bf-navbar-collapse">
+                <span class="sr-only">Toggle navigation</span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+            </button>
+        </div>
+        <a href="/" class="navbar-brand">
+                <img id="home-logo" src="/img/apache_geode_logo_white_small.png" />
+            </a>
+        <nav class="collapse navbar-collapse bf-navbar-collapse" role="navigation">
+            <ul class="nav navbar-nav navbar-right">
+                <li class="<%= 'active' if @community %>"><a href="/community/"><span class="icns icon-group"></span></a></li>
+                <li><a href="/docs" target="_blank"><span class="icns icon-book"></span></a></li>
+                <li><a href="http://github.com/apache/incubator-geode" target="_blank"><span class="icns icon-github-sign"></span></a></li>
+                <!--<li><a href="https://trello.com/b/exQmJIOn/usergrid" target="_blank"><span class="icns icon-trello"></span></a></li>-->
+                <li><a href="https://issues.apache.org/jira/browse/GEODE/"
+                       target="_blank"><span class="icns icon-bug"></span></a></li>
+                <li><a href="http://stackoverflow.com/search?q=Apache%20Geode" target="_blank"><span class="icns icon-stackexchange"></span></a></li>
+                <li><a href="/community/#live"><span class="icns icon-comments"></span></a></li>
+                <li><a href="https://twitter.com/apachegeode" target="_blank"><span class="icns icon-twitter"></span></a></li>
+                <li><a href="https://cwiki.apache.org/confluence/display/geode/" target="_blank"><span class="icns icon-edit"></span></a></li>
+                <li><a href="/releases/"><span class="icns icon-releases"></span></a></li>
+            </ul>
+        </nav>
+    </div>
+    </header>

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/lib/default.rb
----------------------------------------------------------------------
diff --git a/gemfire-site/website/lib/default.rb b/gemfire-site/website/lib/default.rb
new file mode 100644
index 0000000..8adfad9
--- /dev/null
+++ b/gemfire-site/website/lib/default.rb
@@ -0,0 +1,43 @@
+# All files in the 'lib' directory will be loaded
+# before nanoc starts compiling.
+include Nanoc::Helpers::Rendering
+
+require 'pandoc-ruby'
+require 'htmlentities'
+
+class PandocFilter < Nanoc3::Filter
+  identifier :pandoc
+  type :text
+
+  def run(content, params = {})
+    ::PandocRuby.convert(content, 'smart', 'no-highlight', 'toc', :template => 'lib/pandoc.template')
+  end
+end
+
+class FencedCodeBlock < Nanoc3::Filter
+  identifier :fenced_code_block
+  
+  def run(content, params={})
+    content.gsub(/(^`{3,}\s*(\S*)\s*$([^`]*)^`{3,}\s*$)+?/m) {|match|
+      lang_spec  = $2
+      code_block = $3
+      
+      replacement = ''
+      
+      replacement << '<pre class="highlight"><code class="language'
+      
+      if lang_spec && lang_spec.length > 0
+        replacement << '-'
+        replacement << lang_spec
+      end
+      
+      replacement << '">'
+      
+      code_block.gsub!("[:backtick:]", "`")
+      
+      coder = HTMLEntities.new
+      replacement << coder.encode(code_block)
+      replacement << '</code></pre>'
+    }
+  end
+end
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/lib/helpers_.rb
----------------------------------------------------------------------
diff --git a/gemfire-site/website/lib/helpers_.rb b/gemfire-site/website/lib/helpers_.rb
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/lib/pandoc.template
----------------------------------------------------------------------
diff --git a/gemfire-site/website/lib/pandoc.template b/gemfire-site/website/lib/pandoc.template
new file mode 100644
index 0000000..598e2c2
--- /dev/null
+++ b/gemfire-site/website/lib/pandoc.template
@@ -0,0 +1,4 @@
+<div class="toc">
+	$toc$
+</div>
+$body$
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/nanoc.yaml
----------------------------------------------------------------------
diff --git a/gemfire-site/website/nanoc.yaml b/gemfire-site/website/nanoc.yaml
new file mode 100644
index 0000000..ca1b598
--- /dev/null
+++ b/gemfire-site/website/nanoc.yaml
@@ -0,0 +1,77 @@
+# A list of file extensions that nanoc will consider to be textual rather than
+# binary. If an item with an extension not in this list is found,  the file
+# will be considered as binary.
+text_extensions: [ 'coffee', 'css', 'erb', 'haml', 'handlebars', 'hb', 'htm', 'html', 'js', 'less', 'markdown', 'md', 'ms', 'mustache', 'php', 'rb', 'sass', 'scss', 'txt', 'xhtml', 'xml' ]
+
+# The path to the directory where all generated files will be written to. This
+# can be an absolute path starting with a slash, but it can also be path
+# relative to the site directory.
+output_dir: ../content
+
+# A list of index filenames, i.e. names of files that will be served by a web
+# server when a directory is requested. Usually, index files are named
+# “index.html”, but depending on the web server, this may be something else,
+# such as “default.htm”. This list is used by nanoc to generate pretty URLs.
+index_filenames: [ 'index.html' ]
+
+# Whether or not to generate a diff of the compiled content when compiling a
+# site. The diff will contain the differences between the compiled content
+# before and after the last site compilation.
+enable_output_diff: false
+
+prune:
+  # Whether to automatically remove files not managed by nanoc from the output
+  # directory. For safety reasons, this is turned off by default.
+  auto_prune: false
+
+  # Which files and directories you want to exclude from pruning. If you version
+  # your output directory, you should probably exclude VCS directories such as
+  # .git, .svn etc.
+  exclude: [ '.git', '.hg', '.svn', 'CVS' ]
+
+# The data sources where nanoc loads its data from. This is an array of
+# hashes; each array element represents a single data source. By default,
+# there is only a single data source that reads data from the “content/” and
+# “layout/” directories in the site directory.
+data_sources:
+  -
+    # The type is the identifier of the data source. By default, this will be
+    # `filesystem_unified`.
+    type: filesystem_unified
+
+    # The path where items should be mounted (comparable to mount points in
+    # Unix-like systems). This is “/” by default, meaning that items will have
+    # “/” prefixed to their identifiers. If the items root were “/en/”
+    # instead, an item at content/about.html would have an identifier of
+    # “/en/about/” instead of just “/about/”.
+    items_root: /
+
+    # The path where layouts should be mounted. The layouts root behaves the
+    # same as the items root, but applies to layouts rather than items.
+    layouts_root: /
+
+    # Whether to allow periods in identifiers. When turned off, everything
+    # past the first period is considered to be the extension, and when
+    # turned on, only the characters past the last period are considered to
+    # be the extension. For example,  a file named “content/about.html.erb”
+    # will have the identifier “/about/” when turned off, but when turned on
+    # it will become “/about.html/” instead.
+    allow_periods_in_identifiers: false
+
+# Configuration for the “watch” command, which watches a site for changes and
+# recompiles if necessary.
+watcher:
+  # A list of directories to watch for changes. When editing this, make sure
+  # that the “output/” and “tmp/” directories are _not_ included in this list,
+  # because recompiling the site will cause these directories to change, which
+  # will cause the site to be recompiled, which will cause these directories
+  # to change, which will cause the site to be recompiled again, and so on.
+  dirs_to_watch: [ 'content', 'layouts', 'lib' ]
+
+  # A list of single files to watch for changes. As mentioned above, don’t put
+  # any files from the “output/” or “tmp/” directories in here.
+  files_to_watch: [ 'nanoc.yaml', 'Rules' ]
+
+  # When to send notifications (using Growl or notify-send).
+  notify_on_compilation_success: true
+  notify_on_compilation_failure: true

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/run.sh
----------------------------------------------------------------------
diff --git a/gemfire-site/website/run.sh b/gemfire-site/website/run.sh
new file mode 100755
index 0000000..cf1f043
--- /dev/null
+++ b/gemfire-site/website/run.sh
@@ -0,0 +1 @@
+nanoc autocompile

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/utilities/map-markers.rb
----------------------------------------------------------------------
diff --git a/gemfire-site/website/utilities/map-markers.rb b/gemfire-site/website/utilities/map-markers.rb
new file mode 100644
index 0000000..4adbac0
--- /dev/null
+++ b/gemfire-site/website/utilities/map-markers.rb
@@ -0,0 +1,58 @@
+require 'rest_client'
+require 'csv'
+require 'json/ext'
+
+rapportive_token = "BAgiX3BYOTZUVXlNalExclVBNWIyazVNcjBxK3UzdURNUnovTXVTamRZVTVmRmNsakw5WGZrUHJIYXFRaVV2YkRYaGctLWNFQjJLUmZNam05cjdmZDEzVGFPL3c9PQ==--71d66f8c1b8eafb0a8f31691b55b95fbce58857a"
+rapportive_qs    = "?viewport_height=325&view_type=cv&user_email=tim.anglade%40gmail.com&client_version=ChromeExtension+rapportive+1.4.1&client_stamp=1382671311"
+
+places = {}
+
+# CSV.foreach("usergrid.csv") do |row|
+# 	begin
+# 		next if row[0].start_with?('Members ')
+# 		next if row[0].start_with?('Email ')
+# 		email = row[0]
+# 		#puts email
+
+# 		response = RestClient.get "http://profiles.rapportive.com/contacts/email/#{URI.escape(email)}#{rapportive_qs}", {"user-agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36", "origin" => "https://mail.google.com", "referer" => "https://mail.google.com/mail/u/0/", "x-session-token" => rapportive_token}
+# 		rapportive = JSON.parse(response.to_str)
+
+# 		next unless rapportive['contact']['location']
+# 		location = rapportive['contact']['location'].gsub(/\sBay\sArea$/,'').gsub(' Area,',',').gsub(/\sArea$/,'').gsub(/^Greater\s/,'')
+
+# 		puts location
+
+# 		places[location] ? places[location] += 1 : places[location] = 1
+# 	rescue => e
+# 	 	puts e
+# 	 	sleep 10
+# 	 	retry
+# 	end
+# end
+
+# places.each do |place, count|
+# 	puts "\"#{place}\",#{count}"
+# end
+
+places2 = {"Sydney, Australia"=>2, "Provo, Utah"=>1, "San Francisco Bay"=>27, "Bay of Plenty, New Zealand"=>1, "Kenya"=>1, "Istanbul, Turkey"=>2, "Iasi County, Romania"=>1, "Vancouver, Canada"=>2, "United Kingdom"=>3, "Jacksonville, Florida"=>1, "Austin, Texas"=>6, "Brazil"=>1, "Hartford, Connecticut"=>2, "Dublin"=>1, "Melbourne, Australia"=>1, "Egypt"=>1, "Los Angeles"=>7, "Seoul, Korea"=>1, "Sri Lanka"=>2, "Denver"=>6, "Quebec, Canada"=>1, "New York City"=>5, "Minneapolis-St. Paul"=>1, "Turkey"=>2, "Raleigh-Durham, North Carolina"=>3, "Korea"=>4, "Jakarta Selatan"=>1, "Sarasota, Florida"=>1, "Bologna, Italy"=>1, "Philadelphia"=>2, "United States"=>1, "Fort Collins, CO"=>2, "Toronto, Canada"=>2, "Seattle"=>6, "Israel"=>1, "Kingston upon Thames, United Kingdom"=>1, "Valencia, Spain"=>1, "London, United Kingdom"=>2, "Washington D.C. Metro"=>1, "Phoenix, Arizona"=>2, "Portland, Oregon"=>1, "Madison, Wisconsin"=>1, "Greensboro/Winston-Salem, North Carolina"=>1, "San Francisco, CA"=>1, 
 "Penang, Malaysia"=>1, "Asheville, North Carolina"=>1, "China"=>1, "Santa Barbara, California"=>1, "Singapore"=>2, "Norfolk, Virginia"=>1, "Hong Kong"=>3, "Paris, France"=>1, "Madrid, Spain"=>1, "Pune, India"=>3, "nashville, TN"=>1, "Dublin, Ireland"=>1, "Miami/Fort Lauderdale"=>1, "Detroit"=>1, "720 32nd St, Oakland, CA 94609"=>1, "Pensacola, Florida"=>1, "Bucharest, Romania"=>1, "Cleveland/Akron, Ohio"=>1, "Bengaluru, India"=>7, "Ireland"=>1, "Socorro, New Mexico"=>1, "Peru"=>1, "Copenhagen, Denmark"=>1, "Somewhere"=>1, "Istanbul, Turkey"=>1, "Shanghai City, China"=>1, "Atlanta"=>2, "Thiruvananthapuram, India"=>1, "Chennai, Tamil Nadu"=>1, "Melbourne, Florida"=>1, "Maryland"=>1, "Hyderabad, India"=>1, "Sao Paulo, Brazil"=>1, "Utrecht, Netherlands"=>1, "Parbhani, India"=>1, "Mumbai, India"=>1, "Bangalore, Karnataka, India"=>1, "Porto, Portugal"=>1, "Beijing, China"=>1, "Boston"=>1, "Dallas/Fort Worth"=>1, "Greece"=>1, "Mountains"=>1, "Stanford, California"=>1, "Japan"=>1}
+
+countries = {}
+
+places2.each do |place, count|
+	begin
+		response = RestClient.get "http://maps.googleapis.com/maps/api/geocode/json?address=#{URI.escape(place)}&sensor=false"
+		j = JSON.parse(response.to_str)
+		geocoding = j["results"][0]["geometry"]
+		j["results"][0]["address_components"].each do |c|
+			next unless c["types"].include?("country")
+			countries[c["short_name"]] ? countries[c["short_name"]] += 1 : countries[c["short_name"]] = 1
+		end
+
+		#puts "new google.maps.Marker({\nmap:map,\nanimation: google.maps.Animation.DROP,\nposition: new google.maps.LatLng(#{geocoding['location']['lat']},#{geocoding['location']['lng']})\n});"
+		sleep 0.1
+	rescue => e
+ 		puts e
+	end
+end
+
+puts "Found #{countries.size} countries"

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/utilities/markers.txt
----------------------------------------------------------------------
diff --git a/gemfire-site/website/utilities/markers.txt b/gemfire-site/website/utilities/markers.txt
new file mode 100644
index 0000000..994555d
--- /dev/null
+++ b/gemfire-site/website/utilities/markers.txt
@@ -0,0 +1,440 @@
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(-33.8674869,151.2069902)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(40.2338438,-111.6585337)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(37.6909682,-122.3107517)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(-37.6825027,176.1880232)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(-0.023559,37.906193)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(41.00527,28.97696)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(47.1569444,27.5902778)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(49.261226,-123.1139268)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(55.378051,-3.435973)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(30.3321838,-81.65565099999999)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(30.267153,-97.7430608)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(-14.235004,-51.92528)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(41.76371109999999,-72.6850932)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(53.3498053,-6.2603097)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(-37.814107,144.96328)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(26.820553,30.802498)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(34.0522342,-118.2436849)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(37.566535,126.9779692)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(7.873053999999999,80.77179699999999)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(39.737567,-104.9847179)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(52.9399159,-73.5491361)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(40.7143528,-74.00597309999999)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(44.9374831,-93.20099979999999)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(38.963745,35.243322)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(35.7795897,-78.6381787)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(35.907757,127.766922)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(-6.2689913,106.8060388)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(27.3364347,-82.53065269999999)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(44.494887,11.3426163)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(39.952335,-75.16378900000001)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(37.09024,-95.712891)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(40.5852602,-105.084423)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(43.653226,-79.3831843)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(47.6062095,-122.3320708)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(31.046051,34.851612)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(51.41233,-0.300689)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(39.4699075,-0.3762881)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(51.51121389999999,-0.1198244)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(42.3556899,-83.361853)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(33.4483771,-112.0740373)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(45.5234515,-122.6762071)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(43.0730517,-89.4012302)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(36.1031378,-80.202394)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(37.7749295,-122.4194155)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(5.263234100000001,100.4846227)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(35.5950581,-82.5514869)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(35.86166,104.195397)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(34.4208305,-119.6981901)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(1.352083,103.819836)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(36.8507689,-76.28587259999999)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(22.396428,114.109497)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(48.856614,2.3522219)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(40.4167754,-3.7037902)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(18.5204303,73.8567437)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(36.1666667,-86.7833333)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(53.3498053,-6.2603097)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(26.0993883,-80.1343301)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(42.331427,-83.0457538)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(37.82206000000001,-122.272437)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(30.42130899999999,-87.2169149)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(44.4325,26.1038889)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(41.0700485,-81.49516210000002)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(12.9715987,77.5945627)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(53.41291,-8.24389)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(34.0583995,-106.8914159)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(-9.189967,-75.015152)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(55.6760968,12.5683371)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(53.9807737,-6.7148821)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(31.230416,121.473701)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(33.7489954,-84.3879824)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(8.4874949,76.948623)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(13.0524139,80.25082460000002)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(28.0836269,-80.60810889999999)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(39.0457549,-76.64127119999999)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(17.385044,78.486671)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(-23.5489433,-46.6388182)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(52.09179,5.114569899999999)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(19.2667,76.7833)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(19.0759837,72.8776559)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(12.9715987,77.5945627)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(41.1566892,-8.6239254)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(39.90403,116.407526)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(42.3584308,-71.0597732)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(32.725409,-97.3208496)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(39.074208,21.824312)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(10.066049,123.538599)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(37.42410599999999,-122.1660756)
+});
+new google.maps.Marker({
+map:map,
+animation: google.maps.Animation.DROP,
+	    position: new google.maps.LatLng(36.204824,138.252924)
+});

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b6a3fd2e/gemfire-site/website/utilities/snapshot-apigee.rb
----------------------------------------------------------------------
diff --git a/gemfire-site/website/utilities/snapshot-apigee.rb b/gemfire-site/website/utilities/snapshot-apigee.rb
new file mode 100644
index 0000000..2fc3ebd
--- /dev/null
+++ b/gemfire-site/website/utilities/snapshot-apigee.rb
@@ -0,0 +1,71 @@
+require 'rubygems'
+require 'mechanize'
+require 'anemone'
+require 'pandoc-ruby'
+# require 'json/ext'
+
+TO_REMOVE = [ 'div.toc-filter-back-to-top',
+              '.rate-yesno-title',
+              'colgroup',
+              'div.rate-widget',
+              'div.toc-filter.toc-filter-bullet'  ]
+
+puts "Crawling..."
+
+urls = []
+Anemone.crawl("http://apigee.com/docs/app_services", :skip_query_strings => true) do |anemone|
+  # anemone.on_every_page {|page| puts page.url}
+  # anemone.skip_links_like(/https?\:\/\/apigee.com\/docs\/(comment|node|api-platform|console|ja|enterprise|consoletogo)/)
+  anemone.focus_crawl { |page| page.links.select{|l| l.to_s.match(/https?\:\/\/apigee.com\/docs\/(app-services|geode)\/content/) } }
+  anemone.on_pages_like(/https?\:\/\/apigee.com\/docs\/(app-services|geode)\/content/) do |page|
+    urls.push page.url
+    # puts "Found #{page.url}"
+  end
+  # anemone.after_crawl {  }
+end
+
+urls = urls.compact.map{|u| u.to_s}.uniq.sort
+
+puts "Found #{urls.size} documentation articles"
+puts urls.join("\n")
+gets
+
+a = Mechanize.new { |agent|
+  agent.user_agent_alias = 'Mac Safari'
+}
+
+urls.each do |url|
+  name = url.split('/')[-1]
+  puts "Processing #{name}"
+  begin
+    a.get(url) do |article|
+      # title = article.search('h1').first
+      body = article.search('section#block-system-main>div.node>div.field-name-body').first
+      next if body.nil?
+      # body.children.first.add_previous_sibling(title)
+      # body.search('br').each {|l| l.remove}
+      body.search(TO_REMOVE.join(', ')).each {|l| l.remove}
+      body.search('div#collapse').each do |div|
+        div.add_next_sibling '<a id="'+div.attributes['id'].value+'"></a>'
+        div.remove
+      end
+      body.search('h2').each {|h| h.remove_attribute('class')}
+      body.search('*').each{|n| n.remove_attribute('style')}
+      body.search("a").each do |link|
+        begin
+          link.attributes["href"].value = link.attributes["href"].value.gsub(/^\/docs\/app-services\/content\//,'/')
+        rescue
+        end
+      end
+      markdown = PandocRuby.convert(body, :from => :html, :to => :markdown)
+      front_matter = "---\ntitle: #{title.inner_html.gsub(':',' - ')}\ncategory: \nlayout: article\n---\n\n"
+      markdown.gsub!('Apigee App Services', 'Apache Usergrid')
+      markdown.gsub!('App Services', 'Apache Usergrid')
+      markdown.insert(0,front_matter)
+      today = Time.new.strftime('%Y-%m-%d')
+      File.open("../content/docs/#{today}-#{name}.md", 'w') {|f| f.write(markdown) }
+    end
+  rescue Exception => e
+    puts e
+  end
+end