Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み

Takayuki Shimizukawa
Takayuki ShimizukawaWeb Developer at BePROUD Inc.
1
Takayuki Shimizukawa
Sphinx co-maintainer
Sphinx-users.jp
Ahoj, 안녕하세요, Hola, Hello, こんにちは
2
おまえ誰よ
@shimizukawa
1. Sphinx メンテナ
2. Sphinx-users.jp
3. 一般社団法人PyCon JP 理事
 BePROUD co, ltd.
3
今年はスタッフじゃ無いのに間違えられる
4
今日の予定
1. Sphinx紹介 & i18nセットアップ
2. 貢献しやすいドキュメント翻訳
3. Sphinxのi18n機能
4. 翻訳プロセスの自動化と便利なサービス
5. Tips, tricks, traps
5
6
質問1
オープンソースソフトウエア
を使っている方
7
質問2
OSSにコントリビュートし
たことがある方
8
質問3
ドキュメントを
日本語に翻訳することは
他の開発者の助けになる
と思いますか?
9
ドキュメント翻訳の価値
10
翻訳者
プロダクト
作者
翻訳Docs
読者
英語Docs
ツール & サービス
ツール
1. sphinx - ドキュメントジェネレータ
2. sphinx-intl - Sphinx i18n機能の補助ツール
3. transifex-client - Transifexサービスのファイルを送
受信するツール
サービス
1. Transifex - 翻訳サポートサービス
2. Drone.io - 継続的インテグレーションサービス
11
12
Sphinx is 何?
Sphinx はドキュメンテーションジェネレー
タです
SphinxはreSTマークアップから複数の
フォーマットのドキュメントを生成します
13
1. Sphinx紹介 & i18nセットアップ
Sphinx
reSTreSTreStructuredText
(reST) reST Parser
HTML Builder
ePub Builder
LaTeX Builder texlive
HTML
theme
Favorite Editor
Sphinxの歴史 (ショートver.)
14
1. Sphinx紹介 & i18nセットアップ
Sphinxの
父
メンテナンス
が大変
~2007
書きやすく
メンテナンスしやす
い2007~
Sphinx 以前、Sphinx以降
Sphinx以前
 ドキュメントを書く標準的な方法がなかった
 出力フォーマットに合わせて、一度書いたドキュメント
を変換する必要があった
Sphinx以降
 1つのソースから複数フォーマットのドキュメントを生
成
 同梱のHTMLテーマ機能で読みやすいドキュメントを提
供
 APIリファレンスと説明的ドキュメントが同居できる
 自動ビルドとホスティングを提供するReadTheDocsの登 15
1. Sphinx紹介 & i18nセットアップ
Sphinxで書かれたドキュメントの例
 Python ライブラリ/ツール:
Python, Sphinx, Flask, Jinja2, Django,
Pyramid, SQLAlchemy, Numpy, SciPy,
scikit-learn, pandas, fabric, ansible, awscli,
…
 Python以外のライブラリ/ツール:
Chef, CakePHP(2.x), MathJax, Selenium,
Varnish
16
1. Sphinx紹介 & i18nセットアップ
Sphinxで書かれたドキュメントの例
 Python ライブラリ/ツール:
Python, Sphinx, Flask, Jinja2, Django,
Pyramid, SQLAlchemy, Numpy, SciPy,
scikit-learn, pandas, fabric, ansible, awscli,
…
 Python以外のライブラリ/ツール:
Chef, CakePHP(2.x), MathJax, Selenium,
Varnish
17
1. Sphinx紹介 & i18nセットアップ
SPHINX
docutils
HTML Builder HTML theme
(Jinja2)
gettext Builder
*.pot
*.po
I18N
*.mo
OmegaT
Pootle
Transifex
Translation Tools, Services
Favorite Editor
Sphinxのi18n機能 (ビルトイン)
18
1. Sphinx紹介 & i18nセットアップ
reST Parser
(directive / role)
doctree
(Intermediate)
reSTreST
reStructuredText
(reST)
$ pip install sphinx
翻訳サポートツールをインストール
Sphinxと i18nツールのインストール
Sphinx本体をインストール
$ pip install sphinx-intl
$ pip install transifex-client=0.8
19
1. Sphinx紹介 & i18nセットアップ
$ git clone https://github.com/shimizukawa/deepthought.git
$ cd deepthought/doc
$ make html
...
Build finished. The HTML pages are in _build/html.
"make html" コマンドで
_build/html ディレクト
リ以下にhtmlファイル
が生成されます
最初のmake html
20
1. Sphinx紹介 & i18nセットアップ
ファイルの一覧と & conf.pyの設定
$ tree /path/to/deepthought
+- deep_thought
| +- __init__.py
| +- api.py
| +- calc.py
| +- utils.py
+- doc
| +- _build/
| | +- html/
| +- _static/
| +- _template/
| +- conf.py
| +- index.py
| +- make.bat
| +- Makefile
+- setup.py
21
1. Sphinx紹介 & i18nセットアップ
ドキュメントソース
Document build output
Target library for doc1. ...
2.
3. language = 'ja'
4. locale_dirs = ['locale']
5.
doc/conf.py
22
多言語化
internationalization
23
2.貢献しやすいドキュメント翻訳
I18N
貢献しやすいって
どういう状況?
24
2.貢献しやすいドキュメント翻訳
翻訳しにくい例 (1/3)
マニュアルがHTMLファイルでのみ
提供されている
HTMLファイルを書き換える?
25
2.貢献しやすいドキュメント翻訳
翻訳しにくい例 (2/3)
マニュアルがreSTファイルやソース
コード内のdocstringから生成されてい
る
 reSTファイルを書き換える?
 ソース内のdocstrinsを書き換える?
26
2.貢献しやすいドキュメント翻訳
翻訳しにくい例 (3/3)
翻訳対象がgitで管理されている
 gitを学ぶ
 GitHubを学ぶ
 "git clone" してソースコードを取得する
 翻訳 (これ!これやりたかった!)
 "git commit"
 "git pull"
 時々競合が発生して解決しないといけない
 "git push"
27
2.貢献しやすいドキュメント翻訳
めんどう vs かんたん
めんどう かんたん
1. gitを学ぶ
2. GitHubを学ぶ
3. "git clone"
4. 翻訳
5. "git commit" / "git push"
6. "git pull"
7. 時々競合解決
8. HTMLを自分でビルド
1. git 使わない
2. Github 使わない
3. file 触らない
4. 翻訳
5. 翻訳は自動更新
6. 競合しない
7. 自分でビルドしなくて
もHTMLをゲット
28
2.貢献しやすいドキュメント翻訳
29
2つのi18n機能
 pot ファイルの生成:
reSTから
 po ファイルの読み込み:
翻訳済みHTMLを生成するため
30
3. Sphinxのi18n機能
reST pot
reST
html
po
翻訳の流れ
 potを生成
 potをpoに翻訳
 翻訳済みHTMLを生成
31
3. Sphinxのi18n機能
reST pot
reST
html
po
pot po
Translator
翻訳して~
翻訳した!
協力ありがとう!
#: ../../../deep_thought/utils.py:docstring of
deep_thought.utils.dumps:1
msgid "Serialize ``obj`` to a JSON formatted :class:`str`."
msgstr ""
msgid "For example:"
msgstr ""
32
pot ファイル生成
3. Sphinxのi18n機能
$ make gettext
...
Build finished. The message catalogs are in _build/gettext.
$ ls _build/gettext
api.pot examples.pot generated.pot index.pot
generated.pot
reST pot
翻訳前にpoファイルを準備
doc
+- _build/
| +- gettext/
| +- api.pot
| +- examples.pot
| +- generated.pot
| +- index.pot
+- locale/
doc
+- _build/
+- locale/
+- ja/
| +- LC_MESSAGES/
| +- api.po
| +- examples.po
| +- generated.po
| +- index.po
+- zh_cn/
これらを翻訳
翻訳者
pot po
33
3. Sphinxのi18n機能
34
翻訳前にpoファイルを準備
$ sphinx-intl update -p _build/gettext -l zh_cn
Create: locale/zh_cn/LC_MESSAGES/api.po
Create: locale/zh_cn/LC_MESSAGES/examples.po
Create: locale/zh_cn/LC_MESSAGES/generated.po
Create: locale/zh_cn/LC_MESSAGES/index.po
sphinx-intl コマンドで「名前を変えてコピー」
pot po
sphinx-intl
$ make gettext
$ sphinx-intl update -p _build/gettext -l zh_cn
Not Changed: locale/zh_cn/LC_MESSAGES/api.po
Updated: locale/zh_cn/LC_MESSAGES/examples.po +3, -1
ドキュメントが更新されたら、同じコマンドでpoを更新
3. Sphinxのi18n機能
po ファイルを翻訳
#: ../../../deep_thought/utils.py:docstring of
deep_thought.utils.dumps:1
msgid "Serialize ``obj`` to a JSON formatted :class:`str`."
msgstr ""
generated.po
pot po
sphinx-intl
翻訳者
#: ../../../deep_thought/utils.py:docstring of
deep_thought.utils.dumps:1
msgid "Serialize ``obj`` to a JSON formatted :class:`str`."
msgstr "``obj`` をJSONフォーマットした :class:`str` にシリアライズ。
"
generated.po
Vim, Emacs, OmegaT, ... 等を使って翻訳
35
3. Sphinxのi18n機能
po ファイルを読み込み
36
3. Sphinxのi18n機能
reST
html
po
翻訳済み
$ make html
...
Build finished. The HTML pages are in _build/html.
全体の流れ
37
3. Sphinxのi18n機能
reST pot
html
po
make gettext
sphinx-intl
翻訳者
make html
ドキュメント作者
翻訳カタログ
翻訳済み
カタログ
38
Sphinxドキュメント翻訳プロセス全体像
39
4.翻訳プロセスの自動化と便利なサービス
reST pot
html
po
make gettext
sphinx-intl
make html
ドキュメント作者
翻訳カタログ
翻訳済カタログ
翻訳者
翻訳者
翻訳者
作者 / 翻訳者
アップロード
翻訳者
clone
翻訳者
自動化したい2つの部分
40
4.翻訳プロセスの自動化と便利なサービス
reST pot
html
po
make gettext
sphinx-intl
make html
ドキュメント作者
翻訳カタログ
翻訳済カタログ
アップロード
翻訳者
自動化したい
並列化
したい
clone
翻訳ツールの種類
 Vim / Emacs (エディタ)
 ローカルファイルの編集
 いくつかの翻訳サポートプラグイン
 OmegaT (翻訳ツール)
 ローカルファイルの編集
 いくつかの翻訳サポート機能
 Transifex (サービス)
 オンライン編集
 いくつかの翻訳サポート
機能
41
4.翻訳プロセスの自動化と便利なサービス
po
翻訳者
並列化
したい
Transifexを用いた並列化
Transifexが提供する機能
APIとして:
アップロード pot
ダウンロード po
Webコンソールとして:
用語集
翻訳メモリ
レコメンド
機械翻訳
42
4.翻訳プロセスの自動化と便利なサービス
po
翻訳者
並列化
pot
アップロード
pot
自動反映
sphinx-intl
transifex-client
po transifex-client
ダウンロード
Transifex Webコンソールで翻訳
43
4.翻訳プロセスの自動化と便利なサービス
原文
翻訳文(reST文法を
壊さないように!)
翻訳メモリ (TM) からの
レコメンド
原文
(pot)
翻訳
(po)
原文を翻訳文にコピー
機械翻訳
保存
レビュー (必要なら)
翻訳者
並列化
1
2
4
3
5
6
自動化したい2つの部分
44
4.翻訳プロセスの自動化と便利なサービス
po
翻訳者
並列化
pot
アップロード
pot
自動更新
sphinx-intl
transifex-client
po transifex-client
ダウンロード
reST
html
make gettext
make html
ドキュメント作者
アップロード
自動化したい
clone
全体の処理を自動化したい
45
4.翻訳プロセスの自動化と便利なサービス
pot
アップロード
sphinx-intl
transifex-client
po transifex-client
ダウンロード
reST
html
make gettext
make htmlアップロード
clone
1
2 3
45
6
自動化したい
自動化の手順
1. リポジトリをclone
2. "make gettext"
3. アップロード pot
4. ダウンロード po
5. "make html"
6. アップロード html
46
4.翻訳プロセスの自動化と便利なサービス
pot
アップロード
sphinx-intl
transifex-client
po
transifex-client
ダウンロード
reST
html
make gettext
make html
アップロード
clone
1
2 3
45
6
自動化した
い
1. pip install sphinx sphinx-intl transifex-client==0.8
2. git clone https://github.com/shimizukawa/deepthought.git
3. cd deepthought/doc
4. sphinx-intl create-transifexrc # create ~/.transifexrc
5. sphinx-intl create-txconfig # create .tx/config
6. make gettext
7. sphinx-intl -p _build/gettext update-txconfig-resources
# update .tx/config
8. tx push -s # push pot files to transifex
9. tx pull -l ja # pull po files from transifex
10. make html SPHINXOPTS="-D language=ja"
自動化のためのシェルコマンド
run.sh
$ export SPHINXINTL_TRANSIFEX_USERNAME=mice
$ export SPHINXINTL_TRANSIFEX_PASSWORD=42
$ export SPHINXINTL_TRANSIFEX_PROJECT_NAME=deepthought-0_7
$ export SPHINXINTL_POT_DIR=_build/gettext
$ run.sh
47
4.翻訳プロセスの自動化と便利なサービス
drone.ioによる自動化
48
WebHook
デプロイ
リポジトリClone
シェルスクリプト実行
drone.io は継続的インテグレーションサービス
4.翻訳プロセスの自動化と便利なサービス
GitHub + drone.io + S3
49
GitHub
Amazon S3
Transifex 1. リポジトリClone
2. make gettext
3. アップロード pot
4. ダウンロード po
5. make html
6. アップロード html
4.翻訳プロセスの自動化と便利なサービス
2
1
3
1
Drone.ioによる自動化
50
pot
アップロード sphinx-intl
transifex-client
po
transifex-client
Download
reST
html
make gettext
make html
アップロード
clone
1
2 3
45
6
To Be
Automated
アップロード
pot
ダウンロード
po
アップロード
html
WebHook
clone
1
5
6 make html
make gettext2
3
4
1
WebHook
自動化
4.翻訳プロセスの自動化と便利なサービス
Drone.ioによる自動化
51
アップロード
pot
ダウンロード
po
アップロード
html
WebHook
clone
1
5
6
make html
make gettext2
3
4
1
WebHook
自動化
4.翻訳プロセスの自動化と便利なサービス
ドキュメント作者の視点
 ドキュメント作者は、面倒な手間をかけずに、翻訳原文
の更新やサイトの閲覧ができる
翻訳原文の更新
ドキュメント作者
通知
閲覧
Commit
52
4.翻訳プロセスの自動化と便利なサービス
翻訳者の視点
 No git
 No file
 No conflict
 自動的に更新
 手動ビルドせずに翻訳されたHTMLを閲覧できる
翻訳者
並列化
閲覧
翻訳
翻訳されたHTML
53
4.翻訳プロセスの自動化と便利なサービス
自動化された全プロセス
54
アップデート
翻訳カタログ
ドキュメント作者
翻訳者
並列化
通知
閲覧
閲覧
更新
翻訳
Commit
ダウンロード
Translations
通知
Automated
4.翻訳プロセスの自動化と便利なサービス
まとめ
ツール
1. sphinx - ドキュメントジェネレータ
2. sphinx-intl - Sphinx i18n機能の補助ツール
3. transifex-client - Transifexサービスのファイルを送
受信するツール
サービス
1. Transifex - 翻訳サポートサービス
2. Drone.io - 継続的インテグレーションサービス
55
4.翻訳プロセスの自動化と便利なサービス
56
TIP: Drone.io の15分制限
 Drone.io はビルド1回の時間を15分に制限している
 パッケージのインストールをwheelで行い時間短縮
57
5. Tips, tricks, traps
1. curl -L -s https://example.com/wheelhouse.tgz | tar vzxf -
2. export PIP_FIND_LINKS=./wheelhouse
3. pip install sphinx sphinx-intl transifex-client==0.8
run.sh
ex. https://bitbucket.org/sphinxjp/docutils-translation/
TRAP: transifex-clientのバージョン
 transifex-client 0.11b3は安定してない(と思
う)
 特にWindowsユーザーにとって
 もし最新版でうまくいかない場合は、以下
のようにバージョン指定してみてください:
58
5. Tips, tricks, traps
$ pip install "transifex-client=0.8"
 Drone.io はGithubか
Bitbucketの管理権限の
あるリポジトリ用のプ
ロジェクトしか作れな
い
 Github等に空リポジト
リを用意してDrone.ioプ
ロジェクトを作成し、
そのWebHook URLを対
象リポジトリの管理者
に設定してもらおう 59
TRICK: Drone.io プロジェクトの用意
5. Tips, tricks, traps
利用事例
 Sphinx-1.3 doc for "ja" translation
https://drone.io/bitbucket.org/shimizukawa/sphinx-doc13/admin
 Sphinx-1.4 doc for "ja" translation
https://drone.io/bitbucket.org/shimizukawa/sphinx-doc14/admin
 Docutils doc for "ja" translation
https://drone.io/bitbucket.org/sphinxjp/docutils-translation/admin
60
5. Tips, tricks, traps
Questions?
@shimizukawa
いつでもつかまえてね :)
OpenSpace, Party, Poster, Sprint
61
Thanks :)
62
1 of 62

Recommended

Marp Tutorial by
Marp TutorialMarp Tutorial
Marp TutorialRui Watanabe
3.2K views15 slides
ネットワーク ゲームにおけるTCPとUDPの使い分け by
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
18.5K views63 slides
プログラムを高速化する話Ⅱ 〜GPGPU編〜 by
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜京大 マイコンクラブ
67.4K views184 slides
いまさら聞けないarmを使ったNEONの基礎と活用事例 by
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例Fixstars Corporation
5.1K views102 slides
【Unity】 Behavior TreeでAIを作る by
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作るtorisoup
19.8K views49 slides
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編 by
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編Fixstars Corporation
1.7K views62 slides

More Related Content

What's hot

マルチコアを用いた画像処理 by
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理Norishige Fukushima
51.6K views142 slides
トランザクションの並行実行制御 rev.2 by
トランザクションの並行実行制御 rev.2トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2Takashi Hoshino
6.3K views50 slides
組み込み関数(intrinsic)によるSIMD入門 by
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
47.5K views122 slides
ARM CPUにおけるSIMDを用いた高速計算入門 by
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門Fixstars Corporation
7K views114 slides
LLVM最適化のこつ by
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつMITSUNARI Shigeo
7.4K views27 slides
FastAPIを使って 機械学習モデルをapi化してみた by
FastAPIを使って 機械学習モデルをapi化してみたFastAPIを使って 機械学習モデルをapi化してみた
FastAPIを使って 機械学習モデルをapi化してみたSho Tanaka
1.2K views15 slides

What's hot(20)

トランザクションの並行実行制御 rev.2 by Takashi Hoshino
トランザクションの並行実行制御 rev.2トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2
Takashi Hoshino6.3K views
組み込み関数(intrinsic)によるSIMD入門 by Norishige Fukushima
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima47.5K views
FastAPIを使って 機械学習モデルをapi化してみた by Sho Tanaka
FastAPIを使って 機械学習モデルをapi化してみたFastAPIを使って 機械学習モデルをapi化してみた
FastAPIを使って 機械学習モデルをapi化してみた
Sho Tanaka1.2K views
何となく勉強した気分になれるパーサ入門 by masayoshi takahashi
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi35.8K views
テスト文字列に「うんこ」と入れるな by Kentaro Matsui
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui177.9K views
tf,tf2完全理解 by Koji Terada
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解
Koji Terada201.3K views
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術 by Yoshiaki Sugimoto
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術
WebブラウザでP2Pを実現する、WebRTCのAPIと周辺技術
Yoshiaki Sugimoto44.1K views
不揮発メモリ(NVDIMM)とLinuxの対応動向について by Yasunori Goto
不揮発メモリ(NVDIMM)とLinuxの対応動向について不揮発メモリ(NVDIMM)とLinuxの対応動向について
不揮発メモリ(NVDIMM)とLinuxの対応動向について
Yasunori Goto21.2K views
Minecraft による強化学習の実践 (MineRL) by Tusyoshi Matsuzaki
Minecraft による強化学習の実践 (MineRL)Minecraft による強化学習の実践 (MineRL)
Minecraft による強化学習の実践 (MineRL)
Tusyoshi Matsuzaki2.4K views
ELFの動的リンク by 7shi
ELFの動的リンクELFの動的リンク
ELFの動的リンク
7shi 18K views
TensorFlow Lite Delegateとは? by Mr. Vengineer
TensorFlow Lite Delegateとは?TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?
Mr. Vengineer9.1K views
BERTをブラウザで動かしたい! ―MobileBERTとTensorFlow.js― by Shion Honda
BERTをブラウザで動かしたい!―MobileBERTとTensorFlow.js―BERTをブラウザで動かしたい!―MobileBERTとTensorFlow.js―
BERTをブラウザで動かしたい! ―MobileBERTとTensorFlow.js―
Shion Honda7.9K views
イベント駆動プログラミングとI/O多重化 by Gosuke Miyashita
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita15.4K views
CV分野におけるサーベイ方法 by Hirokatsu Kataoka
CV分野におけるサーベイ方法CV分野におけるサーベイ方法
CV分野におけるサーベイ方法
Hirokatsu Kataoka23.9K views
モデルではなく、データセットを蒸留する by Takahiro Kubo
モデルではなく、データセットを蒸留するモデルではなく、データセットを蒸留する
モデルではなく、データセットを蒸留する
Takahiro Kubo7.8K views
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes by Tokoroten Nakayama
レベルを上げて物理で殴れ、Fuzzing入門 #pyfesレベルを上げて物理で殴れ、Fuzzing入門 #pyfes
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
Tokoroten Nakayama4.9K views
Intro to SVE 富岳のA64FXを触ってみた by MITSUNARI Shigeo
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo11.6K views

Viewers also liked

世界のSphinx事情 @ SphinxCon JP 2015 by
世界のSphinx事情 @ SphinxCon JP 2015世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015Takayuki Shimizukawa
3.4K views22 slides
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016 by
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Takayuki Shimizukawa
3.1K views66 slides
素振りのススメ at Python入門者の集い by
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集いTakayuki Shimizukawa
8.6K views26 slides
JUS関西 Sphinxワークショップ@関西 Sphinx紹介 by
JUS関西 Sphinxワークショップ@関西 Sphinx紹介JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介Takayuki Shimizukawa
8.8K views71 slides
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016 by
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016Takayuki Shimizukawa
4K views64 slides
Pythonはどうやってlen関数で長さを手にいれているの? by
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Takayuki Shimizukawa
38.1K views56 slides

Viewers also liked(6)

Easy contributable internationalization process with Sphinx @ PyCon APAC 2016 by Takayuki Shimizukawa
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
素振りのススメ at Python入門者の集い by Takayuki Shimizukawa
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い
JUS関西 Sphinxワークショップ@関西 Sphinx紹介 by Takayuki Shimizukawa
JUS関西 Sphinxワークショップ@関西 Sphinx紹介JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016 by Takayuki Shimizukawa
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
Pythonはどうやってlen関数で長さを手にいれているの? by Takayuki Shimizukawa
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
Takayuki Shimizukawa38.1K views

Similar to Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み

ドキュメントの継続的改善―Sphinxを使いながら by
ドキュメントの継続的改善―Sphinxを使いながらドキュメントの継続的改善―Sphinxを使いながら
ドキュメントの継続的改善―Sphinxを使いながらsoishino
206 views60 slides
Sphinx ではじめるドキュメント生活 2013 #sphinxconjp by
Sphinx ではじめるドキュメント生活 2013 #sphinxconjpSphinx ではじめるドキュメント生活 2013 #sphinxconjp
Sphinx ではじめるドキュメント生活 2013 #sphinxconjpTakeshi Komiya
12.6K views34 slides
Confluence と DITA による Webマニュアル作成フロー by
Confluence と DITA によるWebマニュアル作成フローConfluence と DITA によるWebマニュアル作成フロー
Confluence と DITA による Webマニュアル作成フローTakashi Yamaguchi
7.9K views37 slides
Python界隈の翻訳プロジェクト by
Python界隈の翻訳プロジェクトPython界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトTetsuya Morimoto
3.5K views64 slides
20160730 fluentd meetup in matsue slide by
20160730 fluentd meetup in matsue slide20160730 fluentd meetup in matsue slide
20160730 fluentd meetup in matsue slidecosmo0920
4.9K views51 slides
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp by
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpSphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpTakeshi Komiya
10.4K views35 slides

Similar to Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み(20)

ドキュメントの継続的改善―Sphinxを使いながら by soishino
ドキュメントの継続的改善―Sphinxを使いながらドキュメントの継続的改善―Sphinxを使いながら
ドキュメントの継続的改善―Sphinxを使いながら
soishino206 views
Sphinx ではじめるドキュメント生活 2013 #sphinxconjp by Takeshi Komiya
Sphinx ではじめるドキュメント生活 2013 #sphinxconjpSphinx ではじめるドキュメント生活 2013 #sphinxconjp
Sphinx ではじめるドキュメント生活 2013 #sphinxconjp
Takeshi Komiya12.6K views
Confluence と DITA による Webマニュアル作成フロー by Takashi Yamaguchi
Confluence と DITA によるWebマニュアル作成フローConfluence と DITA によるWebマニュアル作成フロー
Confluence と DITA による Webマニュアル作成フロー
Takashi Yamaguchi7.9K views
Python界隈の翻訳プロジェクト by Tetsuya Morimoto
Python界隈の翻訳プロジェクトPython界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクト
Tetsuya Morimoto3.5K views
20160730 fluentd meetup in matsue slide by cosmo0920
20160730 fluentd meetup in matsue slide20160730 fluentd meetup in matsue slide
20160730 fluentd meetup in matsue slide
cosmo09204.9K views
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp by Takeshi Komiya
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpSphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Takeshi Komiya10.4K views
Sphinx拡張 探訪 2014 #sphinxjp by Takeshi Komiya
Sphinx拡張 探訪 2014 #sphinxjpSphinx拡張 探訪 2014 #sphinxjp
Sphinx拡張 探訪 2014 #sphinxjp
Takeshi Komiya11.9K views
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話 by Takayuki Shimizukawa
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会 by Takayuki Shimizukawa
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
Takayuki Shimizukawa37.8K views
Sphinxの使い方事例 by Go Yamada
Sphinxの使い方事例Sphinxの使い方事例
Sphinxの使い方事例
Go Yamada13.9K views
基礎教養としてのUbuntuサーバ_後編.pptx by Yuji Naito
基礎教養としてのUbuntuサーバ_後編.pptx基礎教養としてのUbuntuサーバ_後編.pptx
基礎教養としてのUbuntuサーバ_後編.pptx
Yuji Naito143 views
WordPress サイト制作におけるデプロイメントを考える ~Git とデプロイメントサービスの活用~ by Toru Miki
WordPress サイト制作におけるデプロイメントを考える ~Git とデプロイメントサービスの活用~WordPress サイト制作におけるデプロイメントを考える ~Git とデプロイメントサービスの活用~
WordPress サイト制作におけるデプロイメントを考える ~Git とデプロイメントサービスの活用~
Toru Miki28.4K views
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力 by ThinReports
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports6.6K views
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは by Hiroaki Komine
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とはテクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
Hiroaki Komine2.5K views
MakeGoodで快適なテスト駆動開発を by Atsuhiro Kubo
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
Atsuhiro Kubo1.2K views
Cat tool overview for CEDEC2011 Draft by Self Employed
Cat tool overview for CEDEC2011 DraftCat tool overview for CEDEC2011 Draft
Cat tool overview for CEDEC2011 Draft
Self Employed1.6K views
OSS開発勉強会-01B by Kohei KaiGai
OSS開発勉強会-01BOSS開発勉強会-01B
OSS開発勉強会-01B
Kohei KaiGai523 views
ソフトウェア工学2023 13 ドキュメンテーション by Toru Tamaki
ソフトウェア工学2023 13 ドキュメンテーションソフトウェア工学2023 13 ドキュメンテーション
ソフトウェア工学2023 13 ドキュメンテーション
Toru Tamaki13 views
Stack Overflow+英文読む時、便利なツール by ishiki-takai
Stack Overflow+英文読む時、便利なツールStack Overflow+英文読む時、便利なツール
Stack Overflow+英文読む時、便利なツール
ishiki-takai1K views

More from Takayuki Shimizukawa

IKEv2-VPN PyHackCon2023 by
IKEv2-VPN PyHackCon2023IKEv2-VPN PyHackCon2023
IKEv2-VPN PyHackCon2023Takayuki Shimizukawa
20 views23 slides
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう by
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようTakayuki Shimizukawa
190 views52 slides
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022 by
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022Takayuki Shimizukawa
1.5K views46 slides
Webアプリを並行開発する際のマイグレーション戦略 by
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Takayuki Shimizukawa
4.8K views49 slides
『自走プログラマー』 が我々に必要だった理由 by
『自走プログラマー』 が我々に必要だった理由『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由Takayuki Shimizukawa
740 views22 slides
エキスパートPythonプログラミング改訂3版の読みどころ by
エキスパートPythonプログラミング改訂3版の読みどころエキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころTakayuki Shimizukawa
1.8K views23 slides

More from Takayuki Shimizukawa(20)

Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう by Takayuki Shimizukawa
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022 by Takayuki Shimizukawa
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
Webアプリを並行開発する際のマイグレーション戦略 by Takayuki Shimizukawa
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
『自走プログラマー』 が我々に必要だった理由 by Takayuki Shimizukawa
『自走プログラマー』 が我々に必要だった理由『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由
エキスパートPythonプログラミング改訂3版の読みどころ by Takayuki Shimizukawa
エキスパートPythonプログラミング改訂3版の読みどころエキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころ
RLSを用いたマルチテナント実装 for Django by Takayuki Shimizukawa
RLSを用いたマルチテナント実装 for DjangoRLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
【修正版】Django + SQLAlchemy: シンプルWay by Takayuki Shimizukawa
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
Takayuki Shimizukawa11.2K views
Sphinx customization for OGP support at SphinxCon JP 2018 by Takayuki Shimizukawa
Sphinx customization for OGP support at SphinxCon JP 2018Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx autodoc - automated api documentation - PyCon.KR 2015 by Takayuki Shimizukawa
Sphinx autodoc - automated api documentation - PyCon.KR 2015Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015
Easy contributable internationalization process with Sphinx @ pyconmy2015 by Takayuki Shimizukawa
Easy contributable internationalization process with Sphinx @ pyconmy2015Easy contributable internationalization process with Sphinx @ pyconmy2015
Easy contributable internationalization process with Sphinx @ pyconmy2015
Sphinx autodoc - automated api documentation - PyCon.MY 2015 by Takayuki Shimizukawa
Sphinx autodoc - automated api documentation - PyCon.MY 2015Sphinx autodoc - automated api documentation - PyCon.MY 2015
Sphinx autodoc - automated api documentation - PyCon.MY 2015
Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao) by Takayuki Shimizukawa
Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao)Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao)
Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao)
Easy contributable internationalization process with Sphinx @ pyconsg2015 by Takayuki Shimizukawa
Easy contributable internationalization process with Sphinx @ pyconsg2015Easy contributable internationalization process with Sphinx @ pyconsg2015
Easy contributable internationalization process with Sphinx @ pyconsg2015
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan) by Takayuki Shimizukawa
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)
Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ... by Takayuki Shimizukawa
Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ...Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ...
Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ...
PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93 by Takayuki Shimizukawa
PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93
PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93
PyPro2の読みどころ紹介:Python開発の過去と現在 by Takayuki Shimizukawa
PyPro2の読みどころ紹介:Python開発の過去と現在PyPro2の読みどころ紹介:Python開発の過去と現在
PyPro2の読みどころ紹介:Python開発の過去と現在
Takayuki Shimizukawa11.9K views

Recently uploaded

今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...NTT DATA Technology & Innovation
120 views42 slides
Windows 11 information that can be used at the development site by
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development siteAtomu Hidaka
88 views41 slides
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
18 views38 slides
The Things Stack説明資料 by The Things Industries by
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things IndustriesCRI Japan, Inc.
58 views29 slides
定例会スライド_キャチs 公開用.pdf by
定例会スライド_キャチs 公開用.pdf定例会スライド_キャチs 公開用.pdf
定例会スライド_キャチs 公開用.pdfKeio Robotics Association
111 views64 slides
SSH応用編_20231129.pdf by
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdficebreaker4
335 views13 slides

Recently uploaded(11)

今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
Windows 11 information that can be used at the development site by Atomu Hidaka
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development site
Atomu Hidaka88 views
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.58 views
SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
icebreaker4335 views
さくらのひやおろし2023 by 法林浩之
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023
法林浩之96 views
SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門
mkoda355 views

Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み

Editor's Notes

  1. (ここの文字サイズ大きくする、マウスをレーザーポインタにする) こんにちは、今日は私のセッションに来ていただいてありがとうございます。 このセッションでは「~」を紹介したいと思います。
  2. 伝統の「おまえ誰よ」から。 清水川です。 オープンソースで3つの活動をしています。 1. Sphinx co-maintainer since the end of 2011. 2. organize Sphinx-users.jp users group in Japan. 3. member of PyCon JP Committee. BePROUDで働いています。 弊社では、主にDjangoやPyramidなどを使ってWebアプリケーション開発を行っています。 最近、Pythonトレーニング事業、Python技術サポート事業も始めました。 自宅勤務が週5日までOK、スタンディングデスクあり、ラジオ体操ありの会社です。
  3. 本題に入る前に。質問があります。
  4. どのくらいの人がオープンソースソフトウエアを使っていますか? -> 10, 20, ... ありがとうございます。 A-> 明らかにほとんどの人がOSS使ってるようですね。 B-> あれ、意外と少ないですね。半分くらいでしょうか。
  5. 次の質問です。 自分はOSSに貢献している、という人はどのくらいいますか? -> 1, 2, ... ありがとうございます。 A-> かなり少なくなりましたね。N人くらいでしょうか。 B-> おー、けっこう多くの人が手を挙げてくれました。N人くらいですね。 私としては、OSSを使う事、それを人に勧めることが最初の貢献なのかなと思っています。 ですので、最初に手を挙げてもらった、OSS使ってる方はもう1歩目の貢献をしているのかなと思います。
  6. 次の質問です。 多くのOSSドキュメントが英語で提供されています。 これらを日本語など普段使っている言語に翻訳することは他の開発者の助けになると思いますか? 10, 20,... ありがとうございます。 A-> ほとんどの人がそう思う、ということですね。私もそう思います。 B-> あれ、みんな手を挙げるかなと思ったんですが・・、みんな英語読めってことですかね。厳しめですねー 私が聞いた話では、日本の技術者はググって開いたページが英語だとすぐ閉じちゃうらしいですけど。 そうでなくても英語よりも日本語のほうが読みやすいのは確かですね。 そんなこともあって、私もよくOSSのドキュメントを翻訳しています。
  7. 誰かがOSSドキュメントを翻訳すれば、より多くの人がそのOSSを使えるようになります。 (クリック) もし、より多くの翻訳者が翻訳作業に参加できれば、より速く正確な翻訳ドキュメントを提供できます。 このセッションでは、翻訳に簡単に参加しやすい仕組みをどうやって作るのかを紹介します。
  8. そのメカニズムを作るために、このセッションでは以下に紹介するツールを使います。 Tools; sphinx, docutils, sphinx-intl, transifex-client Services; Transifex, Drone.io.
  9. それでは、始めましょう。 まずはSphinxの紹介と、Sphinxの多言語対応向けセットアップからです。
  10. Sphinx is 何? Sphinxはドキュメンテーションジェネレータです。 SphinxはreStructuredTextというテキストマークアップから、複数の出力フォーマットに変換します。 (ポインタでinputとoutputを指す)
  11. Sphinxの歴史をちょっとだけ紹介します。 この人がSphinxの父、Georg Brandlさんです。 PyCon JP 2013のキーノートスピーカーでした。 (クリック) 2007年まで、Pythonの公式ドキュメントはLaTeXで書かれていました。 しかし、これはメンテナンスが難しくて、ほぼ不可能。 Georgはこの状況を変えようとしました。 (クリック) そして、2007年にSphinxを作りました。 Sphinxは書きやすくてメンテナンスしやすいことを目標に作られました。
  12. Sphinx以前、以降 以前 Python界にはドキュメントを書く標準的な作法が確立していなかった。Python公式ドキュメントもそのうちのひとつで、ドキュメントはLaTeXでかかれていて、LaTeXに変換したりLaTeXから変換する多くのスクリプトジャングルがありました。その頃は、出力フォーマット別に、それらのジャングルスクリプトでマークアップを変換して、さらに別のツールで出力していました。 Sphinxがこの地に降りたって以降、 * Python界の住人は、1つのソースコードから複数のフォーマットに出力できるようになりました。 * また、同梱されたHTMLテーマによって、ドキュメントは読みやすくなりました。 * APIリファレンスはライブラリの説明的ドキュメントと1つに統合して出力できるようになりました * ReadTheDocsという自動ドキュメントビルド&ホスティングサービスが登場し、便利になりました
  13. 今では、Sphinxは多くのPythonライブラリで使われるドキュメンテーションツールになりました。 Python libraries/tools: Python, Sphinx, Flask, Jinja2, Django, Pyramid, SQLAlchemy, Numpy, SciPy, scikit-learn, pandas, fabric, ansible, awscli, … そしてPython以外のlibrary/toolsでもSphinxは使われています: Chef, CakePHP(2.x), MathJax, Selenium, Varnish
  14. 今では、Sphinxは多くのPythonライブラリで使われるドキュメンテーションツールになりました。 Python libraries/tools: Python, Sphinx, Flask, Jinja2, Django, Pyramid, SQLAlchemy, Numpy, SciPy, scikit-learn, pandas, fabric, ansible, awscli, … そしてPython以外のlibrary/toolsでもSphinxは使われています: Chef, CakePHP(2.x), MathJax, Selenium, Varnish
  15. Sphinxはdocutilsというライブラリをベースに作られています。 Sphinxはdocutilsにはない、多言語化の機能を提供しています。 のちほど、この多言語化機能を詳しく紹介します。
  16. Sphinxと i18nツールのインストール まず、Sphinxは当然インストールする必要がありますね。 そして、 sphinx-intl と transifex-client を翻訳サポートのためにインストールします。 ところで、最新のtransifex-clientはちょっと安定してないため、私は0.8を使用しています。
  17. まず、翻訳の対象となるソースコードを手に入れるところからです。 今回の例では、そのソースコードはSphinxで書かれたドキュメントをもう持っていることにします。 ですので、取ってきたソースコードのdocディレクトリで "make html"を実行すればHTMLが生成されるはずです。 出力は _build/html にあります。
  18. ここで、ディレクトリ構成をみてみましょう。このようになっています。 (ポインタ) * まず対象のソースコードはどこか既存のリポジトリからcloneしてきたものです * ドキュメントのビルド出力 _build は "make html" で生成されたものです * Sphinxで書かれたドキュメントソースの雛形は一般的に"sphinx-quickstart"コマンドで作られます (クリック) docディレクトリの中に、 conf.py ファイルがあります。 このファイルに2行追加してください。 * 3行目: 出力するドキュメントの言語コードです。 * 4行目: localeディレクトリへの相対パスです。このlocaleディレクトリには翻訳カタログファイルを置くことになります。 セットアップはこれでおわりです。
  19. ここから主題に入っていきます。 Sphinxを使った貢献しやすいドキュメント翻訳プロセス、ってなんだろう、というのを見ていきます。
  20. 多言語化、ってなんでしょう。よく省略してI18Nと呼ばれます。 多言語化プロセスは、よく翻訳とか、ローカライズとかよばれますが、技術的には、こういった翻訳などを元のソースコードを書き直さずに行う事を多言語化といいます。 元のソースコードを書き直さずに行う、というのが重要なところです。
  21. 貢献しやすいってなに? ソフトウエアの利用者やドキュメント読者は、たまに翻訳で協力したいと思うことがあります。 でも、翻訳に参加するのに準備が大変だったり、環境構築スキルが要求されたりすると、うわーっ!ってなってあきらめます。 「貢献しやすい」というのは、翻訳などで簡単に協力できる「状況」のことです。
  22. 3つのケース HTMLだけで提供、翻訳できるけど、たいへん、元がちょくちょく更新される場合、どうやって追従する? So, for the comparison, I'll introduce the three cases of difficult to contribute. First one. The manual are provided only in the HTML files. Of course, you can translate it. But, usually the html files are frequently updated. How do you follow the original changes to update your translations? This is the first case. I have no idea how to follow the original changes.
  23. 2つめ。ソースを書き換える。 reSTを壊さないように 多人数に作業を分割できない 元が更新されたらどうする? 2nd example. When the manual are generated from reST files and docstrings in the source files, You can rewrite original files to translate it. But this approach has three problems: No1. You must be careful to maintain reStructuredText structure. No2. It's hard to divide translation tasks for a number of volunteer translators. No3. It's hard to pursue the upstream document source that is frequently updated.
  24. last example. OK, we are engineers. We can use git! (上を読む) Additionally, in this case, the repository owner should allow write access permission for each translators. This is also not a easy way.
  25. Well then, what is a easy way? My opinion is this. Left side is Not a easy way. Right side is A easy way. We need a easy way. The combination of the Sphinx i18n feature and some of the services can realize such a mechanism. Sphinxのi18n機能と、いくつかのサービスを組み合わせてこの仕組みを実現します。 That's what is the goal of this session これがゴール I'll explain what how to create the mechanism in this session. どうやって作るか説明します。 OK, let's move forward.
  26. 3rd Subject. Sphinx i18n feature. I'll explain the detail of the feature.
  27. Sphinx i18n は2つの機能で構成されてます。 1つめ。Potを生成 First one is the generation pot files from reST files. pot file is a famous translation catalog format for gettext that is used for i18n, you know. Potはi18n界では有名なgettext形式のカタログです 2つめ。reSTと、翻訳したPoから、翻訳HTMLを生成します Second one is the generation translated html files with using po files that is translated version of catalogs. It's the human work to prepare the translated po files from the pot files. このpoを用意するのは人間の仕事です。
  28. Like this, Converting the POT files into PO files is the job of humans. (クリック)作者がpotを生成して、翻訳者に依頼します (クリック)翻訳者はpotを受け取って、翻訳します。翻訳済みのファイルは拡張子をpoにします。 (クリック)おわったら、翻訳者は作者にpoを送ります 最初の部分をもうちょっと見ましょう
  29. 著者は "make gettext" でpotを生成します "make gettext" はreSTのtextから文章を取りだしてpotに書き出します。もしSphinxのautodoc機能を使っていれば、Pythonソースからもドキュメントを読み込みます このpotを翻訳すれば良いので、元のreSTやPythonコードを書き換える必要はありません。 "msgid" line have a original sentence. "msgstr" line will have translated one. このように翻訳カタログは1つの言語から別の言語に翻訳するのに便利です。
  30. Translated PO files should have as a right side structure. "locale" directory has "ja" and it has "LC_MESSAGES" directory, and it has translated PO files. PO files are copies of POT files with changed file's extension. If you want to translate it into other languages, like 'zh_cn', you can create other directories under "locale" directory. When original POT files are updated by changing of original document, you should update PO files too. If you had done it manually, it is very hard. You can automated it by sphinx-intl.
  31. At first, sphinx-intl copy pot files and rename them. When the document is changed, translators can use sphinx-intl to update PO differences. By same command. As you see, translators can finish the boring tasks by one command. sphinx-intl copy pot files and rename them on behalf of you. sphinx-intl also update differences for each po files when the document is changed. It's easy to use. As a consequence of introducing the sphinx-intl tool, translators can concentrate for translation.
  32. This is a translation work. Translators can use their favorite editors or helpful tools/services easily that provide translation support features like a translation memory, recommending similar translation, glossary and auto-translation. Once the translation is complete, finally let's run the "make html" command.
  33. Finally author and translators can run "make html" and can get translated output w/o editing reST and python code. This is a translated HTML sample. Internally, Sphinx parse reST file and replace them into translated one by using po file.
  34. Entire process to translate sphinx docs is this. If you translate some sphinx document without using the i18n feature, you need to rewrite original document source files. The Sphinx i18n feature provides a easy way to translate a document as you seen.
  35. So far, we've found the mechanism of i18n of Sphinx. In 4th Subject, Automated translation process with several services, we will continue to automate this mechanism.
  36. Right now, we have seen an overall picture of the process. Actually, I have a thing that was not pictured here. (クリック) Yes, these commands such as "make blah blah" require your hands to invoke. In other words, the translator must learn such steps, yet. Additionally, it would be difficult to translate in parallel. It's not a easy way, you know.
  37. OK, Let's make it to be automation and parallelization. And then, the translator doesn't need to know the mechanism. And, make the translation work possible to parallelize. Let's take a look at from the parallelization of the translation work.
  38. Once you get po files, you can use helpful tools/services easily that provide translation support features like a translation memory, recommending similar translation, glossary and auto-translation. In particular, the use of the online translation service is important for parallelization. I'd like to introduce the Transifex as a online translation service.
  39. Transifex provides the following functions: Upload pot and download po files by API, glossary feature, translation memory, recommending translations, automatic translation by using Google / Microsoft API. Because you can do translation on the Web screen, you can translate them with other translators in parallel.
  40. Translation on Transifex web console. 1. You can select one untranslated message 2. And Translate it by your self, or by machine translation 3. If the message contains long module or method name, you can click the icon to copy original to translation box w/o typing. 4. Sometimes, you are suggested translation messages from other translator, or Translation Memory. Translation Memory (called TM) pick up suggestions from similar translation in the project or its historical changes. For example, When Doc Author fix a typo, translation will be discarded. However, TM suggests previous translation that matches 99% with current original message. 5. Once you finish the translation, you can save it. 6. Optionally, reviewer can review it.
  41. We have made translation parallelization. Next. Let's automate the central part.
  42. The procedure you want to automate is made up of 6 steps. At first, we will review the 6 steps.
  43. First step is, Clone repository to be translated. Step 2. make gettext to generate translation catalog. Step 3. Upload pot translation catalog source. Step 4. Download translated po files. Step 5. "make html" command to generate translated doc. Step 6. Upload html to publish it That's all. Next, we will replace these all steps on the command line.
  44. This is the command line that include the steps. Line1: install sphinx and relates tools Line2: clone repository Line4: create a transifex account file by using sphinx-intl that reference environment variables (USERNAME and PASSWORD). Line5: create a transifex config file by using sphinx-intl that also reference a environment variable (PROJECT_NAME) Line6: generate pot files by make gettext Line7: update resources information in transifex config file that also reference a environment variable (POT_DIR) Line8: push pot files to transifex Line9: pull translated po files from transifex Line10: make html to generate translated html with using translated catalogs. Now we replaced 5 steps on the command line, except HTML uploading part. I'll explain the part later. As you seen above, You can automate the process by this script. Rest of work is preparing a environment to run the script automatically. As one of the environment, I'll introduce the drone.io service.
  45. The drone.io is a continuous integration service. Drone integrates seamlessly with Github, Bitbucket and Google Code to make setup fast and simple. Drone also integrates with Amazon, Heroku, Google AppEngine and more. For custom deployments you can use SSH and shell scripts. You can use the service for public project without charge.
  46. In my case, I usually use Github and S3 integrations. Process of that is, (クリック) 1. Push notification from GitHub 2. That invoke the script you've seen 3. Then, deploy html files onto S3 storage. (You need a publish html setting of S3) If you set WebHook notification URL to transifex hook setting, updating translations also invoke the drone.io script.
  47. By using drone.io service, automation can be achieved. Upper-Left process is replaced with Right-Down one.
  48. 1 WebHook invoke the script. The script execute commands 2, 3, 4, 5. Finally drone.io deployment feature will deploy HTML to AWS S3 storage. As this, we got the automated mechanism by using drone.io environment.
  49. In summary, let's look at the results of the automation at each point of view as author and translators. At first, a point of view from the doc author. When author push to the repository, translation source of Transifex will be updated, and author can check the translated html in the site. Doc Author doesn't require annoying procedure.
  50. The second is, a point of view from doc translators. They can translate the document in parallel with; No git, No file, No conflict. Translation source are updated Automatically They can get a translated HTML output w/o hand-build. It means that the translation contributors can focus on the translation.
  51. By the mechanism of automation, both of doc author and translators will provide the maximum effect with a minimum of effort.
  52. In order to make the mechanism, we'll use such tools and services in this session. Tools; sphinx, docutils, sphinx-intl, transifex-client Services; Transifex, Drone.io.
  53. I'd like to introduce some of the tips.
  54. Drone.io limits 15mins for a build. If your process takes more than 15 minutes, you may be able to reduce the installation time with using wheel. Wheel package is a installation format. Installation speed is much faster than install from source distribution. If you interested in it, please refer to https://bitbucket.org/sphinxjp/docutils-translation/
  55. Version of transifex-client. Looks like transifex-client 0.11b3 is not stable, for me. Especially for Windows users. If you have encountered trouble with using newer version, please try: $ pip install "transifex-client=0.8"
  56. This is a New project page of Drone.io. Drone.io only list-up repositories which you have admin permission. Because drone.io setup webhook, admin permission is required. However, if you prepare a empty repository for drone.io usage, you can create a drone.io project. It means you can prepare the i18n automation environment, except webhook push from github. I think, project owner might be setup the webhook url for translation work, if you ask it. It's bit a hacky way. But works.
  57. These 3 examples are using earlier techniques.