From 2f06441da1ce79abeaead253865d1ebd6b608809 Mon Sep 17 00:00:00 2001 From: IMAMASU Ryohei Date: Thu, 7 Nov 2019 01:43:10 +0900 Subject: [PATCH] Refine the structure of directory to upgrade Sphinx and Python --- .gitignore | 8 +- Makefile | 99 ----- OMakefile | 131 ------- OMakeroot | 45 --- bootstrap.py | 260 ------------- build.sh | 13 + buildout.cfg | 14 - ja.json | 22 -- make.bat | 113 ------ source/OMakefile | 0 source/_static/custom.css | 0 source/_static/favicon.ico | Bin source/_static/tanakh/pfi.jpg | Bin 5343 -> 0 bytes source/_static/tanakh/presen.html | 611 ------------------------------ source/_static/tanakh/rpc-web.png | Bin 96583 -> 0 bytes source/_static/tanakh/style.css | 15 - source/_static/tanakh/syntax.css | 17 - source/conf.py | 311 +++------------ source/en/conf.py | 2 - source/ja/conf.py | 2 - supplement/html/ja/index_ja.html | 11 - supplement/{html => }/index.html | 0 22 files changed, 58 insertions(+), 1616 deletions(-) delete mode 100644 Makefile delete mode 100644 OMakefile delete mode 100644 OMakeroot delete mode 100644 bootstrap.py create mode 100755 build.sh delete mode 100644 buildout.cfg delete mode 100644 ja.json delete mode 100644 make.bat delete mode 100644 source/OMakefile mode change 100755 => 100644 source/_static/custom.css mode change 100755 => 100644 source/_static/favicon.ico delete mode 100644 source/_static/tanakh/pfi.jpg delete mode 100644 source/_static/tanakh/presen.html delete mode 100644 source/_static/tanakh/rpc-web.png delete mode 100644 source/_static/tanakh/style.css delete mode 100644 source/_static/tanakh/syntax.css delete mode 100644 source/en/conf.py delete mode 100644 source/ja/conf.py delete mode 100644 supplement/html/ja/index_ja.html rename supplement/{html => }/index.html (100%) diff --git a/.gitignore b/.gitignore index 7562f2d..394404d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,7 @@ -.omakedb* -*.omc -.installed.cfg -bin -eggs -parts -develop-eggs /build/ /jubatus.github.com/ /jubakit/ *~ *.swp *.pyc +__pycache__ diff --git a/Makefile b/Makefile deleted file mode 100644 index a3effa7..0000000 --- a/Makefile +++ /dev/null @@ -1,99 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = build - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source - -.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest singlehtml - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Jubatus.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Jubatus.qhc" - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ - "run these through (pdf)latex." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -pdf: - $(SPHINXBUILD) -b pdf $(ALLSPHINXOPTS) _build/pdf - @echo - @echo "Build finished. The PDF files are in _build/pdf." diff --git a/OMakefile b/OMakefile deleted file mode 100644 index ac85982..0000000 --- a/OMakefile +++ /dev/null @@ -1,131 +0,0 @@ - -.SUBDIRS: source - -# .DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES)) -.DEFAULT: help - -BOOTSTRAP = ./bootstrap.py -BUILDOUT = bin/buildout - -.PHONY: buildout - -# for Sphinx - -sphinxopts = -SPHINXBUILD = sphinx-build -paper = -builddir = build -srcdir = source -supplementdir = supplement -langs = en ja -sources = $(find $(srcdir) -name *.rst) - -# Internal variables. -paperopt_a4 = -D latex_paper_size=a4 -paperopt_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = $(sphinxopts) # $(paperopt_$(paper)) $(sphinxopts) . - -.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex man changes linkcheck doctest singlehtml - -$(BUILDOUT): - python $(BOOTSTRAP) -d init - -buildout: $(BUILDOUT) $(BOOTSTRAP) buildout.cfg - -$(SPHINXBUILD): buildout - $(BUILDOUT) - -help_message = $""" -Please use `make ' where is one of - html to make standalone HTML files - dirhtml to make HTML files named index.html in directories - pickle to make pickle files - json to make JSON files - htmlhelp to make HTML files and a HTML help project - qthelp to make HTML files and a qthelp project - latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - man to make manual page files - changes to make an overview of all changed/added/deprecated items - linkcheck to check all external links for integrity - doctest to run all doctests embedded in the documentation (if enabled) -""" - -help: - eprintln( $(help_message) ) - -clean: - -rm -rf $(builddir)/* - -DepBuild(target, message) = - $(target): $(sources) # $(SPHINXBUILD) - foreach(lang, $(langs)): - $(SPHINXBUILD) -b $(target) $(ALLSPHINXOPTS) \ - -d $(builddir)/doctrees/$(lang) \ - $(srcdir)/$(lang) \ - $(builddir)/$(target)/$(lang) - /bin/cp -rf $(supplementdir)/* $(builddir) - eprintln( $(message) ) - -# # In fact I'd like to write like following: -# Dep_map. = -# extends $(Map) -# $|json| = $''' hoge ''' -# $|pickle| = $''' hage ''' -# $(Dep_map.map $(DepBuild) ) - -DepBuild( singlehtml, $'''' - Build finished. The HTML pages are in $(builddir)/html. - '''' ) - -DepBuild( html, $'''' - Build finished. The HTML pages are in $(builddir)/html. - '''' ) - -DepBuild( dirhtml, $'''' - Build finished. The HTML pages are in $(builddir)/dirhtml. - '''') - -DepBuild( pickle, $'''' - Build finished; now you can process the pickle files. - '''') - -DepBuild( json, $'''' - Build finished; now you can process the JSON files. - '''') - -DepBuild( htmlhelp, $''' - Build finished; now you can run HTML Help Workshop with the - .hhp project file in $(builddir)/htmlhelp. - ''') - -DepBuild( qthelp, $'''' - Build finished; now you can run "qcollectiongenerator" with the - .qhcp project file in $(builddir)/qthelp, like this: - # qcollectiongenerator $(builddir)/qthelp/CouchDBtheDefinitiveGuideTranslationtoJapanese.qhcp - To view the help file: - # assistant -collectionFile $(builddir)/qthelp/CouchDBtheDefinitiveGuideTranslationtoJapanese.qhc - '''') - -DepBuild( latex, $'''' - Build finished; the LaTeX files are in $(builddir)/latex. - Run 'make all-pdf' or 'make all-ps' in that directory to - run these through (pdf)latex. - '''') - -DepBuild( man, $'''' - Build finished. The manual pages are in $(builddir)/man. - '''' ) - -DepBuild( changes, $'''' - The overview file is in $(builddir)/changes. - '''') - -DepBuild( linkcheck, $'''' - Link check complete; look for any errors in the above output - or in $(builddir)/linkcheck/output.txt. - '''') - -DepBuild( doctest, $'''' - Testing of doctests in the sources finished, look at the - results in $(builddir)/doctest/output.txt. - '''') diff --git a/OMakeroot b/OMakeroot deleted file mode 100644 index 35c219d..0000000 --- a/OMakeroot +++ /dev/null @@ -1,45 +0,0 @@ -######################################################################## -# Permission is hereby granted, free of charge, to any person -# obtaining a copy of this file, to deal in the File without -# restriction, including without limitation the rights to use, -# copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the File, and to permit persons to whom the -# File is furnished to do so, subject to the following condition: -# -# THE FILE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE FILE OR -# THE USE OR OTHER DEALINGS IN THE FILE. - -######################################################################## -# The standard OMakeroot file. -# You will not normally need to modify this file. -# By default, your changes should be placed in the -# OMakefile in this directory. -# -# If you decide to modify this file, note that it uses exactly -# the same syntax as the OMakefile. -# - -# -# Include the standard installed configuration files. -# Any of these can be deleted if you are not using them, -# but you probably want to keep the Common file. -# -open build/C -open build/OCaml -open build/LaTeX - -# -# The command-line variables are defined *after* the -# standard configuration has been loaded. -# -DefineCommandVars() - -# -# Include the OMakefile in this directory. -# -.SUBDIRS: . diff --git a/bootstrap.py b/bootstrap.py deleted file mode 100644 index 5f2cb08..0000000 --- a/bootstrap.py +++ /dev/null @@ -1,260 +0,0 @@ -############################################################################## -# -# Copyright (c) 2006 Zope Foundation and Contributors. -# All Rights Reserved. -# -# This software is subject to the provisions of the Zope Public License, -# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -# FOR A PARTICULAR PURPOSE. -# -############################################################################## -"""Bootstrap a buildout-based project - -Simply run this script in a directory containing a buildout.cfg. -The script accepts buildout command-line options, so you can -use the -c option to specify an alternate configuration file. -""" - -import os, shutil, sys, tempfile, textwrap, urllib, urllib2, subprocess -from optparse import OptionParser - -if sys.platform == 'win32': - def quote(c): - if ' ' in c: - return '"%s"' % c # work around spawn lamosity on windows - else: - return c -else: - quote = str - -# See zc.buildout.easy_install._has_broken_dash_S for motivation and comments. -stdout, stderr = subprocess.Popen( - [sys.executable, '-Sc', - 'try:\n' - ' import ConfigParser\n' - 'except ImportError:\n' - ' print 1\n' - 'else:\n' - ' print 0\n'], - stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() -has_broken_dash_S = bool(int(stdout.strip())) - -# In order to be more robust in the face of system Pythons, we want to -# run without site-packages loaded. This is somewhat tricky, in -# particular because Python 2.6's distutils imports site, so starting -# with the -S flag is not sufficient. However, we'll start with that: -if not has_broken_dash_S and 'site' in sys.modules: - # We will restart with python -S. - args = sys.argv[:] - args[0:0] = [sys.executable, '-S'] - args = map(quote, args) - os.execv(sys.executable, args) -# Now we are running with -S. We'll get the clean sys.path, import site -# because distutils will do it later, and then reset the path and clean -# out any namespace packages from site-packages that might have been -# loaded by .pth files. -clean_path = sys.path[:] -import site -sys.path[:] = clean_path -for k, v in sys.modules.items(): - if k in ('setuptools', 'pkg_resources') or ( - hasattr(v, '__path__') and - len(v.__path__)==1 and - not os.path.exists(os.path.join(v.__path__[0],'__init__.py'))): - # This is a namespace package. Remove it. - sys.modules.pop(k) - -is_jython = sys.platform.startswith('java') - -setuptools_source = 'http://peak.telecommunity.com/dist/ez_setup.py' -distribute_source = 'http://python-distribute.org/distribute_setup.py' - -# parsing arguments -def normalize_to_url(option, opt_str, value, parser): - if value: - if '://' not in value: # It doesn't smell like a URL. - value = 'file://%s' % ( - urllib.pathname2url( - os.path.abspath(os.path.expanduser(value))),) - if opt_str == '--download-base' and not value.endswith('/'): - # Download base needs a trailing slash to make the world happy. - value += '/' - else: - value = None - name = opt_str[2:].replace('-', '_') - setattr(parser.values, name, value) - -usage = '''\ -[DESIRED PYTHON FOR BUILDOUT] bootstrap.py [options] - -Bootstraps a buildout-based project. - -Simply run this script in a directory containing a buildout.cfg, using the -Python that you want bin/buildout to use. - -Note that by using --setup-source and --download-base to point to -local resources, you can keep this script from going over the network. -''' - -parser = OptionParser(usage=usage) -parser.add_option("-v", "--version", dest="version", - help="use a specific zc.buildout version") -parser.add_option("-d", "--distribute", - action="store_true", dest="use_distribute", default=False, - help="Use Distribute rather than Setuptools.") -parser.add_option("--setup-source", action="callback", dest="setup_source", - callback=normalize_to_url, nargs=1, type="string", - help=("Specify a URL or file location for the setup file. " - "If you use Setuptools, this will default to " + - setuptools_source + "; if you use Distribute, this " - "will default to " + distribute_source +".")) -parser.add_option("--download-base", action="callback", dest="download_base", - callback=normalize_to_url, nargs=1, type="string", - help=("Specify a URL or directory for downloading " - "zc.buildout and either Setuptools or Distribute. " - "Defaults to PyPI.")) -parser.add_option("--eggs", - help=("Specify a directory for storing eggs. Defaults to " - "a temporary directory that is deleted when the " - "bootstrap script completes.")) -parser.add_option("-t", "--accept-buildout-test-releases", - dest='accept_buildout_test_releases', - action="store_true", default=False, - help=("Normally, if you do not specify a --version, the " - "bootstrap script and buildout gets the newest " - "*final* versions of zc.buildout and its recipes and " - "extensions for you. If you use this flag, " - "bootstrap and buildout will get the newest releases " - "even if they are alphas or betas.")) -parser.add_option("-c", None, action="store", dest="config_file", - help=("Specify the path to the buildout configuration " - "file to be used.")) - -options, args = parser.parse_args() - -# if -c was provided, we push it back into args for buildout's main function -if options.config_file is not None: - args += ['-c', options.config_file] - -if options.eggs: - eggs_dir = os.path.abspath(os.path.expanduser(options.eggs)) -else: - eggs_dir = tempfile.mkdtemp() - -if options.setup_source is None: - if options.use_distribute: - options.setup_source = distribute_source - else: - options.setup_source = setuptools_source - -if options.accept_buildout_test_releases: - args.append('buildout:accept-buildout-test-releases=true') -args.append('bootstrap') - -try: - import pkg_resources - import setuptools # A flag. Sometimes pkg_resources is installed alone. - if not hasattr(pkg_resources, '_distribute'): - raise ImportError -except ImportError: - ez_code = urllib2.urlopen( - options.setup_source).read().replace('\r\n', '\n') - ez = {} - exec ez_code in ez - setup_args = dict(to_dir=eggs_dir, download_delay=0) - if options.download_base: - setup_args['download_base'] = options.download_base - if options.use_distribute: - setup_args['no_fake'] = True - ez['use_setuptools'](**setup_args) - if 'pkg_resources' in sys.modules: - reload(sys.modules['pkg_resources']) - import pkg_resources - # This does not (always?) update the default working set. We will - # do it. - for path in sys.path: - if path not in pkg_resources.working_set.entries: - pkg_resources.working_set.add_entry(path) - -cmd = [quote(sys.executable), - '-c', - quote('from setuptools.command.easy_install import main; main()'), - '-mqNxd', - quote(eggs_dir)] - -if not has_broken_dash_S: - cmd.insert(1, '-S') - -find_links = options.download_base -if not find_links: - find_links = os.environ.get('bootstrap-testing-find-links') -if find_links: - cmd.extend(['-f', quote(find_links)]) - -if options.use_distribute: - setup_requirement = 'distribute' -else: - setup_requirement = 'setuptools' -ws = pkg_resources.working_set -setup_requirement_path = ws.find( - pkg_resources.Requirement.parse(setup_requirement)).location -env = dict( - os.environ, - PYTHONPATH=setup_requirement_path) - -requirement = 'zc.buildout' -version = options.version -if version is None and not options.accept_buildout_test_releases: - # Figure out the most recent final version of zc.buildout. - import setuptools.package_index - _final_parts = '*final-', '*final' - def _final_version(parsed_version): - for part in parsed_version: - if (part[:1] == '*') and (part not in _final_parts): - return False - return True - index = setuptools.package_index.PackageIndex( - search_path=[setup_requirement_path]) - if find_links: - index.add_find_links((find_links,)) - req = pkg_resources.Requirement.parse(requirement) - if index.obtain(req) is not None: - best = [] - bestv = None - for dist in index[req.project_name]: - distv = dist.parsed_version - if _final_version(distv): - if bestv is None or distv > bestv: - best = [dist] - bestv = distv - elif distv == bestv: - best.append(dist) - if best: - best.sort() - version = best[-1].version -if version: - requirement = '=='.join((requirement, version)) -cmd.append(requirement) - -if is_jython: - import subprocess - exitcode = subprocess.Popen(cmd, env=env).wait() -else: # Windows prefers this, apparently; otherwise we would prefer subprocess - exitcode = os.spawnle(*([os.P_WAIT, sys.executable] + cmd + [env])) -if exitcode != 0: - sys.stdout.flush() - sys.stderr.flush() - print ("An error occurred when trying to install zc.buildout. " - "Look above this message for any errors that " - "were output by easy_install.") - sys.exit(exitcode) - -ws.add_entry(eggs_dir) -ws.require(requirement) -import zc.buildout.buildout -zc.buildout.buildout.main(args) -if not options.eggs: # clean up temporary egg directory - shutil.rmtree(eggs_dir) diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..d9bfea8 --- /dev/null +++ b/build.sh @@ -0,0 +1,13 @@ +#!/bin/bash -uex + +# Remove dist directory. +rm -rf build + +# Build Sphinx. +for lang in "en" "ja" +do + sphinx-build -b html -c source "source/${lang}" "build/${lang}" +done + +# Copy index.html to build directory. +cp supplement/index.html build diff --git a/buildout.cfg b/buildout.cfg deleted file mode 100644 index cc17dea..0000000 --- a/buildout.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[buildout] -parts = env - -[env] -recipe = zc.recipe.egg -eggs = - sphinx -# PIL -# sphinxcontrib-blockdiag -# rst2pdf -# seqdiag -# netdiag - -interpreter = py diff --git a/ja.json b/ja.json deleted file mode 100644 index 90e99b4..0000000 --- a/ja.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "embeddedFonts" : - [[ - "VL-Gothic-Regular.ttf", - "VL-PGothic-Regular.ttf" - ]], - "fontsAlias" : { - "stdFont": "VL-PGothic-Regular", - "stdBold": "VL-PGothic-Regular", - "stdItalic": "VL-PGothic-Regular", - "stdBoldItalic": "VL-PGothic-Regular", - "stdMono": "VL-Gothic-Regular" - }, - "styles" : [ - ["base" , { - "wordWrap": "CJK" - }], - ["literal" , { - "wordWrap": "None" - }] - ] -} diff --git a/make.bat b/make.bat deleted file mode 100644 index 641634b..0000000 --- a/make.bat +++ /dev/null @@ -1,113 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -set SPHINXBUILD=sphinx-build -set BUILDDIR=build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. changes to make an overview over all changed/added/deprecated items - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Jubatus.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Jubatus.ghc - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -:end diff --git a/source/OMakefile b/source/OMakefile deleted file mode 100644 index e69de29..0000000 diff --git a/source/_static/custom.css b/source/_static/custom.css old mode 100755 new mode 100644 diff --git a/source/_static/favicon.ico b/source/_static/favicon.ico old mode 100755 new mode 100644 diff --git a/source/_static/tanakh/pfi.jpg b/source/_static/tanakh/pfi.jpg deleted file mode 100644 index 2eec7a803725662d4a9320b57f9aa73098b1b47f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5343 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と<br>MessagePack-RPC

自己紹介

  • 田中英行 (@tanakh)
  • (株)Preferred Infrastracture 研究開発部門
  • ライブラリやサーバ作成など
  • Jubatusのサーバ部分


 

本日の概要

  • Jubatusとともにひっそりと公開したC++ライブラリ pficommon のご紹介
  • MessagePack-RPC についても少し

C++ライブラリ pficommon

pficommonとは?

  • C++用汎用ライブラリ
  • http://github.com/pfi/pficommon.git
  • マルチスレッドサーバとネットワークプログラミングをやりやすく
  • モダンなC++コードを書きやすく
  • Sedueで利用

開発コンセプト

  • 小さくインストールしやすい
    • ⇒ Boostはインストールするのが大変
  • 古いコンパイラ(g++-3.x.y)でも通る
    • ⇒ CentOSなどのサポート
  • C++0x (C++11) への移行のつなぎ

ライブラリ構成

  • pfi::lang
    • Boost/tr1/C++11-std の再実装
  • pfi::concurrent
    • 並行プログラミングのサポート
  • pfi::network
    • ネットワークプログラミングのサポート
  • pfi::text
    • テキスト処理・各種フォーマットのパーザ
  • pfi::data
    • 各種データ構造・アルゴリズム
  • pfi::database
    • データベースサポート

pfi::lang

  • モダンなC++コードを書くためのライブラリ

  • shared_ptr / scoped_ptr
  • function
  • bind
  • noncopyable
  • etc...

pfi::concurrent

  • 並行プログラミングのためのライブラリ

  • thread
  • (recursive) mutex / read-write mutex / scoped locker
  • conditional variable
  • 同期変数 / 同期キュー
  • タスクキュー
  • threading model
  • メモリバリア

-
pfi::concurrent::mvar<int> m;

void foo()
{
m.put(123);
}

int main()
{
pfi::concurrent::thread t(&foo);
t.start();
cout << m.take() << endl;
return 0;
}
-

pfi::network

  • ネットワークプログラミングのためのライブラリ

  • バッファ付きソケット
  • サーバソケット
  • 各種プロトコル
  • Webアプリケーション用インターフェース
  • RPC

例1: HTTPクライアント

low-levelな実装

-
int main()
{
stream_socket sock;
sock.connect("tanakh.jp", 80);
sock.puts("GET /rss.xml HTTP/1.0\r\n\r\n");
sock.flush();
string line;
while (sock.getline(line))
cout << line << endl;
}
-

例2: HTTPクライアントその2

ソケットストリームを利用

-
int main()
{
soocketstream ss("tanakh.jp", 80);
if (!ss) return 1; // cannot connect
ss << "GET /rss.xml HTTP/1.0\r\n\r\n" << flush;
for (string line; getline(ss, line); )
cout << line << endl;
}
-

例3: echoサーバ

-
int main()
{
server_socket ssock;
ssock.create(8888);
for (; ;) {
socketstream ss(ssock.accept());
for (string line; getline(ss, line); )
ss << line;
}
return 0;
}
-

例4: HTTPクライアント

HTTPライブラリ

-
int main()
{
pfi::network::http::request req("GET", uri("http://tanakh.jp/"), 1, 1);
shared_ptr<stream_socket> ss(new stream_socket());
ss->connect("tanakh.jp", 80);
req.send(ss);
pfi::network::http::response resp(ss);

for (string line; getline(resp.body(), line); )
cout<<line<<endl;

return 0;
}
-

RPC

  • 2つのRPCをサポート
    • pficommonプロトコル
    • MessagePack-RPC プロトコル
      • 後述

pficommon-RPC (1)

  • シグニチャを定義
-
RPC_PROC(add, int(int, int))    // method-def
RPC_PROC(hello, string(string)) // method-def
RPC_GEN(0 /* VERSION */, test, add, hello) // gen server, client
-

pficommon-RPC (2)

  • サーバ
-
int add(int x, int y){ return x + y; }

string hello(string s)
{
return "Hello, " + s;
}

int main()
{
test_server serv;
serv.set_add(&add);
serv.set_hello(&hello);
serv.serv(12345, 10); // port-num, thread-num
}
-

pficommon-RPC (3)

  • クライアント
-
int main()
{
test_client cli("localhost", 12345); // host, port-num

cout << cli.call_add(123, 456) << endl; // => 579
cout << cli.call_hello("World!") << endl; // => Hello, World!
}
-

他言語バインディング

  • RPCのシグニチャを記述したC++のヘッダファイルから、他言語バインディングを生成する genrpc というプログラムが付属
-
$ genrpc --php rpc.h
-

(いまのところPHPとHaskellだけ)

pfi::network::cgi

  • Webアプリケーションを C++ で楽に書くためのライブラリ
  • フロントエンドとバックエンドの分離
  • フロントエンド
    • text/plain
    • HTML4 / XHTML / HTML5
    • Json / XML
  • バックエンド
    • cgi
    • fcgi
    • standalone HTTP server

例1: シンプルCGI

-
class my_cgi : public cgi {
public:
void run(ostream &os){
// implementation...
head["Content-Type"] = "text/plain";
os << "Hello, " << query["name"] << endl;
}
};

int main()
{
// run as a CGI
run_cgi(my_cgi()).run();
}
-

XHTML CGI

-
class my_cgi : public xhtml_cgi {
public:
void run() {
html__ {
head__
title__
text__("Hoge Hoge Page");
body__ {
a__ { href__ = "http://tanakh.jp";
text__("hoge-");
}
br__;
}
}
}
};
-

バックエンド切り替え

fcgiとして実行

-
int main()
{
run_fcgi(my_cgi()).run();
}
-

Standaloneサーバとして実行

-
int main()
{
run_server(my_cgi(), port_number /* = 8080 */,
thread_num /* = 1 */, timeout /* = 10 */).start();
}
-

pfi::data

  • unordered_map / set
  • optional
  • LRU
  • SuffixArray
  • Digest / encoding
    • MD5, base64, ...
  • Aho-Corasick
  • FenwickTree
  • FFT
  • ...

pfi::data::serialization

  • シリアライザ
  • 大体Boost互換のインターフェース
-
class hoge {
public:
hoge() {}
private:
friend class pfi::data::serialization::access;
template <class Ar>
void serialize(Ar &ar) {
ar & a & s;
}
int a;
string s;
};
-

serializationによるreflectionもどき

  • シリアライザは、データの値を書きだす
  • 値の代わりに型を書きだせば
     ⇒ reflectionもどき
-
struct hoge {
template <class Ar> void serialize(Ar &ar) {
ar & MEMBER(a) & MEMBER(b);
}
string a;
vector<int> b;
};
int main()
{
shared_ptr<type_rep> typ = get_type<hoge>();
typ->print(cout); // => class(){string:a,array<int(4)>:b}
return 0;
}
-

serialization応用いろいろ

  • ユーザ定義型をRPCで送れるようになる
  • ユーザ定義型をJSONに相互変換できるようになる
  • ユーザ定義型のメンバの列挙ができる
     ⇒ RPCクライアントコード、テスタ自動生成など

pfi::database

  • データベースサポート
    • PostgreSQL / MySQL
-
int main()
{
shared_ptr<connection>
conn(mysql::connect("localhost", 3306, "dbname", "user", "passwd"));
transaction(conn) { // auto commit if success, otherwise rollback.
shared_ptr<statement>
stat(conn->prepare("SELECT * from hoge where bar > ?"));
stat->execute(3.14);
string name; int val;
while (stat->fetch_row(name, val)){ ... }
conn->run("INSERT INTO hoge (foo, bar) VALUES (?, ?)",
"test", 1.23);
}
}
-

pfi::text

  • JSON
  • CSV
  • HTML / XML
  • config file (.ini file)
  • ...

pfi::text::json

  • ユーザ定義型の自動変換
-
struct foo {
int a;
string b;
template <class Archive> void serialize(Archive &ar) {
ar & MEMBER(a) & MEMBER(b) & MEMBER(c);
}
};

int main()
{
foo f; f.a = 123; f.b = "test";
cout << to_json(f) << endl; // => { "a": 123, "b": "test" }
}
-

pficommonとMessagePack-RPC

MessagePackとは?

  • バイナリベースのオブジェクトシリアライズフォーマット http://msgpack.org/
    • ほぼJSONと同様のデータが扱える
  • シンプル・ハイパフォーマンス
  • 様々な言語のライブラリ
    • Ruby, Python, Perl, C/C+, Java, Haskell, ...

MessagePack-RPC

  • MessagePackフォーマットで通信を行うRPCが策定されている
  • シンプルなプロトコル
  • 色々な言語での実装がある
  • Jubatusでも採用

pficommonでのMessagePack-RPC

  • pficommonプロトコルのRPCと同じインターフェースで扱える
  • RPC_XXX => MPRPC_XXX に変えるだけ
-
MPRPC_PROC(add, int(int, int))    // method def
MPRPC_PROC(hello, string(string)) // method def
MPRPC_GEN(0 /* VERSION */, test /* NAME */,
add, hello) // METHODS
-

情報源など

Try it NOW!

It is now open source! You can try it:

-
$ git clone git://github.com/pfi/pficommon.git
$ cd pficommon
$ ./waf configure
$ ./waf build
$ sudo ./waf install
-

fork me!
-


 
 
 
 
 
 
 ご清聴ありがとうございました

diff --git a/source/_static/tanakh/rpc-web.png b/source/_static/tanakh/rpc-web.png deleted file mode 100644 index a7a523d28582832d42a6fe628082bb613734bdf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96583 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 zej919a article:not(.nobackground):not(.biglogo) { - background: url(./pfi.jpg) 710px 625px no-repeat; - background-color: white; -} - -.template-pfi h3 { - font-size: 45px; - line-height: 50px; - padding: 0; - margin: 0; - padding-right: 40px; - font-weight: 600; - letter-spacing: -1px; - color: rgb(51, 51, 51); -} diff --git a/source/_static/tanakh/syntax.css b/source/_static/tanakh/syntax.css deleted file mode 100644 index 87e6407..0000000 --- a/source/_static/tanakh/syntax.css +++ /dev/null @@ -1,17 +0,0 @@ -table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode, table.sourceCode pre - { margin: 0; padding: 0; border: 0; vertical-align: baseline; border: none; } -td.lineNumbers { border-right: 1px solid #AAAAAA; text-align: right; color: #AAAAAA; padding-right: 5px; padding-left: 5px; } -td.sourceCode { padding-left: 5px; } -code.sourceCode span.kw { color: #007020; font-weight: bold; } -code.sourceCode span.dt { color: #902000; } -code.sourceCode span.dv { color: #40a070; } -code.sourceCode span.bn { color: #40a070; } -code.sourceCode span.fl { color: #40a070; } -code.sourceCode span.ch { color: #4070a0; } -code.sourceCode span.st { color: #4070a0; } -code.sourceCode span.co { color: #60a0b0; font-style: italic; } -code.sourceCode span.ot { color: #007020; } -code.sourceCode span.al { color: red; font-weight: bold; } -code.sourceCode span.fu { color: #06287e; } -code.sourceCode span.re { } -code.sourceCode span.er { color: red; font-weight: bold; } diff --git a/source/conf.py b/source/conf.py index 5b3fd35..cb6ccb4 100644 --- a/source/conf.py +++ b/source/conf.py @@ -1,303 +1,80 @@ -# -*- coding: utf-8 -*- +# Configuration file for the Sphinx documentation builder. # -# Jubatus documentation build configuration file, created by -# sphinx-quickstart on Wed Mar 30 16:47:02 2011. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html -import sys, os +# -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.append(os.path.abspath('../../exts')) - -# -- General configuration ----------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['mpidl_domain', - 'jubamember', - 'sphinx.ext.autodoc', - 'sphinx.ext.autosummary', - 'sphinx.ext.doctest', - 'sphinx.ext.intersphinx', - 'sphinx.ext.mathjax', - 'sphinx.ext.napoleon', - 'sphinx.ext.viewcode', - 'sphinxcontrib.blockdiag', - 'sphinxcontrib.rubydomain'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['../../_templates'] -# The suffix of source filenames. -source_suffix = '.rst' +import os +import sys +sys.path.insert(0, os.path.abspath('../exts')) -# The encoding of source files. -#source_encoding = 'utf-8' -# The master toctree document. -master_doc = 'index' +# -- Project information ----------------------------------------------------- -# General information about the project. -project = u'Jubatus' -copyright = u'2011-2019 PFN & NTT' +project = 'Jubatus' +copyright = '2011-2019 PFN & NTT' +author = 'PFN & NTT' -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '' -# The full version, including alpha/beta/rc tags. +# The full version, including alpha/beta/rc tags release = '1.1.1' -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -today = ' ' # disable embedding dates -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of documents that shouldn't be included in the build. -#unused_docs = [] - -# List of directories, relative to source directory, that shouldn't be searched -# for source files. -exclude_trees = [] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True +# -- General configuration --------------------------------------------------- -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'mpidl_domain', + 'jubamember', + 'sphinxcontrib.blockdiag', +# 'sphinxcontrib.rubydomain', +] -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [] -# -- Options for HTML output --------------------------------------------------- +# -- Options for HTML output ------------------------------------------------- -# The theme to use for HTML and HTML Help pages. Major themes that come with -# Sphinx are currently 'default' and 'sphinxdoc'. -# html_theme = 'default' -# html_theme = 'sphinxdoc' -# html_theme = 'jubatus' +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. html_theme = 'sphinx_rtd_theme' -# on_rtd is whether we are on readthedocs.org, this line of code grabbed from docs.readthedocs.org -on_rtd = os.environ.get('READTHEDOCS', None) == 'True' - -if not on_rtd: # only import and set the theme if we're building docs locally - import sphinx_rtd_theme - html_theme = 'sphinx_rtd_theme' - html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] - # Override default css to get a larger width for local build - def setup(app): - #app.add_javascript("custom.js") - app.add_stylesheet('custom.css') -else: - # Override default css to get a larger width for ReadTheDoc build - html_context = { - 'css_files': [ - 'https://media.readthedocs.org/css/sphinx_rtd_theme.css', - 'https://media.readthedocs.org/css/readthedocs-doc-embed.css', - '_static/custom.css', - ], -} - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -html_title = "Jubatus" - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] # The name of an image file (relative to this directory) to place at the top # of the sidebar. -html_logo = 'title.png' +html_logo = '_static/title.png' # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. -html_favicon = 'favicon.ico' - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['../_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_use_modindex = True - -# If false, no index is generated. -#html_use_index = True +html_favicon = '_static/favicon.ico' -# If true, the index is split into individual pages for each letter. -#html_split_index = False +# A list of CSS files. The entry must be a filename string or a tuple +# containing the filename string and the attributes dictionary. The filename +# must be relative to the html_static_path, or a full URI with scheme like +# http://example.org/style.css. The attributes is used for attributes of +# tag. It defaults to an empty list. +html_css_files = ['custom.css'] # If true, links to the reST sources are added to the pages. html_show_sourcelink = False -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = '' - # Output file base name for HTML help builder. htmlhelp_basename = 'Jubatusdoc' - -# -- Options for LaTeX output -------------------------------------------------- - -# The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' - -# The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', 'Jubatus.tex', u'Jubatus Documentation', - u'PFN\\&NTT', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# Additional stuff for the LaTeX preamble. -#latex_preamble = '' - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_use_modindex = True - -# -- Options for PDF output -------------------------------------------------- -# Grouping the document tree into PDF files. List of tuples -# (source start file, target name, title, author, options). -# -# If there is more than one author, separate them with \\. -# For example: r'Guido van Rossum\\Fred L. Drake, Jr., editor' -# -# The options element is a dictionary that lets you override -# this config per-document. -# For example, -# ('index', u'MyProject', u'My Project', u'Author Name', -# dict(pdf_compressed = True)) -# would mean that specific document would be compressed -# regardless of the global pdf_compressed setting. -pdf_documents = [ - ('index', u'Jubatus', u'Jubtus', u'Author Name'), -] -# A comma-separated list of custom stylesheets. Example: -pdf_stylesheets = ['sphinx','kerning','a4','ja'] -# Create a compressed PDF -# Use True/False or 1/0 -# Example: compressed=True -#pdf_compressed = False -# A colon-separated list of folders to search for fonts. Example: -pdf_font_path = ['/usr/share/fonts/TTF', '/usr/share/texmf-dist/fonts/'] -# Language to be used for hyphenation support -pdf_language = "ja" -# Mode for literal blocks wider than the frame. Can be - -# overflow, shrink or truncate -#pdf_fit_mode = "shrink" -# Section level that forces a break page. -# For example: 1 means top-level sections start in a new page -# 0 means disabled -#pdf_break_level = 0 -# When a section starts in a new page, force it to be 'even', 'odd', -# or just use 'any' -#pdf_breakside = 'any' -# Insert footnotes where they are defined instead of -# at the end. -#pdf_inline_footnotes = True -# verbosity level. 0 1 or 2 -#pdf_verbosity = 0 -# If false, no index is generated. -#pdf_use_index = True -# If false, no modindex is generated. -#pdf_use_modindex = True -# If false, no coverpage is generated. -#pdf_use_coverpage = True -# Name of the cover page template to use -#pdf_cover_template = 'sphinxcover.tmpl' -# Documents to append as an appendix to all manuals. -#pdf_appendices = [] -# Enable experimental feature to split table cells. Use it -# if you get "DelayedTable too big" errors -#pdf_splittables = False -# Set the default DPI for images -#pdf_default_dpi = 72 -# Enable rst2pdf extension modules (default is empty list) -# you need vectorpdf for better sphinx's graphviz support -#pdf_extensions = ['vectorpdf'] -# Page template name for "regular" pages -#pdf_page_template = 'cutePage' - -# -- Options for manpage output -------------------------------------------------- -man_pages = [ - ('commands/jubatus_server', 'jubatus_server', 'Jubatus Server', 'PFN & NTT', 8), - ('commands/jubatus_proxy', 'jubatus_proxy', 'Jubatus Proxy', 'PFN & NTT', 8), - ('commands/jubaconfig', 'jubaconfig', 'jubaconfig', 'PFN & NTT', 8), - ('commands/jubavisor', 'jubavisor', 'jubavisor', 'PFN & NTT', 8), - ('commands/jubactl', 'jubactl', 'jubactl', 'PFN & NTT', 8), - ('commands/jubaconv', 'jubaconv', 'jubaconv', 'PFN & NTT', 1), - ('commands/jubadump', 'jubadump', 'jubadump', 'PFN & NTT', 1), - ('commands/jenerator', 'jenerator', 'jenerator', 'PFN & NTT', 1), -] diff --git a/source/en/conf.py b/source/en/conf.py deleted file mode 100644 index c79de32..0000000 --- a/source/en/conf.py +++ /dev/null @@ -1,2 +0,0 @@ -execfile("../conf.py") -language = 'en' diff --git a/source/ja/conf.py b/source/ja/conf.py deleted file mode 100644 index becf00f..0000000 --- a/source/ja/conf.py +++ /dev/null @@ -1,2 +0,0 @@ -execfile("../conf.py") -language = 'ja' diff --git a/supplement/html/ja/index_ja.html b/supplement/html/ja/index_ja.html deleted file mode 100644 index 44b83df..0000000 --- a/supplement/html/ja/index_ja.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - Jubatus - - - -

Jubatus

-

The document has moved here.

- - diff --git a/supplement/html/index.html b/supplement/index.html similarity index 100% rename from supplement/html/index.html rename to supplement/index.html