http://git-wip-us.apache.org/repos/asf/arrow-site/blob/3cd84682/build/assets/javascripts/bootstrap/tab.js
----------------------------------------------------------------------
diff --git a/build/assets/javascripts/bootstrap/tab.js 
b/build/assets/javascripts/bootstrap/tab.js
new file mode 100644
index 0000000..c4a8635
--- /dev/null
+++ b/build/assets/javascripts/bootstrap/tab.js
@@ -0,0 +1,155 @@
+/* ========================================================================
+ * Bootstrap: tab.js v3.3.7
+ * http://getbootstrap.com/javascript/#tabs
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // TAB CLASS DEFINITION
+  // ====================
+
+  var Tab = function (element) {
+    // jscs:disable requireDollarBeforejQueryAssignment
+    this.element = $(element)
+    // jscs:enable requireDollarBeforejQueryAssignment
+  }
+
+  Tab.VERSION = '3.3.7'
+
+  Tab.TRANSITION_DURATION = 150
+
+  Tab.prototype.show = function () {
+    var $this    = this.element
+    var $ul      = $this.closest('ul:not(.dropdown-menu)')
+    var selector = $this.data('target')
+
+    if (!selector) {
+      selector = $this.attr('href')
+      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip 
for ie7
+    }
+
+    if ($this.parent('li').hasClass('active')) return
+
+    var $previous = $ul.find('.active:last a')
+    var hideEvent = $.Event('hide.bs.tab', {
+      relatedTarget: $this[0]
+    })
+    var showEvent = $.Event('show.bs.tab', {
+      relatedTarget: $previous[0]
+    })
+
+    $previous.trigger(hideEvent)
+    $this.trigger(showEvent)
+
+    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) 
return
+
+    var $target = $(selector)
+
+    this.activate($this.closest('li'), $ul)
+    this.activate($target, $target.parent(), function () {
+      $previous.trigger({
+        type: 'hidden.bs.tab',
+        relatedTarget: $this[0]
+      })
+      $this.trigger({
+        type: 'shown.bs.tab',
+        relatedTarget: $previous[0]
+      })
+    })
+  }
+
+  Tab.prototype.activate = function (element, container, callback) {
+    var $active    = container.find('> .active')
+    var transition = callback
+      && $.support.transition
+      && ($active.length && $active.hasClass('fade') || !!container.find('> 
.fade').length)
+
+    function next() {
+      $active
+        .removeClass('active')
+        .find('> .dropdown-menu > .active')
+          .removeClass('active')
+        .end()
+        .find('[data-toggle="tab"]')
+          .attr('aria-expanded', false)
+
+      element
+        .addClass('active')
+        .find('[data-toggle="tab"]')
+          .attr('aria-expanded', true)
+
+      if (transition) {
+        element[0].offsetWidth // reflow for transition
+        element.addClass('in')
+      } else {
+        element.removeClass('fade')
+      }
+
+      if (element.parent('.dropdown-menu').length) {
+        element
+          .closest('li.dropdown')
+            .addClass('active')
+          .end()
+          .find('[data-toggle="tab"]')
+            .attr('aria-expanded', true)
+      }
+
+      callback && callback()
+    }
+
+    $active.length && transition ?
+      $active
+        .one('bsTransitionEnd', next)
+        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
+      next()
+
+    $active.removeClass('in')
+  }
+
+
+  // TAB PLUGIN DEFINITION
+  // =====================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this = $(this)
+      var data  = $this.data('bs.tab')
+
+      if (!data) $this.data('bs.tab', (data = new Tab(this)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  var old = $.fn.tab
+
+  $.fn.tab             = Plugin
+  $.fn.tab.Constructor = Tab
+
+
+  // TAB NO CONFLICT
+  // ===============
+
+  $.fn.tab.noConflict = function () {
+    $.fn.tab = old
+    return this
+  }
+
+
+  // TAB DATA-API
+  // ============
+
+  var clickHandler = function (e) {
+    e.preventDefault()
+    Plugin.call($(this), 'show')
+  }
+
+  $(document)
+    .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
+    .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
+
+}(jQuery);

http://git-wip-us.apache.org/repos/asf/arrow-site/blob/3cd84682/build/assets/javascripts/bootstrap/tooltip.js
----------------------------------------------------------------------
diff --git a/build/assets/javascripts/bootstrap/tooltip.js 
b/build/assets/javascripts/bootstrap/tooltip.js
new file mode 100644
index 0000000..e35d9c7
--- /dev/null
+++ b/build/assets/javascripts/bootstrap/tooltip.js
@@ -0,0 +1,520 @@
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.3.7
+ * http://getbootstrap.com/javascript/#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // TOOLTIP PUBLIC CLASS DEFINITION
+  // ===============================
+
+  var Tooltip = function (element, options) {
+    this.type       = null
+    this.options    = null
+    this.enabled    = null
+    this.timeout    = null
+    this.hoverState = null
+    this.$element   = null
+    this.inState    = null
+
+    this.init('tooltip', element, options)
+  }
+
+  Tooltip.VERSION  = '3.3.7'
+
+  Tooltip.TRANSITION_DURATION = 150
+
+  Tooltip.DEFAULTS = {
+    animation: true,
+    placement: 'top',
+    selector: false,
+    template: '<div class="tooltip" role="tooltip"><div 
class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
+    trigger: 'hover focus',
+    title: '',
+    delay: 0,
+    html: false,
+    container: false,
+    viewport: {
+      selector: 'body',
+      padding: 0
+    }
+  }
+
+  Tooltip.prototype.init = function (type, element, options) {
+    this.enabled   = true
+    this.type      = type
+    this.$element  = $(element)
+    this.options   = this.getOptions(options)
+    this.$viewport = this.options.viewport && 
$($.isFunction(this.options.viewport) ? this.options.viewport.call(this, 
this.$element) : (this.options.viewport.selector || this.options.viewport))
+    this.inState   = { click: false, hover: false, focus: false }
+
+    if (this.$element[0] instanceof document.constructor && 
!this.options.selector) {
+      throw new Error('`selector` option must be specified when initializing ' 
+ this.type + ' on the window.document object!')
+    }
+
+    var triggers = this.options.trigger.split(' ')
+
+    for (var i = triggers.length; i--;) {
+      var trigger = triggers[i]
+
+      if (trigger == 'click') {
+        this.$element.on('click.' + this.type, this.options.selector, 
$.proxy(this.toggle, this))
+      } else if (trigger != 'manual') {
+        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'
+        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
+
+        this.$element.on(eventIn  + '.' + this.type, this.options.selector, 
$.proxy(this.enter, this))
+        this.$element.on(eventOut + '.' + this.type, this.options.selector, 
$.proxy(this.leave, this))
+      }
+    }
+
+    this.options.selector ?
+      (this._options = $.extend({}, this.options, { trigger: 'manual', 
selector: '' })) :
+      this.fixTitle()
+  }
+
+  Tooltip.prototype.getDefaults = function () {
+    return Tooltip.DEFAULTS
+  }
+
+  Tooltip.prototype.getOptions = function (options) {
+    options = $.extend({}, this.getDefaults(), this.$element.data(), options)
+
+    if (options.delay && typeof options.delay == 'number') {
+      options.delay = {
+        show: options.delay,
+        hide: options.delay
+      }
+    }
+
+    return options
+  }
+
+  Tooltip.prototype.getDelegateOptions = function () {
+    var options  = {}
+    var defaults = this.getDefaults()
+
+    this._options && $.each(this._options, function (key, value) {
+      if (defaults[key] != value) options[key] = value
+    })
+
+    return options
+  }
+
+  Tooltip.prototype.enter = function (obj) {
+    var self = obj instanceof this.constructor ?
+      obj : $(obj.currentTarget).data('bs.' + this.type)
+
+    if (!self) {
+      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+      $(obj.currentTarget).data('bs.' + this.type, self)
+    }
+
+    if (obj instanceof $.Event) {
+      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
+    }
+
+    if (self.tip().hasClass('in') || self.hoverState == 'in') {
+      self.hoverState = 'in'
+      return
+    }
+
+    clearTimeout(self.timeout)
+
+    self.hoverState = 'in'
+
+    if (!self.options.delay || !self.options.delay.show) return self.show()
+
+    self.timeout = setTimeout(function () {
+      if (self.hoverState == 'in') self.show()
+    }, self.options.delay.show)
+  }
+
+  Tooltip.prototype.isInStateTrue = function () {
+    for (var key in this.inState) {
+      if (this.inState[key]) return true
+    }
+
+    return false
+  }
+
+  Tooltip.prototype.leave = function (obj) {
+    var self = obj instanceof this.constructor ?
+      obj : $(obj.currentTarget).data('bs.' + this.type)
+
+    if (!self) {
+      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+      $(obj.currentTarget).data('bs.' + this.type, self)
+    }
+
+    if (obj instanceof $.Event) {
+      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
+    }
+
+    if (self.isInStateTrue()) return
+
+    clearTimeout(self.timeout)
+
+    self.hoverState = 'out'
+
+    if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+    self.timeout = setTimeout(function () {
+      if (self.hoverState == 'out') self.hide()
+    }, self.options.delay.hide)
+  }
+
+  Tooltip.prototype.show = function () {
+    var e = $.Event('show.bs.' + this.type)
+
+    if (this.hasContent() && this.enabled) {
+      this.$element.trigger(e)
+
+      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, 
this.$element[0])
+      if (e.isDefaultPrevented() || !inDom) return
+      var that = this
+
+      var $tip = this.tip()
+
+      var tipId = this.getUID(this.type)
+
+      this.setContent()
+      $tip.attr('id', tipId)
+      this.$element.attr('aria-describedby', tipId)
+
+      if (this.options.animation) $tip.addClass('fade')
+
+      var placement = typeof this.options.placement == 'function' ?
+        this.options.placement.call(this, $tip[0], this.$element[0]) :
+        this.options.placement
+
+      var autoToken = /\s?auto?\s?/i
+      var autoPlace = autoToken.test(placement)
+      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
+
+      $tip
+        .detach()
+        .css({ top: 0, left: 0, display: 'block' })
+        .addClass(placement)
+        .data('bs.' + this.type, this)
+
+      this.options.container ? $tip.appendTo(this.options.container) : 
$tip.insertAfter(this.$element)
+      this.$element.trigger('inserted.bs.' + this.type)
+
+      var pos          = this.getPosition()
+      var actualWidth  = $tip[0].offsetWidth
+      var actualHeight = $tip[0].offsetHeight
+
+      if (autoPlace) {
+        var orgPlacement = placement
+        var viewportDim = this.getPosition(this.$viewport)
+
+        placement = placement == 'bottom' && pos.bottom + actualHeight > 
viewportDim.bottom ? 'top'    :
+                    placement == 'top'    && pos.top    - actualHeight < 
viewportDim.top    ? 'bottom' :
+                    placement == 'right'  && pos.right  + actualWidth  > 
viewportDim.width  ? 'left'   :
+                    placement == 'left'   && pos.left   - actualWidth  < 
viewportDim.left   ? 'right'  :
+                    placement
+
+        $tip
+          .removeClass(orgPlacement)
+          .addClass(placement)
+      }
+
+      var calculatedOffset = this.getCalculatedOffset(placement, pos, 
actualWidth, actualHeight)
+
+      this.applyPlacement(calculatedOffset, placement)
+
+      var complete = function () {
+        var prevHoverState = that.hoverState
+        that.$element.trigger('shown.bs.' + that.type)
+        that.hoverState = null
+
+        if (prevHoverState == 'out') that.leave(that)
+      }
+
+      $.support.transition && this.$tip.hasClass('fade') ?
+        $tip
+          .one('bsTransitionEnd', complete)
+          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+        complete()
+    }
+  }
+
+  Tooltip.prototype.applyPlacement = function (offset, placement) {
+    var $tip   = this.tip()
+    var width  = $tip[0].offsetWidth
+    var height = $tip[0].offsetHeight
+
+    // manually read margins because getBoundingClientRect includes difference
+    var marginTop = parseInt($tip.css('margin-top'), 10)
+    var marginLeft = parseInt($tip.css('margin-left'), 10)
+
+    // we must check for NaN for ie 8/9
+    if (isNaN(marginTop))  marginTop  = 0
+    if (isNaN(marginLeft)) marginLeft = 0
+
+    offset.top  += marginTop
+    offset.left += marginLeft
+
+    // $.fn.offset doesn't round pixel values
+    // so we use setOffset directly with our own function B-0
+    $.offset.setOffset($tip[0], $.extend({
+      using: function (props) {
+        $tip.css({
+          top: Math.round(props.top),
+          left: Math.round(props.left)
+        })
+      }
+    }, offset), 0)
+
+    $tip.addClass('in')
+
+    // check to see if placing tip in new offset caused the tip to resize 
itself
+    var actualWidth  = $tip[0].offsetWidth
+    var actualHeight = $tip[0].offsetHeight
+
+    if (placement == 'top' && actualHeight != height) {
+      offset.top = offset.top + height - actualHeight
+    }
+
+    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, 
actualHeight)
+
+    if (delta.left) offset.left += delta.left
+    else offset.top += delta.top
+
+    var isVertical          = /top|bottom/.test(placement)
+    var arrowDelta          = isVertical ? delta.left * 2 - width + 
actualWidth : delta.top * 2 - height + actualHeight
+    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
+
+    $tip.offset(offset)
+    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
+  }
+
+  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
+    this.arrow()
+      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
+      .css(isVertical ? 'top' : 'left', '')
+  }
+
+  Tooltip.prototype.setContent = function () {
+    var $tip  = this.tip()
+    var title = this.getTitle()
+
+    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+    $tip.removeClass('fade in top bottom left right')
+  }
+
+  Tooltip.prototype.hide = function (callback) {
+    var that = this
+    var $tip = $(this.$tip)
+    var e    = $.Event('hide.bs.' + this.type)
+
+    function complete() {
+      if (that.hoverState != 'in') $tip.detach()
+      if (that.$element) { // TODO: Check whether guarding this code with this 
`if` is really necessary.
+        that.$element
+          .removeAttr('aria-describedby')
+          .trigger('hidden.bs.' + that.type)
+      }
+      callback && callback()
+    }
+
+    this.$element.trigger(e)
+
+    if (e.isDefaultPrevented()) return
+
+    $tip.removeClass('in')
+
+    $.support.transition && $tip.hasClass('fade') ?
+      $tip
+        .one('bsTransitionEnd', complete)
+        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+      complete()
+
+    this.hoverState = null
+
+    return this
+  }
+
+  Tooltip.prototype.fixTitle = function () {
+    var $e = this.$element
+    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') 
{
+      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
+    }
+  }
+
+  Tooltip.prototype.hasContent = function () {
+    return this.getTitle()
+  }
+
+  Tooltip.prototype.getPosition = function ($element) {
+    $element   = $element || this.$element
+
+    var el     = $element[0]
+    var isBody = el.tagName == 'BODY'
+
+    var elRect    = el.getBoundingClientRect()
+    if (elRect.width == null) {
+      // width and height are missing in IE8, so compute them manually; see 
https://github.com/twbs/bootstrap/issues/14093
+      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, 
height: elRect.bottom - elRect.top })
+    }
+    var isSvg = window.SVGElement && el instanceof window.SVGElement
+    // Avoid using $.offset() on SVGs since it gives incorrect results in 
jQuery 3.
+    // See https://github.com/twbs/bootstrap/issues/20280
+    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : 
$element.offset())
+    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || 
document.body.scrollTop : $element.scrollTop() }
+    var outerDims = isBody ? { width: $(window).width(), height: 
$(window).height() } : null
+
+    return $.extend({}, elRect, scroll, outerDims, elOffset)
+  }
+
+  Tooltip.prototype.getCalculatedOffset = function (placement, pos, 
actualWidth, actualHeight) {
+    return placement == 'bottom' ? { top: pos.top + pos.height,   left: 
pos.left + pos.width / 2 - actualWidth / 2 } :
+           placement == 'top'    ? { top: pos.top - actualHeight, left: 
pos.left + pos.width / 2 - actualWidth / 2 } :
+           placement == 'left'   ? { top: pos.top + pos.height / 2 - 
actualHeight / 2, left: pos.left - actualWidth } :
+        /* placement == 'right' */ { top: pos.top + pos.height / 2 - 
actualHeight / 2, left: pos.left + pos.width }
+
+  }
+
+  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, 
actualWidth, actualHeight) {
+    var delta = { top: 0, left: 0 }
+    if (!this.$viewport) return delta
+
+    var viewportPadding = this.options.viewport && 
this.options.viewport.padding || 0
+    var viewportDimensions = this.getPosition(this.$viewport)
+
+    if (/right|left/.test(placement)) {
+      var topEdgeOffset    = pos.top - viewportPadding - 
viewportDimensions.scroll
+      var bottomEdgeOffset = pos.top + viewportPadding - 
viewportDimensions.scroll + actualHeight
+      if (topEdgeOffset < viewportDimensions.top) { // top overflow
+        delta.top = viewportDimensions.top - topEdgeOffset
+      } else if (bottomEdgeOffset > viewportDimensions.top + 
viewportDimensions.height) { // bottom overflow
+        delta.top = viewportDimensions.top + viewportDimensions.height - 
bottomEdgeOffset
+      }
+    } else {
+      var leftEdgeOffset  = pos.left - viewportPadding
+      var rightEdgeOffset = pos.left + viewportPadding + actualWidth
+      if (leftEdgeOffset < viewportDimensions.left) { // left overflow
+        delta.left = viewportDimensions.left - leftEdgeOffset
+      } else if (rightEdgeOffset > viewportDimensions.right) { // right 
overflow
+        delta.left = viewportDimensions.left + viewportDimensions.width - 
rightEdgeOffset
+      }
+    }
+
+    return delta
+  }
+
+  Tooltip.prototype.getTitle = function () {
+    var title
+    var $e = this.$element
+    var o  = this.options
+
+    title = $e.attr('data-original-title')
+      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
+
+    return title
+  }
+
+  Tooltip.prototype.getUID = function (prefix) {
+    do prefix += ~~(Math.random() * 1000000)
+    while (document.getElementById(prefix))
+    return prefix
+  }
+
+  Tooltip.prototype.tip = function () {
+    if (!this.$tip) {
+      this.$tip = $(this.options.template)
+      if (this.$tip.length != 1) {
+        throw new Error(this.type + ' `template` option must consist of 
exactly 1 top-level element!')
+      }
+    }
+    return this.$tip
+  }
+
+  Tooltip.prototype.arrow = function () {
+    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
+  }
+
+  Tooltip.prototype.enable = function () {
+    this.enabled = true
+  }
+
+  Tooltip.prototype.disable = function () {
+    this.enabled = false
+  }
+
+  Tooltip.prototype.toggleEnabled = function () {
+    this.enabled = !this.enabled
+  }
+
+  Tooltip.prototype.toggle = function (e) {
+    var self = this
+    if (e) {
+      self = $(e.currentTarget).data('bs.' + this.type)
+      if (!self) {
+        self = new this.constructor(e.currentTarget, this.getDelegateOptions())
+        $(e.currentTarget).data('bs.' + this.type, self)
+      }
+    }
+
+    if (e) {
+      self.inState.click = !self.inState.click
+      if (self.isInStateTrue()) self.enter(self)
+      else self.leave(self)
+    } else {
+      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+    }
+  }
+
+  Tooltip.prototype.destroy = function () {
+    var that = this
+    clearTimeout(this.timeout)
+    this.hide(function () {
+      that.$element.off('.' + that.type).removeData('bs.' + that.type)
+      if (that.$tip) {
+        that.$tip.detach()
+      }
+      that.$tip = null
+      that.$arrow = null
+      that.$viewport = null
+      that.$element = null
+    })
+  }
+
+
+  // TOOLTIP PLUGIN DEFINITION
+  // =========================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.tooltip')
+      var options = typeof option == 'object' && option
+
+      if (!data && /destroy|hide/.test(option)) return
+      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  var old = $.fn.tooltip
+
+  $.fn.tooltip             = Plugin
+  $.fn.tooltip.Constructor = Tooltip
+
+
+  // TOOLTIP NO CONFLICT
+  // ===================
+
+  $.fn.tooltip.noConflict = function () {
+    $.fn.tooltip = old
+    return this
+  }
+
+}(jQuery);

http://git-wip-us.apache.org/repos/asf/arrow-site/blob/3cd84682/build/assets/javascripts/bootstrap/transition.js
----------------------------------------------------------------------
diff --git a/build/assets/javascripts/bootstrap/transition.js 
b/build/assets/javascripts/bootstrap/transition.js
new file mode 100644
index 0000000..db76596
--- /dev/null
+++ b/build/assets/javascripts/bootstrap/transition.js
@@ -0,0 +1,59 @@
+/* ========================================================================
+ * Bootstrap: transition.js v3.3.7
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+  // ============================================================
+
+  function transitionEnd() {
+    var el = document.createElement('bootstrap')
+
+    var transEndEventNames = {
+      WebkitTransition : 'webkitTransitionEnd',
+      MozTransition    : 'transitionend',
+      OTransition      : 'oTransitionEnd otransitionend',
+      transition       : 'transitionend'
+    }
+
+    for (var name in transEndEventNames) {
+      if (el.style[name] !== undefined) {
+        return { end: transEndEventNames[name] }
+      }
+    }
+
+    return false // explicit for ie8 (  ._.)
+  }
+
+  // http://blog.alexmaccaw.com/css-transitions
+  $.fn.emulateTransitionEnd = function (duration) {
+    var called = false
+    var $el = this
+    $(this).one('bsTransitionEnd', function () { called = true })
+    var callback = function () { if (!called) 
$($el).trigger($.support.transition.end) }
+    setTimeout(callback, duration)
+    return this
+  }
+
+  $(function () {
+    $.support.transition = transitionEnd()
+
+    if (!$.support.transition) return
+
+    $.event.special.bsTransitionEnd = {
+      bindType: $.support.transition.end,
+      delegateType: $.support.transition.end,
+      handle: function (e) {
+        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, 
arguments)
+      }
+    }
+  })
+
+}(jQuery);

http://git-wip-us.apache.org/repos/asf/arrow-site/blob/3cd84682/build/blog/2017/05/07/0.3-release-japanese/index.html
----------------------------------------------------------------------
diff --git a/build/blog/2017/05/07/0.3-release-japanese/index.html 
b/build/blog/2017/05/07/0.3-release-japanese/index.html
new file mode 100644
index 0000000..20aaabd
--- /dev/null
+++ b/build/blog/2017/05/07/0.3-release-japanese/index.html
@@ -0,0 +1,288 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <head>
+    <meta charset="UTF-8">
+    <title>Apache Arrow Homepage</title>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="generator" content="Jekyll v3.4.3">
+    <!-- The above 3 meta tags *must* come first in the head; any other head 
content must come *after* these tags -->
+    <link rel="icon" type="image/x-icon" href="/favicon.ico">
+
+    <link rel="stylesheet" 
href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic,900">
+
+    <link href="/css/main.css" rel="stylesheet">
+    <link href="/css/syntax.css" rel="stylesheet">
+    <script src="https://code.jquery.com/jquery-3.2.1.min.js";
+            integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
+            crossorigin="anonymous"></script>
+    <script src="/assets/javascripts/bootstrap.min.js"></script>
+    
+    <!-- Global Site Tag (gtag.js) - Google Analytics -->
+<script async 
src="https://www.googletagmanager.com/gtag/js?id=UA-107500873-1";></script>
+<script>
+  window.dataLayer = window.dataLayer || [];
+  function gtag(){dataLayer.push(arguments)};
+  gtag('js', new Date());
+
+  gtag('config', 'UA-107500873-1');
+</script>
+
+    
+  </head>
+
+
+
+<body class="wrap">
+  <div class="container">
+    <nav class="navbar navbar-default">
+  <div class="container-fluid">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle" data-toggle="collapse" 
data-target="#arrow-navbar">
+        <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="/">Apache 
Arrow&#8482;&nbsp;&nbsp;&nbsp;</a>
+    </div>
+
+    <!-- Collect the nav links, forms, and other content for toggling -->
+    <div class="collapse navbar-collapse" id="arrow-navbar">
+      <ul class="nav navbar-nav">
+        <li class="dropdown">
+          <a href="#" class="dropdown-toggle" data-toggle="dropdown"
+             role="button" aria-haspopup="true"
+             aria-expanded="false">Project Links<span class="caret"></span>
+          </a>
+          <ul class="dropdown-menu">
+            <li><a href="/install/">Install</a></li>
+            <li><a href="/blog/">Blog</a></li>
+            <li><a href="/release/">Releases</a></li>
+            <li><a href="https://issues.apache.org/jira/browse/ARROW";>Issue 
Tracker</a></li>
+            <li><a href="https://github.com/apache/arrow";>Source Code</a></li>
+            <li><a 
href="http://mail-archives.apache.org/mod_mbox/arrow-dev/";>Mailing List</a></li>
+            <li><a href="https://apachearrowslackin.herokuapp.com";>Slack 
Channel</a></li>
+            <li><a href="/committers/">Committers</a></li>
+            <li><a href="/powered_by/">Powered By</a></li>
+          </ul>
+        </li>
+        <li class="dropdown">
+          <a href="#" class="dropdown-toggle" data-toggle="dropdown"
+             role="button" aria-haspopup="true"
+             aria-expanded="false">Specification<span class="caret"></span>
+          </a>
+          <ul class="dropdown-menu">
+            <li><a href="/docs/memory_layout.html">Memory Layout</a></li>
+            <li><a href="/docs/metadata.html">Metadata</a></li>
+            <li><a href="/docs/ipc.html">Messaging / IPC</a></li>
+          </ul>
+        </li>
+
+        <li class="dropdown">
+          <a href="#" class="dropdown-toggle" data-toggle="dropdown"
+             role="button" aria-haspopup="true"
+             aria-expanded="false">Documentation<span class="caret"></span>
+          </a>
+          <ul class="dropdown-menu">
+            <li><a href="/docs/python">Python</a></li>
+            <li><a href="/docs/cpp">C++ API</a></li>
+            <li><a href="/docs/java">Java API</a></li>
+            <li><a href="/docs/c_glib">C GLib API</a></li>
+          </ul>
+        </li>
+        <!-- <li><a href="/blog">Blog</a></li> -->
+        <li class="dropdown">
+          <a href="#" class="dropdown-toggle" data-toggle="dropdown"
+             role="button" aria-haspopup="true"
+             aria-expanded="false">ASF Links<span class="caret"></span>
+          </a>
+          <ul class="dropdown-menu">
+            <li><a href="http://www.apache.org/";>ASF Website</a></li>
+            <li><a href="http://www.apache.org/licenses/";>License</a></li>
+            <li><a 
href="http://www.apache.org/foundation/sponsorship.html";>Donate</a></li>
+            <li><a 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li>
+            <li><a href="http://www.apache.org/security/";>Security</a></li>
+          </ul>
+        </li>
+      </ul>
+      <a href="http://www.apache.org/";>
+        <img style="float:right;" src="/img/asf_logo.svg" width="120px"/>
+      </a>
+      </div><!-- /.navbar-collapse -->
+    </div>
+  </nav>
+
+
+    <h2>
+      Apache Arrow 0.3.0リリース
+      <a href="/blog/2017/05/07/0.3-release-japanese/" class="permalink" 
title="Permalink">∞</a>
+    </h2>
+
+    
+
+    <div class="panel">
+      <div class="panel-body">
+        <div>
+          <span class="label label-default">Published</span>
+          <span class="published">
+            <i class="fa fa-calendar"></i>
+            07 May 2017
+          </span>
+        </div>
+        <div>
+          <span class="label label-default">By</span>
+          <a href="http://wesmckinney.com";><i class="fa fa-user"></i> Wes 
McKinney (wesm)</a>
+        </div>
+      </div>
+    </div>
+
+    <!--
+
+-->
+
+<p><a href="/blog/2017/05/07/0.3-release/">原文(English)</a></p>
+
+<p>Apache Arrowチーム
は0.3.0のリリースをアナウンスできてうれしいです。2月にリリースした0.2.0から10週間の活発な開発の結果が今回のリリースです。<a
 
href="https://github.com/apache/arrow/graphs/contributors";><strong>23人のコントリビューター</strong></a>が<a
 
href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20ARROW%20AND%20status%20in%20(Resolved%2C%20Closed)%20AND%20fixVersion%20%3D%200.3.0"><strong>306個のJIRAのissueを解決</strong></a>しました。</p>
+
+<p>複数のArrowの実装にたくさんの新しい機能を追加
しています。2017年、特に注力して開発するのは、インメモリー用のフォーマット、型のメタデータ、メッセージング用のプロトコルです。これは、ビッグデータアプリケーションに<strong>安定していてプロダクションで使える基盤</strong>を提供するためです。高性能IOとインメモリーデータ処理にArrowを活用するために、<a
 href="http://spark.apache.org";>Apache Spark</a>・<a 
href="http://www.geomesa.org/";>GeoMesa</a>コミュニティーと協力していてとてもエキサイティングです。</p>
+
+<p>それぞれのプラットフォームでArrowを使う方法は<a 
href="http://arrow.apache.org/install";>インストールページ</a>を見てくã
 ã•い。</p>
+
+<p>Arrowでビッグデータシステム
を高速化するケースを増やすために、近いうちにApache 
Arrowのロードマップを公開する予定です。</p>
+
+<p>Arrowの開発に参加
するコントリビューターを募集しています。すでにArrowの開発に参åŠ
 
しているコミュニティーからのコントリビューターもそうですし、まã
 å‚加
していないGo、R、Juliaといったコミュニティーからのコントリビューターも募集しています。</p>
+
+<h3 
id="ファイルフォーマットとストリーミングフォーマットの強化">ファイルフォーマットとストリーミングフォーマットの強化</h3>
+
+<p>0.2.0では<strong>ランダム
アクセス</strong>用と<strong>ストリーミング</strong>用のArrowのワイヤーフォーマットを導å
…¥ã—ました。実装の詳細は<a 
href="http://arrow.apache.org/docs/ipc.html";>IPC仕様</a>を見てくだ
さい。ユースケースは<a 
href="http://wesmckinney.com/blog/arrow-streaming-columnar/";>使用例を紹介したブログ</a>を見てくã
 
さい。これらのフォーマットを使うと低オーバーヘッド・コピーなしでArrowのレコードバッチのペイロードにアクセスできます。</p>
+
+<p>0.3.0ではこのバイナリーフォマットの細かい詳細をたくさん固めました。Java、C++、Python間の連携のテストおよびそれぞれ言語での単体テストの整備も進めました。<a
 href="http://github.com/google/flatbuffers";>Google 
Flatbuffers</a>は、前方互換性を壊さずにメタデータに新しい機能を追åŠ
 ã™ã‚‹ã®ã«éžå¸¸ã«åŠ©ã‹ã‚Šã¾ã—ãŸã€‚</p>
+
+<p>まだバイナリーフォーマットの前方互換性を必
ず壊さないと約束できる状æ…
‹ã§ã¯ã‚りませんが(もしかしたら変更する必
要があるなにかが見つかるかもしれない)、メジャーリリース間では不å¿
…要に互換性を壊さないように努力するつもりです。Apache 
ArrowのWebサイト、各コンポーネントのユーザー向けのドキュメントおよびAPIドキュメントへのコントリビューションを非常に歓迎します。</p>
+
+<h3 
id="辞書エンコーディングのサポート">辞書エンコーディングのサポート</h3>
+
+<p><a href="http://www.geomesa.org/";>GeoMesa</a>プロジェクトの<a 
href="https://github.com/elahrvivaz";>Emilio Lahr-Vivaz</a>はJavaのArrow実装
に辞書エンコード対応ベクターをコントリビュートしました。これを受けて、C++とPythonでもサポートしました。(<code
 
class="highlighter-rouge">pandas.Categorical</code>とも連携できます。)辞書エンコーディング用のインテグレーションテスト(C++とJava間でこのデータを送受信するテスト)はまã
 å®Œæˆã—ていませんが、0.4.0までには完成させたいです。</p>
+
+<p>これはカテゴリーデータ用の一般的なデータ表現テクニックです。これを使うと、複数のレコードバッチでå
…±é€šã®ã€Œè¾žæ›¸ã€ã‚’å…
±æœ‰ã—、各レコードバッチの値はこの辞書を参ç…
§ã™ã‚‹æ•´æ•°ã«ãªã‚Šã¾ã™ã€‚このデータは統計的言語(statistical 
language)の分野では「カテゴリー(categorical)」や「因
子(factor)」と呼ばれています。Apache 
Parquetのようなファイルフォーマットの分野ではデータ圧縮のためã
 ã‘に使われています。</p>
+
+<h3 
id="日付時刻固定長型の拡張">日付、時刻、固定長型の拡張</h3>
+
+<p>0.2.0では現実に使われている日付・時刻型をインテグレーションテスト付きで完å
…¨ã«ã‚µãƒãƒ¼ãƒˆã™ã‚‹ã“とを諦めました。これらは<a 
href="http://parquet.apache.org";>Apache Parquet</a>とApache 
Sparkとの連携に必要な機能です。</p>
+
+<ul>
+  <li><strong>日付</strong>: 
32-bit(日単位)と64-bit(ミリ秒単位)</li>
+  <li><strong>時刻</strong>: 
単位付き64-bit整数(単位:秒、ミリ秒、マイクロ秒、ナノ秒)</li>
+  <li><strong>タイム
スタンプ(UNIXエポックからの経過時間)</strong>: 
単位付き64-bit整数のタイムゾーン付きとタイム
ゾーンなし</li>
+  <li><strong>固定長バイナリー</strong>: 
決まったバイト数のプリミティブな値</li>
+  <li><strong>固定長リスト</strong>: 各要素
が同じサイズのリスト(要素
のベクターとは別にオフセットのベクターを持つ必
要がない)</li>
+</ul>
+
+<p>C++のArrow実装では、<a 
href="https://github.com/boostorg/multiprecision";>Boost.Multiprecision</a>を使ったexactな小数のサポートを実験的に追åŠ
 ã—ました。ただし、Java実装とC++実装
間での小数のメモリーフォーマットはまだ
固まっていません。</p>
+
+<h3 
id="cとpythonのwindowsサポート">C++とPythonのWindowsサポート</h3>
+
+<p>一般的なC++とPythonでの開発用に、パッケージ周りの改良も多数å
…¥ã£ã¦ã„ます。0.3.0はVisual 
Studio(MSVC)2015と2017を使ってWindowsを完å…
¨ã«ã‚µãƒãƒ¼ãƒˆã—た最初のバージョンです。AppveyorでMSVC用のCIを実行しています。Windows上でソースからビルドするためのガイドも書きました。<a
 
href="https://github.com/apache/arrow/blob/master/cpp/apidoc/Windows.md";>C++</a>用と<a
 
href="https://github.com/apache/arrow/blob/master/python/doc/source/development.rst";>Python</a>用。</p>
+
+<p><a 
href="https://conda-forge.github.io";>conda-forge</a>からWindows用のArrowのPythonライブラリーをインストールできます。</p>
+
+<div class="language-shell highlighter-rouge"><pre 
class="highlight"><code>conda install pyarrow -c conda-forge
+</code></pre>
+</div>
+
+<h3 
id="cglibバインディングとrubylua他のサポート">C(GLib)バインディングとRuby・Lua・他のサポート</h3>
+
+<p><a href="http://github.com/kou";>Kouhei Sutou</a>は新しいApache 
Arrowのコントリビューターです。Linux用の(ArrowのC++実装
の)GLibを使ったCバインディングをコントリビュートしました。<a
 href="https://wiki.gnome.org/Projects/GObjectIntrospection";>GObject 
Introspection</a>というCのミドルウェアを使うことでRuby、Lua、Goや<a
 
href="https://wiki.gnome.org/Projects/GObjectIntrospection/Users";>他にも様ã€
…なプログラミング言語</a>でシーム
レスにバインディングを使うことができます。これらのバインディングがどのように動いているか、これらのバインディングをどのように使うかを説明するブログ記事が別途å¿
…要な気がします。</p>
+
+<h3 id="pysparkを使ったapache-sparkとの連携">PySparkを使ったApache 
Sparkとの連携</h3>
+
+<p><a 
href="https://issues.apache.org/jira/browse/SPARK-13534";>SPARK-13534</a>でApache
 Sparkコミュニティーと協力しています。PySparkでの<code 
class="highlighter-rouge">DataFrame.toPandas</code>をArrowを使って高速化しようとしています。効率的なデータのシリアライズにより<a
 
href="https://github.com/apache/spark/pull/15821#issuecomment-282175163";><strong>40倍以上高速化</strong></a>できるケースがあります。</p>
+
+<p>PySparkでArrowを使うことでこれまでできなかったパフォーマンス最適化の道が開けました。特に、UDFの評価まわりでいろいろやれることがあるでしょう。(たとえば、Pythonのラãƒ
 ãƒ€é–¢æ•°ã‚’使って<code class="highlighter-rouge">map</code>・<code 
class="highlighter-rouge">filter</code>を実行するケース。)</p>
+
+<h3 id="python実装
での新しい機能メモリービューfeatherapache-parquetのサポート">Python実è£
…での新しい機能:メモリービュー、Feather、Apache 
Parquetのサポート</h3>
+
+<p>ArrowのPythonライブラリーである<code 
class="highlighter-rouge">pyarrow</code>は<code 
class="highlighter-rouge">libarrow</code>と<code 
class="highlighter-rouge">libarrow_python</code>というC++ライブラリーのCythonバインディングです。<code
 class="highlighter-rouge">pyarrow</code>はNumPyと<a 
href="http://pandas.pydata.org";>pandas</a>とPythonの標準ライブラリー間のシーãƒ
 ãƒ¬ã‚¹ãªé€£æºã‚’実現します。</p>
+
+<p>ArrowのC++ライブラリーで最も重要なものは<code 
class="highlighter-rouge">arrow::Buffer</code>オブジェクトです。これはメモリービューを管理します。コピーなしの読み込みとスライスをサポートしている点が重要です。<a
 href="https://github.com/JeffKnupp";>Jeff 
Knupp</a>はArrowのバッファーとPythonのバッファープロトコルとmemoryviewの連携処理をコントリビュートしました。これにより次のようなことができるようになりました。</p>
+
+<div class="language-python highlighter-rouge"><pre 
class="highlight"><code><span class="n">In</span> <span class="p">[</span><span 
class="mi">6</span><span class="p">]:</span> <span class="kn">import</span> 
<span class="nn">pyarrow</span> <span class="kn">as</span> <span 
class="nn">pa</span>
+
+<span class="n">In</span> <span class="p">[</span><span 
class="mi">7</span><span class="p">]:</span> <span class="n">buf</span> <span 
class="o">=</span> <span class="n">pa</span><span class="o">.</span><span 
class="n">frombuffer</span><span class="p">(</span><span 
class="n">b</span><span class="s">'foobarbaz'</span><span class="p">)</span>
+
+<span class="n">In</span> <span class="p">[</span><span 
class="mi">8</span><span class="p">]:</span> <span class="n">buf</span>
+<span class="n">Out</span><span class="p">[</span><span 
class="mi">8</span><span class="p">]:</span> <span class="o">&lt;</span><span 
class="n">pyarrow</span><span class="o">.</span><span class="n">_io</span><span 
class="o">.</span><span class="n">Buffer</span> <span class="n">at</span> <span 
class="mh">0x7f6c0a84b538</span><span class="o">&gt;</span>
+
+<span class="n">In</span> <span class="p">[</span><span 
class="mi">9</span><span class="p">]:</span> <span 
class="n">memoryview</span><span class="p">(</span><span 
class="n">buf</span><span class="p">)</span>
+<span class="n">Out</span><span class="p">[</span><span 
class="mi">9</span><span class="p">]:</span> <span class="o">&lt;</span><span 
class="n">memory</span> <span class="n">at</span> <span 
class="mh">0x7f6c0a8c5e88</span><span class="o">&gt;</span>
+
+<span class="n">In</span> <span class="p">[</span><span 
class="mi">10</span><span class="p">]:</span> <span class="n">buf</span><span 
class="o">.</span><span class="n">to_pybytes</span><span class="p">()</span>
+<span class="n">Out</span><span class="p">[</span><span 
class="mi">10</span><span class="p">]:</span> <span class="n">b</span><span 
class="s">'foobarbaz'</span>
+</code></pre>
+</div>
+
+<p>C++でのParquet実装である<a 
href="https://github.com/apache/parquet-cpp";>parquet-cpp</a>を使うことで大å¹
…に<a href="http://parquet.apache.org";><strong>Apache 
Parquet</strong></a>サポートを改良しました。たとえば、ディスク上にあるかHDFS上にあるか関係なく、パーティションされたデータセットをサポートしました。<a
 
href="https://github.com/dask/dask/commit/68f9e417924a985c1f2e2a587126833c70a2e9f4";>Daskプロジェクト</a>はArrowを使ったParquetサポートを実è£
…した最初のプロジェクトです。Dask開発者
とはpandsデータを分散処理する文脈でさらに協力できることを楽しみにしています。</p>
+
+<p>pandasを成熟させるためにArrowを改良することもあり、<a 
href="https://github.com/wesm/feather";><strong>Featherフォーマット</strong></a>の実è£
…
をマージしたのもその1つです。Featherフォーマットは本質的にはArrowのランダãƒ
 
アクセスフォーマットの特別なケースの1つです。ArrowのコードベースでFeatherの開発を続けます。たとえば、今のFeatherはArrowのPythonバインディングのレイヤーを使うことでPythonのファイルオブジェクトを読み書きできるようになっています。</p>
+
+<p><code class="highlighter-rouge">DatetimeTZ</code>や<code 
class="highlighter-rouge">Categorical</code>といったpandas固有のデータ型のちゃんとした(robust)サポートも実è£
…しました。</p>
+
+<h3 
id="cライブラリーでのテンソルサポート">C++ライブラリーでのテンソルサポート</h3>
+
+<p>Apache Arrowはコピーなしでå…
±æœ‰ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’管理するツールという側面があります。機械学習アプリケーションの文脈でこの機能への関心が増えています。UCバークレーæ
 ¡ã®<a href="https://rise.cs.berkeley.edu/";>RISELab</a>の<a 
href="https://github.com/ray-project/ray";>Rayプロジェクト</a>が最初の例です。</p>
+
+<p>機械学習ではは「テンソル」とも呼ばれる多次元é…
åˆ—というデータ構造を扱います。このようなデータ構造
はArrowのカラムフォーマットがサポートしているデータ構造
の範囲を超えています。今回のケースでは、<a 
href="http://arrow.apache.org/docs/cpp/classarrow_1_1_tensor.html";><code 
class="highlighter-rouge">arrow::Tensor</code></a>というC++の型を追加
で実装しました。これはArrowのコピーなしのå…
±æœ‰ãƒ¡ãƒ¢ãƒªãƒ¼æ©Ÿèƒ½ã‚’活用して実装
しました。(メモリーの生存期間の管理に<code 
class="highlighter-rouge">arrow::Buffer</code>を使いました。)C++実装
では、これからも、å…
±é€šã®IO・メモリー管理ツールとしてArrowを活用できるようにするため、追åŠ
 ã®ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’提供するつもりです。</p>
+
+<h3 id="javascripttypescript実装の開始">JavaScript(TypeScript)実装
の開始</h3>
+
+<p><a href="https://github.com/TheNeuralBit";>Brian 
Hulette</a>はNodeJSとWebブラウザー上で動くアプリケーションで使うために<a
 
href="https://github.com/apache/arrow/tree/master/js";>TypeScript</a>でのArrowの実è£
…
を始めました。FlatBuffersがJavaScriptをファーストクラスでサポートしているので実è£
…が捗ります。</p>
+
+<h3 id="webサイトと開発者
用ドキュメントの改良">Webサイトと開発者
用ドキュメントの改良</h3>
+
+<p>0.2.0をリリースしてからドキュメントとブログをå…
¬é–‹ã™ã‚‹ãŸã‚ã«Webサイトのシステムを<a 
href="https://jekyllrb.com";>Jekyll</a>ベースで作りました。Kouhei 
Sutouは<a 
href="https://github.com/red-data-tools/jekyll-jupyter-notebook";>Jekyll Jupyter 
Notebookプラグイン</a>を作りました。これによりArrowのWebサイトのコンテンツを作るためにJupyterを使うことができます。</p>
+
+<p>WebサイトにはC、C++、Java、PythonのAPIドキュメントをå…
¬é–‹ã—ました。これらの中にArrowを使い始めるための有益なæƒ
…報を見つけられるでしょう。</p>
+
+<h3 id="コントリビューター">コントリビューター</h3>
+
+<p>このリリースにパッチをコントリビュートしたみなさんに感謝します。</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>$ git shortlog -sn 
apache-arrow-0.2.0..apache-arrow-0.3.0
+    119 Wes McKinney
+     55 Kouhei Sutou
+     18 Uwe L. Korn
+     17 Julien Le Dem
+      9 Phillip Cloud
+      6 Bryan Cutler
+      5 Philipp Moritz
+      5 Emilio Lahr-Vivaz
+      4 Max Risuhin
+      4 Johan Mabille
+      4 Jeff Knupp
+      3 Steven Phillips
+      3 Miki Tebeka
+      2 Leif Walsh
+      2 Jeff Reback
+      2 Brian Hulette
+      1 Tsuyoshi Ozawa
+      1 rvernica
+      1 Nong Li
+      1 Julien Lafaye
+      1 Itai Incze
+      1 Holden Karau
+      1 Deepak Majeti
+</code></pre>
+</div>
+
+
+
+    <hr/>
+<footer class="footer">
+  <p>Apache Arrow, Arrow, Apache, the Apache feather logo, and the Apache 
Arrow project logo are either registered trademarks or trademarks of The Apache 
Software Foundation in the United States and other countries.</p>
+  <p>&copy; 2017 Apache Software Foundation</p>
+</footer>
+
+  </div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/arrow-site/blob/3cd84682/build/blog/2017/05/07/0.3-release/index.html
----------------------------------------------------------------------
diff --git a/build/blog/2017/05/07/0.3-release/index.html 
b/build/blog/2017/05/07/0.3-release/index.html
new file mode 100644
index 0000000..1b6e0f3
--- /dev/null
+++ b/build/blog/2017/05/07/0.3-release/index.html
@@ -0,0 +1,364 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <head>
+    <meta charset="UTF-8">
+    <title>Apache Arrow Homepage</title>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="generator" content="Jekyll v3.4.3">
+    <!-- The above 3 meta tags *must* come first in the head; any other head 
content must come *after* these tags -->
+    <link rel="icon" type="image/x-icon" href="/favicon.ico">
+
+    <link rel="stylesheet" 
href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic,900">
+
+    <link href="/css/main.css" rel="stylesheet">
+    <link href="/css/syntax.css" rel="stylesheet">
+    <script src="https://code.jquery.com/jquery-3.2.1.min.js";
+            integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
+            crossorigin="anonymous"></script>
+    <script src="/assets/javascripts/bootstrap.min.js"></script>
+    
+    <!-- Global Site Tag (gtag.js) - Google Analytics -->
+<script async 
src="https://www.googletagmanager.com/gtag/js?id=UA-107500873-1";></script>
+<script>
+  window.dataLayer = window.dataLayer || [];
+  function gtag(){dataLayer.push(arguments)};
+  gtag('js', new Date());
+
+  gtag('config', 'UA-107500873-1');
+</script>
+
+    
+  </head>
+
+
+
+<body class="wrap">
+  <div class="container">
+    <nav class="navbar navbar-default">
+  <div class="container-fluid">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle" data-toggle="collapse" 
data-target="#arrow-navbar">
+        <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="/">Apache 
Arrow&#8482;&nbsp;&nbsp;&nbsp;</a>
+    </div>
+
+    <!-- Collect the nav links, forms, and other content for toggling -->
+    <div class="collapse navbar-collapse" id="arrow-navbar">
+      <ul class="nav navbar-nav">
+        <li class="dropdown">
+          <a href="#" class="dropdown-toggle" data-toggle="dropdown"
+             role="button" aria-haspopup="true"
+             aria-expanded="false">Project Links<span class="caret"></span>
+          </a>
+          <ul class="dropdown-menu">
+            <li><a href="/install/">Install</a></li>
+            <li><a href="/blog/">Blog</a></li>
+            <li><a href="/release/">Releases</a></li>
+            <li><a href="https://issues.apache.org/jira/browse/ARROW";>Issue 
Tracker</a></li>
+            <li><a href="https://github.com/apache/arrow";>Source Code</a></li>
+            <li><a 
href="http://mail-archives.apache.org/mod_mbox/arrow-dev/";>Mailing List</a></li>
+            <li><a href="https://apachearrowslackin.herokuapp.com";>Slack 
Channel</a></li>
+            <li><a href="/committers/">Committers</a></li>
+            <li><a href="/powered_by/">Powered By</a></li>
+          </ul>
+        </li>
+        <li class="dropdown">
+          <a href="#" class="dropdown-toggle" data-toggle="dropdown"
+             role="button" aria-haspopup="true"
+             aria-expanded="false">Specification<span class="caret"></span>
+          </a>
+          <ul class="dropdown-menu">
+            <li><a href="/docs/memory_layout.html">Memory Layout</a></li>
+            <li><a href="/docs/metadata.html">Metadata</a></li>
+            <li><a href="/docs/ipc.html">Messaging / IPC</a></li>
+          </ul>
+        </li>
+
+        <li class="dropdown">
+          <a href="#" class="dropdown-toggle" data-toggle="dropdown"
+             role="button" aria-haspopup="true"
+             aria-expanded="false">Documentation<span class="caret"></span>
+          </a>
+          <ul class="dropdown-menu">
+            <li><a href="/docs/python">Python</a></li>
+            <li><a href="/docs/cpp">C++ API</a></li>
+            <li><a href="/docs/java">Java API</a></li>
+            <li><a href="/docs/c_glib">C GLib API</a></li>
+          </ul>
+        </li>
+        <!-- <li><a href="/blog">Blog</a></li> -->
+        <li class="dropdown">
+          <a href="#" class="dropdown-toggle" data-toggle="dropdown"
+             role="button" aria-haspopup="true"
+             aria-expanded="false">ASF Links<span class="caret"></span>
+          </a>
+          <ul class="dropdown-menu">
+            <li><a href="http://www.apache.org/";>ASF Website</a></li>
+            <li><a href="http://www.apache.org/licenses/";>License</a></li>
+            <li><a 
href="http://www.apache.org/foundation/sponsorship.html";>Donate</a></li>
+            <li><a 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li>
+            <li><a href="http://www.apache.org/security/";>Security</a></li>
+          </ul>
+        </li>
+      </ul>
+      <a href="http://www.apache.org/";>
+        <img style="float:right;" src="/img/asf_logo.svg" width="120px"/>
+      </a>
+      </div><!-- /.navbar-collapse -->
+    </div>
+  </nav>
+
+
+    <h2>
+      Apache Arrow 0.3.0 Release
+      <a href="/blog/2017/05/07/0.3-release/" class="permalink" 
title="Permalink">∞</a>
+    </h2>
+
+    
+
+    <div class="panel">
+      <div class="panel-body">
+        <div>
+          <span class="label label-default">Published</span>
+          <span class="published">
+            <i class="fa fa-calendar"></i>
+            07 May 2017
+          </span>
+        </div>
+        <div>
+          <span class="label label-default">By</span>
+          <a href="http://wesmckinney.com";><i class="fa fa-user"></i> Wes 
McKinney (wesm)</a>
+        </div>
+      </div>
+    </div>
+
+    <!--
+
+-->
+
+<p>Translations: <a 
href="/blog/2017/05/07/0.3-release-japanese/">日本語</a></p>
+
+<p>The Apache Arrow team is pleased to announce the 0.3.0 release of the
+project. It is the product of an intense 10 weeks of development since the
+0.2.0 release from this past February. It includes <a 
href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20ARROW%20AND%20status%20in%20(Resolved%2C%20Closed)%20AND%20fixVersion%20%3D%200.3.0"><strong>306
 resolved JIRAs</strong></a>
+from <a href="https://github.com/apache/arrow/graphs/contributors";><strong>23 
contributors</strong></a>.</p>
+
+<p>While we have added many new features to the different Arrow 
implementations,
+one of the major development focuses in 2017 has been hardening the in-memory
+format, type metadata, and messaging protocol to provide a <strong>stable,
+production-ready foundation</strong> for big data applications. We are excited 
to be
+collaborating with the <a href="http://spark.apache.org";>Apache Spark</a> and 
<a href="http://www.geomesa.org/";>GeoMesa</a> communities on
+utilizing Arrow for high performance IO and in-memory data processing.</p>
+
+<p>See the <a href="http://arrow.apache.org/install";>Install Page</a> to learn 
how to get the libraries for your platform.</p>
+
+<p>We will be publishing more information about the Apache Arrow roadmap as we
+forge ahead with using Arrow to accelerate big data systems.</p>
+
+<p>We are looking for more contributors from within our existing communities 
and
+from other communities (such as Go, R, or Julia) to get involved in Arrow
+development.</p>
+
+<h3 id="file-and-streaming-format-hardening">File and Streaming Format 
Hardening</h3>
+
+<p>The 0.2.0 release brought with it the first iterations of the 
<strong>random access</strong>
+and <strong>streaming</strong> Arrow wire formats. See the <a 
href="http://arrow.apache.org/docs/ipc.html";>IPC specification</a> for
+implementation details and <a 
href="http://wesmckinney.com/blog/arrow-streaming-columnar/";>example blog 
post</a> with some use cases. These
+provide low-overhead, zero-copy access to Arrow record batch payloads.</p>
+
+<p>In 0.3.0 we have solidified a number of small details with the binary format
+and improved our integration and unit testing particularly in the Java, C++,
+and Python libraries. Using the <a 
href="http://github.com/google/flatbuffers";>Google Flatbuffers</a> project has 
helped with
+adding new features to our metadata without breaking forward compatibility.</p>
+
+<p>We are not yet ready to make a firm commitment to strong forward 
compatibility
+(in case we find something needs to change) in the binary format, but we will
+make efforts between major releases to not make unnecessary
+breakages. Contributions to the website and component user and API
+documentation would also be most welcome.</p>
+
+<h3 id="dictionary-encoding-support">Dictionary Encoding Support</h3>
+
+<p><a href="https://github.com/elahrvivaz";>Emilio Lahr-Vivaz</a> from the <a 
href="http://www.geomesa.org/";>GeoMesa</a> project contributed Java support
+for dictionary-encoded Arrow vectors. We followed up with C++ and Python
+support (and <code class="highlighter-rouge">pandas.Categorical</code> 
integration). We have not yet implemented
+full integration tests for dictionaries (for sending this data between C++ and
+Java), but hope to achieve this in the 0.4.0 Arrow release.</p>
+
+<p>This common data representation technique for categorical data allows 
multiple
+record batches to share a common “dictionary”, with the values in the 
batches
+being represented as integers referencing the dictionary. This data is called
+“categorical” or “factor” in statistical languages, while in file 
formats like
+Apache Parquet it is strictly used for data compression.</p>
+
+<h3 id="expanded-date-time-and-fixed-size-types">Expanded Date, Time, and 
Fixed Size Types</h3>
+
+<p>A notable omission from the 0.2.0 release was complete and 
integration-tested
+support for the gamut of date and time types that occur in the wild. These are
+needed for <a href="http://parquet.apache.org";>Apache Parquet</a> and Apache 
Spark integration.</p>
+
+<ul>
+  <li><strong>Date</strong>: 32-bit (days unit) and 64-bit (milliseconds 
unit)</li>
+  <li><strong>Time</strong>: 64-bit integer with unit (second, millisecond, 
microsecond, nanosecond)</li>
+  <li><strong>Timestamp</strong>: 64-bit integer with unit, with or without 
timezone</li>
+  <li><strong>Fixed Size Binary</strong>: Primitive values occupying certain 
number of bytes</li>
+  <li><strong>Fixed Size List</strong>: List values with constant size (no 
separate offsets vector)</li>
+</ul>
+
+<p>We have additionally added experimental support for exact decimals in C++ 
using
+<a href="https://github.com/boostorg/multiprecision";>Boost.Multiprecision</a>, 
though we have not yet hardened the Decimal memory
+format between the Java and C++ implementations.</p>
+
+<h3 id="c-and-python-support-on-windows">C++ and Python Support on Windows</h3>
+
+<p>We have made many general improvements to development and packaging for 
general
+C++ and Python development. 0.3.0 is the first release to bring full C++ and
+Python support for Windows on Visual Studio (MSVC) 2015 and 2017. In addition
+to adding Appveyor continuous integration for MSVC, we have also written guides
+for building from source on Windows: <a 
href="https://github.com/apache/arrow/blob/master/cpp/apidoc/Windows.md";>C++</a>
 and <a 
href="https://github.com/apache/arrow/blob/master/python/doc/source/development.rst";>Python</a>.</p>
+
+<p>For the first time, you can install the Arrow Python library on Windows from
+<a href="https://conda-forge.github.io";>conda-forge</a>:</p>
+
+<div class="language-shell highlighter-rouge"><pre 
class="highlight"><code>conda install pyarrow -c conda-forge
+</code></pre>
+</div>
+
+<h3 id="c-glib-bindings-with-support-for-ruby-lua-and-more">C (GLib) Bindings, 
with support for Ruby, Lua, and more</h3>
+
+<p><a href="http://github.com/kou";>Kouhei Sutou</a> is a new Apache Arrow 
contributor and has contributed GLib C
+bindings (to the C++ libraries) for Linux. Using a C middleware framework
+called <a href="https://wiki.gnome.org/Projects/GObjectIntrospection";>GObject 
Introspection</a>, it is possible to use these bindings
+seamlessly in Ruby, Lua, Go, and <a 
href="https://wiki.gnome.org/Projects/GObjectIntrospection/Users";>other 
programming languages</a>. We will
+probably need to publish some follow up blogs explaining how these bindings
+work and how to use them.</p>
+
+<h3 id="apache-spark-integration-for-pyspark">Apache Spark Integration for 
PySpark</h3>
+
+<p>We have been collaborating with the Apache Spark community on <a 
href="https://issues.apache.org/jira/browse/SPARK-13534";>SPARK-13534</a>
+to add support for using Arrow to accelerate <code 
class="highlighter-rouge">DataFrame.toPandas</code> in
+PySpark. We have observed over <a 
href="https://github.com/apache/spark/pull/15821#issuecomment-282175163";><strong>40x
 speedup</strong></a> from the more efficient
+data serialization.</p>
+
+<p>Using Arrow in PySpark opens the door to many other performance 
optimizations,
+particularly around UDF evaluation (e.g. <code 
class="highlighter-rouge">map</code> and <code 
class="highlighter-rouge">filter</code> operations with
+Python lambda functions).</p>
+
+<h3 id="new-python-feature-memory-views-feather-apache-parquet-support">New 
Python Feature: Memory Views, Feather, Apache Parquet support</h3>
+
+<p>Arrow’s Python library <code class="highlighter-rouge">pyarrow</code> is 
a Cython binding for the <code class="highlighter-rouge">libarrow</code> and
+<code class="highlighter-rouge">libarrow_python</code> C++ libraries, which 
handle inteoperability with NumPy,
+<a href="http://pandas.pydata.org";>pandas</a>, and the Python standard 
library.</p>
+
+<p>At the heart of Arrow’s C++ libraries is the <code 
class="highlighter-rouge">arrow::Buffer</code> object, which is a
+managed memory view supporting zero-copy reads and slices. <a 
href="https://github.com/JeffKnupp";>Jeff Knupp</a>
+contributed integration between Arrow buffers and the Python buffer protocol
+and memoryviews, so now code like this is possible:</p>
+
+<div class="language-python highlighter-rouge"><pre 
class="highlight"><code><span class="n">In</span> <span class="p">[</span><span 
class="mi">6</span><span class="p">]:</span> <span class="kn">import</span> 
<span class="nn">pyarrow</span> <span class="kn">as</span> <span 
class="nn">pa</span>
+
+<span class="n">In</span> <span class="p">[</span><span 
class="mi">7</span><span class="p">]:</span> <span class="n">buf</span> <span 
class="o">=</span> <span class="n">pa</span><span class="o">.</span><span 
class="n">frombuffer</span><span class="p">(</span><span 
class="n">b</span><span class="s">'foobarbaz'</span><span class="p">)</span>
+
+<span class="n">In</span> <span class="p">[</span><span 
class="mi">8</span><span class="p">]:</span> <span class="n">buf</span>
+<span class="n">Out</span><span class="p">[</span><span 
class="mi">8</span><span class="p">]:</span> <span class="o">&lt;</span><span 
class="n">pyarrow</span><span class="o">.</span><span class="n">_io</span><span 
class="o">.</span><span class="n">Buffer</span> <span class="n">at</span> <span 
class="mh">0x7f6c0a84b538</span><span class="o">&gt;</span>
+
+<span class="n">In</span> <span class="p">[</span><span 
class="mi">9</span><span class="p">]:</span> <span 
class="n">memoryview</span><span class="p">(</span><span 
class="n">buf</span><span class="p">)</span>
+<span class="n">Out</span><span class="p">[</span><span 
class="mi">9</span><span class="p">]:</span> <span class="o">&lt;</span><span 
class="n">memory</span> <span class="n">at</span> <span 
class="mh">0x7f6c0a8c5e88</span><span class="o">&gt;</span>
+
+<span class="n">In</span> <span class="p">[</span><span 
class="mi">10</span><span class="p">]:</span> <span class="n">buf</span><span 
class="o">.</span><span class="n">to_pybytes</span><span class="p">()</span>
+<span class="n">Out</span><span class="p">[</span><span 
class="mi">10</span><span class="p">]:</span> <span class="n">b</span><span 
class="s">'foobarbaz'</span>
+</code></pre>
+</div>
+
+<p>We have significantly expanded <a 
href="http://parquet.apache.org";><strong>Apache Parquet</strong></a> support 
via the C++
+Parquet implementation <a 
href="https://github.com/apache/parquet-cpp";>parquet-cpp</a>. This includes 
support for partitioned
+datasets on disk or in HDFS. We added initial Arrow-powered Parquet support <a 
href="https://github.com/dask/dask/commit/68f9e417924a985c1f2e2a587126833c70a2e9f4";>in
+the Dask project</a>, and look forward to more collaborations with the Dask
+developers on distributed processing of pandas data.</p>
+
+<p>With Arrow’s support for pandas maturing, we were able to merge in the
+<a href="https://github.com/wesm/feather";><strong>Feather format</strong></a> 
implementation, which is essentially a special case of
+the Arrow random access format. We’ll be continuing Feather development 
within
+the Arrow codebase. For example, Feather can now read and write with Python
+file objects using Arrow’s Python binding layer.</p>
+
+<p>We also implemented more robust support for pandas-specific data types, like
+<code class="highlighter-rouge">DatetimeTZ</code> and <code 
class="highlighter-rouge">Categorical</code>.</p>
+
+<h3 id="support-for-tensors-and-beyond-in-c-library">Support for Tensors and 
beyond in C++ Library</h3>
+
+<p>There has been increased interest in using Apache Arrow as a tool for 
zero-copy
+shared memory management for machine learning applications. A flagship example
+is the <a href="https://github.com/ray-project/ray";>Ray project</a> from the 
UC Berkeley <a href="https://rise.cs.berkeley.edu/";>RISELab</a>.</p>
+
+<p>Machine learning deals in additional kinds of data structures beyond what 
the
+Arrow columnar format supports, like multidimensional arrays aka 
“tensors”. As
+such, we implemented the <a 
href="http://arrow.apache.org/docs/cpp/classarrow_1_1_tensor.html";><code 
class="highlighter-rouge">arrow::Tensor</code></a> C++ type which can utilize 
the
+rest of Arrow’s zero-copy shared memory machinery (using <code 
class="highlighter-rouge">arrow::Buffer</code> for
+managing memory lifetime). In C++ in particular, we will want to provide for
+additional data structures utilizing common IO and memory management tools.</p>
+
+<h3 id="start-of-javascript-typescript-implementation">Start of JavaScript 
(TypeScript) Implementation</h3>
+
+<p><a href="https://github.com/TheNeuralBit";>Brian Hulette</a> started 
developing an Arrow implementation in
+<a href="https://github.com/apache/arrow/tree/master/js";>TypeScript</a> for 
use in NodeJS and browser-side applications. We are
+benefitting from Flatbuffers’ first class support for JavaScript.</p>
+
+<h3 id="improved-website-and-developer-documentation">Improved Website and 
Developer Documentation</h3>
+
+<p>Since 0.2.0 we have implemented a new website stack for publishing
+documentation and blogs based on <a href="https://jekyllrb.com";>Jekyll</a>. 
Kouhei Sutou developed a <a 
href="https://github.com/red-data-tools/jekyll-jupyter-notebook";>Jekyll
+Jupyter Notebook plugin</a> so that we can use Jupyter to author content for
+the Arrow website.</p>
+
+<p>On the website, we have now published API documentation for the C, C++, 
Java,
+and Python subcomponents. Within these you will find easier-to-follow developer
+instructions for getting started.</p>
+
+<h3 id="contributors">Contributors</h3>
+
+<p>Thanks to all who contributed patches to this release.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>$ git shortlog -sn 
apache-arrow-0.2.0..apache-arrow-0.3.0
+    119 Wes McKinney
+     55 Kouhei Sutou
+     18 Uwe L. Korn
+     17 Julien Le Dem
+      9 Phillip Cloud
+      6 Bryan Cutler
+      5 Philipp Moritz
+      5 Emilio Lahr-Vivaz
+      4 Max Risuhin
+      4 Johan Mabille
+      4 Jeff Knupp
+      3 Steven Phillips
+      3 Miki Tebeka
+      2 Leif Walsh
+      2 Jeff Reback
+      2 Brian Hulette
+      1 Tsuyoshi Ozawa
+      1 rvernica
+      1 Nong Li
+      1 Julien Lafaye
+      1 Itai Incze
+      1 Holden Karau
+      1 Deepak Majeti
+</code></pre>
+</div>
+
+
+
+    <hr/>
+<footer class="footer">
+  <p>Apache Arrow, Arrow, Apache, the Apache feather logo, and the Apache 
Arrow project logo are either registered trademarks or trademarks of The Apache 
Software Foundation in the United States and other countries.</p>
+  <p>&copy; 2017 Apache Software Foundation</p>
+</footer>
+
+  </div>
+</body>
+</html>

Reply via email to