プログラマ行進曲第二章

主にソフトウェア関連の技術をネタにした記事を執筆するためのブログ

通っていたフィットネスクラブを退会した

昨年転職する前までは時間的に余裕があったので、運動の習慣をつけるためにフィットネスクラブに加入して通っていたのだが、転職してから忙しくてほとんど行けてなかった。

というのに、面倒くさくて退会手続きをしてなかったのだが、マネーフォワードに記録されているフィットネスクラブの引き落としの金額を見て、「流石にもう退会するか」と思ったので、先ほど退会手続きをしてきた。

これで毎月11,000円弱引き落とされていたお金がかからなくなる。

半年以上一回も行けてないのにずるずると今まで引き延ばしてきたが、年をまたぐ前に処理できてよかった。

一年の終わりも近づいているので、整理を色々としないとなあ、と思ってる。

RPMパッケージを相手にするときによく使うコマンドをメモしておく

Qiitaとか各種色々なところにもっと分かりやすい形でちゃんとまとまってるんですが、自分のブログに書くことで記憶定着を図りたいのでまとめます。

qiita.com

qiita.com

qiita.com

なお、以下に提示する例はCentOS6を使っているので、色々古いソフトが表示されてますが、気にしないでください。

インストールされたrpmを一覧表示する

rpm -qa

「インストールしたんだけど正確なパッケージ名が思い出せない」といった時にはgrepと組み合わせると効果を発揮。

rpm -qa | grep ruby
ruby-devel-1.8.7.374-4.el6_6.x86_64
ruby-1.8.7.374-4.el6_6.x86_64
ruby-irb-1.8.7.374-4.el6_6.x86_64
ruby-libs-1.8.7.374-4.el6_6.x86_64
ruby-augeas-0.4.1-3.el6.x86_64
ruby-shadow-2.2.0-2.el6.x86_64
ruby-rdoc-1.8.7.374-4.el6_6.x86_64
rubygem-json-1.5.5-3.el6.x86_64
libselinux-ruby-2.0.94-7.el6.x86_64
rubygems-1.3.7-5.el6.noarch

逆にパッケージ名を正確に覚えているときは -q オプションだけでいいです。

rpm -q ruby-devel
ruby-devel-1.8.7.374-4.el6_6.x86_64

RPMパッケージ経由でインストールされたファイルを一覧表示する

rpm -ql <package name>
rpm -ql ruby-devel
/usr/lib64/libruby.so
/usr/lib64/ruby/1.8/x86_64-linux/config.h
/usr/lib64/ruby/1.8/x86_64-linux/defines.h
/usr/lib64/ruby/1.8/x86_64-linux/digest.h
/usr/lib64/ruby/1.8/x86_64-linux/dl.h
/usr/lib64/ruby/1.8/x86_64-linux/dlconfig.h
/usr/lib64/ruby/1.8/x86_64-linux/dln.h
/usr/lib64/ruby/1.8/x86_64-linux/dtrace.h
/usr/lib64/ruby/1.8/x86_64-linux/env.h
/usr/lib64/ruby/1.8/x86_64-linux/intern.h
/usr/lib64/ruby/1.8/x86_64-linux/missing.h
/usr/lib64/ruby/1.8/x86_64-linux/node.h
/usr/lib64/ruby/1.8/x86_64-linux/re.h
/usr/lib64/ruby/1.8/x86_64-linux/regex.h
/usr/lib64/ruby/1.8/x86_64-linux/ruby.h
/usr/lib64/ruby/1.8/x86_64-linux/rubyio.h
/usr/lib64/ruby/1.8/x86_64-linux/rubysig.h
/usr/lib64/ruby/1.8/x86_64-linux/st.h
/usr/lib64/ruby/1.8/x86_64-linux/util.h
/usr/lib64/ruby/1.8/x86_64-linux/version.h
/usr/share/doc/ruby-devel-1.8.7.374
/usr/share/doc/ruby-devel-1.8.7.374/COPYING
/usr/share/doc/ruby-devel-1.8.7.374/COPYING.ja
/usr/share/doc/ruby-devel-1.8.7.374/ChangeLog
/usr/share/doc/ruby-devel-1.8.7.374/GPL
/usr/share/doc/ruby-devel-1.8.7.374/LEGAL
/usr/share/doc/ruby-devel-1.8.7.374/LGPL
/usr/share/doc/ruby-devel-1.8.7.374/README.EXT
/usr/share/doc/ruby-devel-1.8.7.374/README.EXT.ja

インストールしているパッケージの情報を表示する

rpm -qi <package name>
rpm -qi ruby-devel
Name        : ruby-devel                   Relocations: (not relocatable)
Version     : 1.8.7.374                         Vendor: CentOS
Release     : 4.el6_6                       Build Date: Mon 02 Mar 2015 09:12:37 AM UTC
Install Date: Thu 10 Nov 2016 10:08:51 AM UTC      Build Host: c6b8.bsys.dev.centos.org
Group       : Development/Languages         Source RPM: ruby-1.8.7.374-4.el6_6.src.rpm
Size        : 1103028                          License: Ruby or GPLv2
Signature   : RSA/SHA1, Mon 02 Mar 2015 12:21:02 PM UTC, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.ruby-lang.org/
Summary     : A Ruby development environment
Description :
Header files and libraries for building a extension library for the
Ruby or an application embedded Ruby.

RPMパッケージの情報を表示する

インストールしているときは rpm -qi <package name> ですが、まだインストールしてないRPMパッケージの場合は rpm -qpi <package name> で表示できます。

ls | grep ruby-devel
ruby-devel-1.8.7.374-5.el6.x86_64.rpm

rpm -qpi ruby-devel-1.8.7.374-5.el6.x86_64.rpm
Name        : ruby-devel                   Relocations: (not relocatable)
Version     : 1.8.7.374                         Vendor: CentOS
Release     : 5.el6                         Build Date: Wed 22 Mar 2017 05:52:23 AM UTC
Install Date: (not installed)               Build Host: c1bm.rdu2.centos.org
Group       : Development/Languages         Source RPM: ruby-1.8.7.374-5.el6.src.rpm
Size        : 1103263                          License: Ruby or GPLv2
Signature   : RSA/SHA1, Thu 23 Mar 2017 03:00:13 PM UTC, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.ruby-lang.org/
Summary     : A Ruby development environment
Description :
Header files and libraries for building a extension library for the
Ruby or an application embedded Ruby.

RPMパッケージに含まれているファイルを一覧表示する

rpm2cpio <package name> | cpio -t

rpm -ql はインストールしているRPMパッケージの時に使えるが、これはインストールしてなくてwgetなどでダウンロードしてきたRPMパッケージなどについて使える

rpm2cpio ruby-devel-1.8.7.374-5.el6.x86_64.rpm | cpio -t
./usr/lib64/libruby.so
./usr/lib64/ruby/1.8/x86_64-linux/config.h
./usr/lib64/ruby/1.8/x86_64-linux/defines.h
./usr/lib64/ruby/1.8/x86_64-linux/digest.h
./usr/lib64/ruby/1.8/x86_64-linux/dl.h
./usr/lib64/ruby/1.8/x86_64-linux/dlconfig.h
./usr/lib64/ruby/1.8/x86_64-linux/dln.h
./usr/lib64/ruby/1.8/x86_64-linux/dtrace.h
./usr/lib64/ruby/1.8/x86_64-linux/env.h
./usr/lib64/ruby/1.8/x86_64-linux/intern.h
./usr/lib64/ruby/1.8/x86_64-linux/missing.h
./usr/lib64/ruby/1.8/x86_64-linux/node.h
./usr/lib64/ruby/1.8/x86_64-linux/re.h
./usr/lib64/ruby/1.8/x86_64-linux/regex.h
./usr/lib64/ruby/1.8/x86_64-linux/ruby.h
./usr/lib64/ruby/1.8/x86_64-linux/rubyio.h
./usr/lib64/ruby/1.8/x86_64-linux/rubysig.h
./usr/lib64/ruby/1.8/x86_64-linux/st.h
./usr/lib64/ruby/1.8/x86_64-linux/util.h
./usr/lib64/ruby/1.8/x86_64-linux/version.h
./usr/share/doc/ruby-devel-1.8.7.374
./usr/share/doc/ruby-devel-1.8.7.374/COPYING
./usr/share/doc/ruby-devel-1.8.7.374/COPYING.ja
./usr/share/doc/ruby-devel-1.8.7.374/ChangeLog
./usr/share/doc/ruby-devel-1.8.7.374/GPL
./usr/share/doc/ruby-devel-1.8.7.374/LEGAL
./usr/share/doc/ruby-devel-1.8.7.374/LGPL
./usr/share/doc/ruby-devel-1.8.7.374/README.EXT
./usr/share/doc/ruby-devel-1.8.7.374/README.EXT.ja
2164 blocks

RPMパッケージからファイルを取り出す

rpm2cpio <package name> | cpio -id
ls
ruby-devel-1.8.7.374-5.el6.x86_64.rpm

 rpm2cpio ruby-devel-1.8.7.374-5.el6.x86_64.rpm | cpio -id
2164 blocks

ls
ruby-devel-1.8.7.374-5.el6.x86_64.rpm  usr

正直な話、「今の仕事を始める前にこれらのことをちゃんと知っておけば無駄な時間を使わなかったのにな」と思いながら書きました。

『やり抜く力 GRIT』を読み終わった

学生時代の読書のパターンと比べて、ここ10年間、技術書以外のジャンルの本をほとんど読まなくなってしまっていて、あまりよろしくないなと思い、以前は読んでいたビジネス書や小説なども読み始めるようにしました。

今回はビジネス書*1の読後感想です。

やり抜く力 GRIT(グリット)――人生のあらゆる成功を決める「究極の能力」を身につける

やり抜く力 GRIT(グリット)――人生のあらゆる成功を決める「究極の能力」を身につける

人生色々あったことも影響してか、学生時代と比べて物事をやり遂げる経験や力が少なくなっていると感じることが多く、立てた目標を完遂する癖をつけたいなとここ最近感じていたところ、たまたまこの本の著者のTEDトークでGRIT(やり抜く力)のことを知り、実践的なことが書いてあるのかと思って買って読んでみました。

読み終わった今感じることとして、率直に言うと期待外れでした。

というのも、『人生において何かを成すには「才能」よりも「やり抜く力」の方が重要度が高いことが研究の結果分かった』ということらしいのですが、その「やり抜く力」を伸ばす方法については(まだ研究途中ということなのでどうしようもないのでしょうが)、効果的な方法が研究の結果分かっている箇所もあればまだ不明なところもあるという箇所が多いようで、学問的に裏付けられた「やり抜く力を効果的に伸ばす方法論」が確立されてなさそうだったからです。

一応、「自分のスキルを上回る目標を設定してはそれをクリアする練習を習慣化する」など、指針となる方法は何個か提示されていましたが、どれも確立された方法論というよりは単なるガイドライン程度に(少なくとも私は)思えるレベルで、個人的に期待していたものが無かったということです。

ただ、本を読んでいてモチベーションを高める効果はあったのと、誰もが努力無しに楽に成功しているわけではないということを再認識できた効果があったのは良かったかと思います。

読む時の注意としては、ここで書かれていることを自身を対象に実践するのはおおよそ問題がなさそうですが、他者に対して実践しようとすると、容易にブラック企業がやるようなやりがい搾取的所業をするように振る舞ってしまいそうだなと思ったので、基本的に自分の人生だけに適用するように使った方がいい考え方だなと思いました。

もっと研究が進んで、やり抜く力を効果的に育成する方法論が確立されるといいんですけどね。

*1:というより自己啓発書?

プログラムの学習をしていて最近行った、ほんのちょっとした貢献

久し振りの雑文。

久し振りにOCamlの学習を再開しようとReal World OCaml 2nd Editionのサイトを見ようと思ったら、ある日突然該当サイトが見られなくなっていました。

Real World OCaml

スクリーンショットとか取ってないので証拠とかないんですが、この時該当サイトのSSL証明書の期限が切れていたので、Chromeでアクセスしたら「見られないよ!」と表示されてしまい、思わずTwitterにこんなことを書きました。

すると、Twitterでこんなリプライが来ました。

(日本で)OCamlを学習していたら絶対に記事を読んでいたり存在を見ているはずのcamloebaさんからこういうリプライが来たので「おお?!」と驚き*1ながらも、「たしかに愚痴っててもしょうがないし、連絡するのが真っ当だよな」と思ったので、早速Twitterで連絡。

Twitterで連絡がいいのかは分からなかったけれど、面倒でやらなくなるよりマシという精神で行いました。

しばらくして、著者の方から返事が来ました。

cronの設定が間違っていたとのこと。

余談ですが、「というかcronでrenewalの設定してると言うことは、SSL証明書にLet's Encrypt使ってるのか?」と思って確認してみたら予想通りLet's Encryptでした。

しばらく経った後サイトを確認したらSSL証明書の期限がちゃんと未来の日付になっていて有効になっていて、サイトも見られるようになったので念のために返信で報告。

すると、こういう返信をもらいました。

polymorphic variantの理解がまだ不十分でChapter6をそこそこにChapter7のError Handlingにやっと進めたというくらいの進捗ですが、ゆるゆるとやっていこうかと思います。

OCamlをやりつつ、ReasonMLの動向も目端に入れてやっていくつもりですね。

*1:実はcamloebaさんからリプライされたのはこれで2度目なんですが、それでも驚きました。別にフォローされているわけでもないので。

Tokyo Quantopian User Group Vol.02 に参加して株やシステムトレードの基本について学んできました

学生時代にほんの少額を投資信託に使い始めて、今も余力がある分だけは資産運用という名目の元、マネックス証券が出しているanswerというスマホアプリなどの情報を元に適当に投資信託をやっていたのですが、最近はあまり手も出せずにロボアドバイザー任せにしていたり、そもそも資産運用とか金融知識を体系的に学んだことがなくて戦略というものが無く、「いつかまとまって勉強したいなあ」と思っていました。

そういう背景があったのと主催関係者からのお誘いもあり、今回Tokyo Quantopian User Group Vol.02というイベントに参加することにしました。

quantopian-tokyo.connpass.com

誘われるまでQuantopianというものを聞いたことがなく、サイトに行って軽く流し見をしてもよく分からず「???」という感じでしたが、ネットで軽く調べたところ、プログラムを組んでアルゴリズムを作って現実の株価を元に投資戦略を開発することが出来るプラットフォームという感じらしいことまでは把握。

qiita.com

「事前にアカウントを作っておいてね」とのことだったので、前日にアカウントを作るまでは資産運用のことも含めて特に事前勉強とかせず、イベントに参加。

イベント内容は以下の通りでした。

  • Quantopianをはじめるための株式取引用語入門
  • Quantopianハンズオン

以下、参加して勉強したことや感じたことを軽く書きます。

Quantopianをはじめるための株式取引用語入門

まずはじめに座学ということで、Quantopianを使う際に知っておいた方がいい用語などを含めた株式関連の座学がありました。

「あくまで初心者向けの内容のため、記述の正確さなどを犠牲にしている部分があることはご承知ください」という趣旨の注意事項が最初にあって、各用語や概念の話がされました。

ドローダウンなど初めて聞く言葉ばかりでメモが追いつかず、不正確な部分が多いかと思いますが、自分が後で振り返れるようためにも、手元に残したメモをもとに羅列していきます。メモといっても発表に使われたスライドの内容をほぼ転記したものですが。移し間違いなどもあるかと思いますし、あくまで参考ということで。

  • 株式
  • 株式分割
    • 株式分割とは、投資家が株を買いやすくすることなどを目的に、会社がその発行済みの株を一定の割合で分割するもの
  • ETF
    • Exchange Traded Fundsの略
    • 上場投資信託
    • アメリカの場合の例
      • S&P 500
        • アメリカの代表的な上場会社500銘柄による指数
      • SPY
        • S&P 500に連動するよう設計されたETF
    • ETFの価格は指数とは関係ない。ETFの価格の変動は指数と関係する。
  • ビッド価格
    • 買い手側の話
    • 株を買おうとしている人が提示している値段
  • アスク(オファー)価格
    • 売り手側の話
    • 株を売ろうとしている人が提示している値段
  • ビッド・アスク・スプレッド
    • ビッドとアスクの価格差
  • ミッド価格
    • ビッドとアスクの真ん中の水準
  • 約定価格
    • 実際に取引がなされた価格
    • (取引された時点における)ミッドの水準ではない
  • 出来高
    • 実際に取引がなされた株数
    • 取引がなく、出来高がゼロでもミッド価格は存在(取引できない)
  • スリッページ
    • 注文価格(あるいは計算上の価格、基準となる価格)と実際の約定価格との差
  • ロング
    • 株などを買って持っていること
    • 買い持ちの持ち高をロングポジションという
  • ショート
    • (持っている株よりも多くの)株を売っていること
    • 売り持ちの持ち高をショートポジションという
  • エントリー
    • (メモできず)
  • エグジット
    • (メモできず)
  • ベンチマーク
    • 一般に、株式市場全体の動きを示す目安となるもの
  • アルファ
    • ベンチマークと比較して、どれくらいうまく利益を出せているかを表す指標
  • ベータ
    • (メモできず)
  • ドローダウン
    • 運用している資産の、過去の最大額を基準として、損失によって減少した額の比率のこと。
  • シャープレシオ
    • 運用資産の価値の変動の程度に対して、どれくらい収益があるかを示す指標
    • シャープレシオが高いということは、リスク(価値の変動)が小さく、リターンが大きいということ
  • ソルティノレシオ
    • シャープレシオの修正版のようなもの
    • 運用資産の価値が上昇するのは気にする必要がないと考え、下落方向の価値の変動だけに対して、どれくらい収益があるかを示す指標

他にも説明があったことは手元のメモには残しているのですが、不十分だったり正確に書けていない恐れが強かったので外しています。

上記に記載した用語の内、聞いたことがあったのは複数ありましたが、正確に理解しているものは一つも無かったので勉強になりました。

この後のQuantipianハンズオンで分かるのですが、こういった用語の意味を把握していないと、トレーディング関連のソフトウェアで表示される値の意味が全く分からないんだなということが分かったのが収穫でした。

後、SPYは大分優秀なETFだということもこの後のハンズオンで分かりました。

Quantopianハンズオン

QuantopianのハンズオンではQuantopianの使い方や表示される画面の意味などの説明を受けました。

受けてみて思ったのは、「私みたいに投資の素人が誰の手ほどきや説明も受けずに公式のチュートリアルだけでQuantopianの使い方を学ぶのは非常に時間がかかりそう」というもので、ちゃんと使うためにはPython(とpandas)の知識を前提にした上で、Quantopian独自のお作法を使ってアルゴリズムを組む必要があるので、今回のようなハンズオンに参加できたのは結構時間の節約になって良かったと思います。

このハンズオンでは説明を聞きながら実際にQuantopianを動かしていたため、自分用のメモを全く取る暇が無く、手元に資料がないのでまともな振り返りが出来ないのですが、雰囲気だけでもお伝えできるよう、Quantopianスクリーンショットを載せておきます。

Untitled

スクリーンショットの文字が小さくて見えないでしょうが、最初の座学で説明があったシャープレシオソルティノレシオ、アルファ、ベータなどの値が表示されています。なので、ここら辺の値が意味するところを分かってないと「???」な状態になること間違いなしだと思いました。

上記スクリーンショットアルゴリズムは運営の方が用意した「毎日取引開始時間にフィリップモリスの株をひたすら買うだけのアルゴリズム」で、見て分かるとおり、ベンチマークに比べて大分負けています。というか、ベンチマークに選ばれているSPYが大分優秀で、SPYを買っているだけで9%以上のリターンがあるので驚きでした。

メモがないので思い出すのも一苦労ですが、以下のような点がQuantopianのすごいところだと思いました。

  • (アメリカの)株価を取得できる関数が用意されているので、スクレイピングとかの手間いらず
  • 「条件に合った銘柄だけを対象に売り買いの設定をする」のが柔軟に可能
  • 株式配当があって、配当が来た分で買いの条件を満たしていたら自動的に買いの発注をするなど、こちらが手間をかけなくても条件に沿った運用をシミュレーションしてくれる

結構細々とした点がQuantopian側でフォローされていて、自分たちは純粋にアルゴリズムを組むことに専念できるという所が強みなのかなというのが教わりながら触ってみて感じた印象です。

深く使おうとすると無限に時間を吸い取られそうなので、今すぐどうこうするということは考えてないのですが、いつか時間を取っていじりたおしてみたいとは思いました。

まとめ

資産運用に対する勉強の意識が高まりました。

はい。高まっていて行動しないといういつものパターンに陥りそうなので、アウトプットの練習がてら、普段の生活に組み込めるよう、ちょっとずつ変えていきたいですね。

あと、主催関係者がFinTech関連のLT大会&忘年会を以下のように企画しているようなので、興味のある人は参加してみるといいと思います。

fin-py.connpass.com

カズオ・イシグロの『忘れられた巨人』をやっと読み終わりました

12月になり、今年も終わろうとしているのでこう書いても大丈夫だと思いますが、個人的に今年一番驚いたことはカズオ・イシグロノーベル文学賞を受賞したことでした。

日の名残り』、『わたしたちが孤児だったころ』、『わたしを離さないで』、『夜想曲集』といった氏の著作を読んでいたくらいのにわかなファンだったのですが、10月5日、仕事から帰宅して一息つきながらネットを見ていたら、「今年のノーベル文学賞カズオ・イシグロが受賞!」というニュースを見つけて思わずビックリし、私と同じく氏の著作を好きで読んでいた親に思わず「今年のノーベル文学賞カズオ・イシグロだってさ!」と言いに行ったくらいです。

最初こそ驚いたものの、少し時間が経って落ち着いた頃、こう思いました。

「実績や実力を考えたらカズオ・イシグロノーベル文学賞を受賞しても何の不思議でもないな」と。

文学部にいた癖にたいして文学のことを知らない私ですが、そんな私でも氏の著作はいい意味で文学作品によくありがちな堅苦しさが少なく、(エンタメ小説ほどではないにしろ)面白く読める作品ばかりで、好きな作家の一人です。

で、そんな氏の著作最新作の文庫が凄い良いタイミングで出版されたので購入してやっと読み終わりました。

読み終わったときの感想

ツイートしていたので引用。

…半分くらいは冗談の混じった感想ですが、実際に感じたことなので、機会がある人は『忘れられた巨人』を読んでみるといいと思います。作中で登場する『霧』がどんなものなのかといった軽いネタバレを知っておいた方が逆に楽しめるかもしれません。

忘れられた巨人』は今まで読んできた氏の著作の中でどれくらいの良さだったか?

最初にも触れたとおり、私がこれまで読んだことのあるカズオ・イシグロの作品は『忘れられた巨人』を除くと以下の通りです。

日の名残り (ハヤカワepi文庫)

日の名残り (ハヤカワepi文庫)

わたしたちが孤児だったころ (ハヤカワepi文庫)

わたしたちが孤児だったころ (ハヤカワepi文庫)

わたしを離さないで (ハヤカワepi文庫)

わたしを離さないで (ハヤカワepi文庫)

夜想曲集: 音楽と夕暮れをめぐる五つの物語 (ハヤカワepi文庫)

夜想曲集: 音楽と夕暮れをめぐる五つの物語 (ハヤカワepi文庫)

この中で私が一番好きなのは『夜想曲集』ですね。カズオ・イシグロの作品の中で唯一の短編集なんですが、だいぶ心に染みる話が多い印象があります。その次が『わたしを離さないで』でしょうか。

世間的な評価だと『日の名残り』と『わたしを離さないで』が二強のような気がしますが、私としてはこんな風に感じています。

で、今回の『忘れられた巨人』がどれくらいだったか自分なりに振り返ってみると、読後の最初のインパクトこそ『わたしを離さないで』などと比べると弱いものの、時間が経ってからふとまた読みたくなる具合で言ったら『夜想曲集』の次に来るくらいには気に入りました。

カズオ・イシグロの作品、舞台設定だけでなく世界観も結構作品によってバラバラなので一律に楽しさを比較することができないと個人的に思っています。特に今回の『忘れられた巨人』は6世紀のイギリス(ブリテン島)を舞台にしたファンタジー要素の強い小説なので、今までのどの作品とも毛色が違うのですが、巷でよく言われているように、これまでの氏の著作にも通底する「記憶とは何なのか?」というテーマが本作にも盛り込まれているので、一回読んだ後ある程度時間をおいてまた読みたくなる作品だなと思いました。

…全く本の内容とか面白さを伝えない記事になってしまいましたが、そんなもんですね。

ノーベル文学賞で話題になってたし、話のネタに読んでみるか」くらいの軽いノリの人には最初のカズオ・イシグロ作品として『忘れられた巨人』はいいかもしれません。

これまでだったら『わたしを離さないで』を順当に薦めていると思うのですが、ノーベル文学賞の受賞の報道の際に『わたしを離さないで』の盛大なネタバレがテレビ含めて各種報道でバンバンされていたので、まだそこまでネタバレっぽいのが蔓延していないという意味でも『忘れられた巨人』はいいと思います。

個人的には久し振りにファンタジー小説で楽しめてよかったです。

SphinxCon JP 2017 に参加してきた #sphinxjp

自分がIT系の勉強会へ定期的に参加するようになったきっかけの一つであるSphinxのイベントがあったので参加してきました。

https://sphinxjp.connpass.com/event/71056/

おしゃれな会場の様子が分かるツイート。

以下、今回のイベントの発表目次です。

  1. cocoatomo 「Sphinxが支える翻訳ドキュメント」
  2. 鹿野桂一郎 「Sphinxで売り物の書籍を作ってみた」
  3. r_rudi 「Re:VIEWとSphinxと、時々、ボク」
  4. Iosif Takakura 「社内のマニュアルをSphinxで作ってみた」
  5. 渋川よしき 「HTMLテンプレート再構築案」

イベントが始まるときの会場説明の際の様子はこんな感じでした。

Untitled

イベント途中で提供されていたケータリングの様子。

Untitled

ケータリングに群がる人々。

Untitled

以下、メインコンテンツである発表の様子を写真とともに軽く感想を交えて書き残します。

Sphinxが支える翻訳ドキュメント」 @cocoatomo

Untitled

普段、「ちょびよみ」というこじんまりとした勉強会でお世話になっている @cocoatomoさんの発表でした。

発表内容のメインは「翻訳ドキュメントができるまで」とのことで、想定読者はSphinxを使っている人と翻訳プロジェクトの管理に興味がある人で話をされていました。

これが発表で使われたスライドです。

Pythonドキュメントの翻訳率は2017/11/27時点で日本語が圧倒的の92.73%!

PEP545により、日本語版とフランス語版が docs.python.orgのドメイン配下に置かれるようになったとのことで、素晴らしいですね。

翻訳プロジェクトの始め方

始めるに当たって考えること

  • 原文と訳文は1対1か? 脚注、訳注の追加や文章の順序を入れ替えをしたいか?
    • YesならSphinxはやめておいたほうがいいだろうとのこと
  • 翻訳作業は一度きりか継続的に行うか?
  • 翻訳プロジェクトを管理する上で困難な点は何か?
  • 困難な点をフォローするために、どのツールやサービスを使って、どんな運用をしていくのか

当たり前の話だろうけど、単発型よりも継続型の方が管理・運用が大変とのこと。

翻訳作業の困難さ

  • 原文の管理
    • 更新の取り込み
  • 訳文の管理
    • 原文と訳文の対応つけ
    • 複数人作業による翻訳作業の衝突回避
  • 翻訳
    • 訳語の統一
    • 表現の統一(特に複数人作業)

発表中、一時的にディスプレイとPCの接続がおかしくなったりする、あるあるなトラブルが発生したりしました。

普段から翻訳に対する思いをTwitterやSlackや或いは直接お話しして伺っていたのですが、改めて翻訳に対する熱い思いをお持ちなのだなと感じました。

Sphinxで売り物の書籍を作ってみた」 鹿野桂一郎 (@golden_lucky)

敏腕編集者の鹿野さんによる発表。怪我をされたらしくて松葉杖で歩いていて、発表時は座って喋っていたので下の写真には写っていません。

Untitled

発表に使われたスライドは以下の通りです。

『Goならわかるシステムプログラミング』ではSphinxのmake latexpdfでPDFを生成してはいないとのこと。

正直TeXは全く分からないに等しい知識レベルだったため、発表内容で披露された数々の努力がどれくらい大変なことだったのかは想像でしか分からないですが、売り物の書籍を作るのはやはり大変なことなんだなあというのが感じたことです。

話しを聞く限り、これはTeXに習熟した鹿野さんだからこそ可能になったハックだなあと思いました。話している内容が完全に技術寄りなので、技術者が編集者をしているという評はその通りだと思いました*1

完全に「鹿野専用Sphinx」という趣なくらいの追加・改造をしているようで、何かロボットアニメを見ているような気分になりました。

「生TeX埋め込みのロールを早く作っておけばよかった」という話が面白かったですね。

まとめ: 「Sphinxで困ったら日本語でツイートすればいい」

鹿野さんからの一言を引用。

「Re:VIEWとSphinxと、時々、ボク」 @r_rudi

Untitled

スライドはこちらです。

Re:VIEWとSphinxと、時々、ボク — SphinxCon 2017 1 ドキュメント

タイトルからも分かるようにRe:VIEWとSphinxの話が主でした。全体的にRe:VIEWとreSTの特徴や変換についての話が多かったのですが、reST->Re:VIEWの変換をするSphinx拡張を書いていただけではなく、Re:VIEWの方にreSTへ変換する機能をPRで出してmergeされていたという話しを聞いてびっくりすると同時にすごいなって思いました。

SphinxCon 2017が終わった後、@r_rudiさんを含めた有志で軽く飲み会みたいなものが開かれていたのでそれにお邪魔して色々楽しい話が出来たのもよかったですね。

「社内のマニュアルをSphinxで作ってみた」 Iosif Takakura(@huideyeren)

Untitled

発表に使われたスライドはこちらです。

Excel方眼紙が大嫌いです!」ということを言ったら会場から拍手が出たのが面白かったですね。

技術よりも現実世界と戦う機会の多い人は彼の発表スライドを読んでみると共感することが多々あると思います。

実は発表者のTakakuraさんは前職の同僚で、同じプロジェクトをいくつか手がけたりしていたので、彼の発表の裏にある背景とかを知っている関係もあり、「ああ、やっぱり大変そうだなぁ…」と共感することばかりでした。

以下、発表を聞いているときの私の感想です。

「HTMLテンプレート再構築案」 渋川よしき(@shibu_jp)

Untitled

発表に使われたスライドはこちらです。

HTML Template Proposal for Sphinx 2.x — HTML Template proposal for Sphinx 2.x 2017.11.23 documentation

前の発表者のTakakuraさんの発表内容を受けて、「make singlehtmlでwordやmediumに貼り付けると綺麗な形のまま形式を変換できるので、引き継ぎの形の一つとしておすすめ」という小話があり、かなり有用な知識が得られましたね。

渋川さんの話はデベロッパーやメンテナ向けの話とのことで、epub3ビルダーの走りをSphinxにプルリクした身としてはかなりためになる話でよかったです。

話の内容を箇条書きにすると以下のような感じ。

  • HTMLテンプレートの依存の多さ・複雑さにより、自作のテンプレートを差し替えるのが難しくなっているので簡素化したい
  • 検索機能の強化をしたい
  • OGP(Open Graph Protocol)の強化
  • Offlineモード
  • パフォーマンス改善
    • Prefetch
    • AMP

今回の発表とは直接関係ないですが、私がプルリクでSphinxに追加した拙いepub3ビルダーを渋川さん*2がガシガシ作り直してくれたおかげで、昔とは比べものにならないほどvalidなepub3が生成できるようになったので感謝すると同時に、その辺りの作業を外から眺めていたこともあって、HTMLテンプレートの話とかは興味深く聞かせてもらいました。

r_rudiさんの項目でも触れた有志の飲み会に渋川さんも参加していて色々お話しできたのも楽しかったですね。

LT: 木星人はnbsphinx使ってみよう by driller/どりらん

Untitled

nbsphinxいいよ!という話しでした。

…すいません、集中力が切れていて、あまりちゃんと話を聞けてなかったです。

今発表スライドを見たらnbsphinx良さそうですねという感想です。最近Jupyter notebookを使うことが増えてきたので活用したいと思いました。

以下終了後の余談。

LT: Sphinx-users.jp というコミュニティの紹介 by @usaturn

今回のSphinxCon 2017の開催のとりまとめをしていたusaturnさんによるSphinx-users.jpの紹介。

Sphinx-users.jpが普段どういう活動をしているかを紹介して、来場者の人だけに『Sphinxをはじめよう 第2版』を安く購入できるクーポンコードを提示していたりしました。

多分発表スライドが公開されていない(はず)理由はこのクーポンコードがスライドに含まれていたからだと思います。

忙しい中、会場調整だったり各種とりまとめをしていたはずなのでお疲れさまでしたと伝えたいです。

まとめ

理由は分からないですが、何故か久し振りに参加して楽しく過ごせて「かつ」翌日体調的にそれほどダメージを受けなかったのでとてもよかったです。

あとそれほど日をまたがずに参加ブログ記事をアップできてよかったですね!

*1:世の中に存在する編集者の中で自分の編集作業用にHaskellでソフトを書ける人、そうそういないと思います

*2:アクティブなメンテナの小宮さんも結構改良に参加されていたはず