sphinxjp.themes.bizstyle v0.1.6 をリリースしました

最後にこのblogで記事を書いたのは今を遡ること10ヶ月、昨年10月01日でした。

そのまましばらく記事にできるような活動を一切しないままここまで来てしまった わけですが、今日は久しぶりの更新です。

リリースの概要

タイトルの通り、みんな大好きSphinxの拡張HTMLテーマである sphinxjp.themes.bizstyle の新しいバージョンをリリースしました。

今回のリリースは主にissueのFixになります。

これによって、表示に不具合等が出ていた部分について、期待する表示になるように 変更されています。

そのほかの変更点は次のとおりです。

  • Sphinx 1.2からは sphinxjp.themecore の機能がSphinx本体に取り込まれているためbizstyleのパッケージから sphinxjp.themecore の依存を外しました

    Sphinx 1.2未満を使用していて、新規にbizstyleを利用しようとする場合には sphinxjp.themecore が自動でインストールされなくなりますのでご注意ください。

  • bizstyleのメンテナンス環境を整えるために、これまでbuildoutを利用していましたが、これをvirtualenv(venv)を利用するように変更しました。 このため bootstrap.py や buildout.cfg などのファイルが削除されています。

Sphinx 本体へのPR

そしてこの度、bizstyleを正式にSphinx本体のコードベースに取り込んで頂くため、 Sphinx本体へプルリクエストを出しました。

状況ですが、プルリクエストは無事に受理され次期リリースバージョンに含められる方向で進んでいるようです。

これまで個別にインストールして利用されていた皆さんには朗報かと思いますし、 利用されたことのない方々にも使って頂ける機会が増えることになるので、嬉しい ような恐ろしいような微妙な心境です。

なお、今後のテーマのメンテナンスをどう進めていくかについては実際にSphinxの 次期バージョンがリリースされてから考えることになると思いますが、bizstyle テーマについてのリクエストや提案などについては、当面 bitbucket 上の sphinxjp.themes.bizstyle リポジトリ で受け付けます。 表示の不具合やその他気づいた点などありましたら、お気軽にご相談ください。

pygments style solarized v0.1.1 リリースしました

昨年のPyConJP2012の直後にリリースしてから放置状態になっていたパッケージに対して、海外の方々からissueを貰ったり、pull requestが来たりしていたので、流れでリリースまでやってしまいました。

なんていうパッケージ?

pygments-style-solarized といいます。

pygments-style-solarizedPygments の拡張モジュールです。 Pygments はPythonで書かれたシンタックスハイライタで、ドキュメントツールSphinx でも利用しているのでどこかでご覧なったことがある人も多いと思います。

Pygments は組み込みで幾つかのスタイルを持っていますが、拡張のためのインターフェースを持っているので自分の好みのスタイルを作ることができます。 pygments-style-solarized もそうして作ったモジュールの一つです。

どんな感じなの?

実際にハイライトされたコードを見てみましょう。 なお、サンプルのコードに特に意味はありません。

Python:

def uint32_to_native_hex(value):
    """ pack unsigned int as native bytes, and unpack as hex. """
    if sys.byteorder == 'big':
        ORDER_MARK = '>'  # big endian
    else:
        ORDER_MARK = '<'  # little endian
    fmt_uint = ORDER_MARK + 'I'
    return hexlify(pack(fmt_uint, value))


def int_to_hex(value, octets=2):
    """ hex representation as network order with size of ``octets``
    ex) int_to_hex(1)     # => "0001"
        int_to_hex(32, 4) # => "00000020"
    """
    return ('%%0%dx' % (octets * 2)) % value


def ipv4_to_hex(ip_address):
    return ''.join([int_to_hex(int(i), 1) for i in ip_address.split('.')])

Emacs lisp:

;; Library Paths
(defun add-to-load-path (&rest paths)
  (let (path)
    (dolist (path paths paths)
      (let ((default-directory (expand-file-name
                                (concat user-emacs-directory path))))
    (add-to-list 'load-path default-directory)
    (if (fboundp 'normal-top-level-add-subdirs-to-load-path)
        (normal-top-level-add-subdirs-to-load-path))))))

;; add-to-load-path
(add-to-load-path "conf" "elisp")

;; require Common-Lisp functions.
(require 'cl)

Solarized にはlightとdarkの2つのカラースキームがあります。淡く明るい背景色をベースに配色を組み立てたlightと濃く暗い背景色をベースにしたdarkです。 これはdarkと呼ばれるカラースキームになります。

どうすれば使える?

Pygments を使用する際に、 pygments-style-solarized も一緒にインストールしてもらえれば、あとは Pygments のスタイルで solarizedlight または solarizeddark を指定するだけで使えます。

Sphinx で利用する場合も同様で、 pygments-style-solarized をインストールしておき、ドキュメントプロジェクトのconf.pyに次のように記述すればOKです:

pygments_style = "solarizedlight"

v0.1.1 での変更点は?

恥ずかしながら、typoの修正のみです。

2点修正があり、ひとつはスタイルクラスのコメントの誤りの修正です。 こちらは issue を登録してもらいました。

もうひとつはスタイル定義の中で色を指定する16進数のtypoで、こちらはpull request を頂きました。

おかげ様でようやく正しい色調で表示できることと、相成りました。はい。

今後は?

少し申し訳ない気もしますが、自分の手で積極的に修正をしていくつもりはありません。

ですが、元々思いつきで作ってみたものなので、配色のバランスなどで意に沿わない部分がある人もいるかと思います。vimやらemacsやらのエディタ向けに配布されているテーマと比較すると、配色が異なる部分が気になることもあるでしょう。

そんな時は「自分ならこうする」というアイデアを、ぜひpull requestの形で見せて頂ければと思います。

PyCon APAC 2013 で当日スタッフをしてきました

イベントが終了して少し間が空いてしまいましたが、参加報告エントリです。

http://apac-2013.pycon.jp/ja/

PyCon とは

プログラミング言語Pythonのユーザが集まるカンファレンスです。ユーザと言っても趣味で触っている個人から、業務や案件で使っている企業の方までさまざまです。

そういった人たちが一同に会して、自分たちがどうやってPythonを使っているか、Pythonで何ができるのか、Pythonはどう使うと楽しいのか、といったことについて熱く語ったりするイベントです。

APAC って付いてるけど?

はい。

2011年、2012年はPyCon JPという形で、主に日本国内のユーザや企業を主体としたイベントを意図して開催していましたが、今年はAPAC(アジア・環太平洋地域)を対象としたイベントとして開催されました。

キーノートスピーカとして、Python製ドキュメント生成ツールSphinxの作者であるGeorg Brandlと、DropBoxの3番目のエンジニアであるRian Hunterの二人を迎え、国際的なカンファレンスとして日本語のトラックだけではなく、英語のトラックも設けられ、アジアに限らず欧州や北米地域からセッションのために来日したエンジニアも多数参加してくれていました。

そこで何をしていたのか

詳しいレポートや、それぞれのセッションの様子等はレポート記事やオフィシャルのYouTubeムービーをご覧頂くとして、では私は当日何をしていたのか、について。

当日は写真(スチル)担当として、会場のそこかしこで写真を撮っておりました。

カメラを片手に歩くあご髭を伸ばしたカメラマンを会場のいずこかで見かけた方もいらっしゃるでしょうか。それが私です。

PyCon JP として国内でカンファレンスを始めた当初から、当日の写真撮影を担当しておりまして、貧弱な機材とさして上手くもないウデでどうにかイベントを盛り上げるべく協力をさせて頂いてます。

声を掛けてくださった副座長の shomah4a さん、ありがとうございます。

撮影した写真は?

私を含め、期間中は2+1名のカメラスタッフが会場のそこかしこで被写体を求め、やおらシャッターを切っていたわけですが、撮影した総数はおそらく2,000枚程度になります。

さすがにすべての写真をウェブに上げるには多すぎるのと、撮り損ないやら公開すべきでないやらといった写真のフィルタリングの作業を行った上で実行委員会の方からオフィシャルのウェブアルバムという形で公開をさせて頂くことになるかと思います。

アルバムに含まれる写真の総数は、だいたい2〜300枚くらいになると思われます。 (あくまで予想ですが…)

で、どうだったの?

毎度のことなのですが、想像以上に疲れました。特にセッションスピーカのみなさんの顔(表情)を撮るのが難しい。もちろん、できる限り撮りましたが。。。

そんなこんなで公開用のアルバムに向けて鋭意選定中ですので、しばらくお待ちください。 出来上がったアルバムを気に入って頂ければ幸いです。

ansible v1.2.2 ドキュメントを翻訳しました

だいぶ遅れてしまいましたが(Version1.2.2)のドキュメントを翻訳してみたので、 ブログで紹介しておきます。

https://github.com/shkumagai/ansible-doc-ja

Ansibleについては、最近ぼちぼちTwitterのタイムラインなどで目にすることも 増えてきているので、ここでわざわざAnsibleが何であるか、に触れることは しません。既に紹介記事を書いている方のブログを貼っておきますね。

インストール方法とか、使い方については翻訳したドキュメントに書かれているので ぜひ参照してみて下さい。 翻訳ミスやの表記のゆらぎなどなど、ツッコミがあれば遠慮無くissue登録してください。

既に使われている方はご存知かと思いますが、Vagrantとの連携機能も追加されて いたりするので、手元のPCでお試し環境を作って壊してを繰り返している方々は 面倒な作業をAnsibleに任せてやると、少し幸せになれるかも知れません。

v1.1ドキュメントからの差分

以前のドキュメントからの差分は、次のとおりです。

  • role(ロール)機能についての説明が追加された
  • playbook内での変数の記述例が、Jinja2テンプレートの形式に統一された
  • 細かな補足説明がいくつか追加された

特別に大きな変更はありません。下手すると変更に気付かないくらいです。

ansible v1.1 ドキュメントを翻訳しました

世間的には既に次のバージョン(Version1.2)がリリースされているので、今更の観が ありますが、いちおう頑張って翻訳してみたので公開します。

https://github.com/shkumagai/ansible-doc-ja/tree/v1.1

Ansibleってなに?

既に何人かの方々がブログで紹介記事を書かれているので、自分の方で敢えて書く必要も ないかと思いますが、一言で言い表すなら、Pythonで書かれた構成管理ツールです。

ChefやPuppet、SaltStackあたりと似たツールになりますね。

インストール方法や使い方についてはここでは触れません。

v1.1のドキュメント?

冒頭にも書きましたが、このAnsible、2013/6/10にバージョン1.2がリリースされた ばかりです。

にも関わらず、今更v1.1のドキュメント?と思うかも知れませんね。

はい。その通りです。とはいえ5月の中頃から翻訳を始め、ちまちまと一人でやっている のでごらんの通りの進み具合です。

apiとglossaryのファイルがまだ完了していないのですが、ansibleを使ってみる上で おおよそ必要な内容は既に翻訳した内容で必要十分だと思われます。

読む順序としては、

  1. gettingstarted
  2. patterns
  3. examples
  4. playbooks
  5. playbooks2
  6. bestpractices

といった感じでしょうか。

CLIで単発のコマンドを実行するところから始め、徐々に広げていくようなイメージ ですね。

翻訳の質については、あくまで個人で進めているものなので、あまり良いものでは ないでしょうが、読み進める上で大きな問題になることはないと思います。 もしよければ目を通してみてください。Ansibleを触ってみるキッカケになれば幸い です。

なお、訳文に対するツッコミや翻訳への参加はいつでも受け付けています。

自分もやりたい!という人がいたら、ご連絡ください。よろしくお願いします。

Tinkerer 1.2 がリリースされました

Twitter上で @r_rudi さんがおっしゃっていましたが、Tinkerer 1.2がリリース されました。公式サイトのポストの日付は「June 05, 2013」となっているので、 日本時間的には6日のリリースになるでしょうか。

1.2のトピック

今回のリリースのトピックは次の通り(ブログ記事から):

  • TinkererのリポジトリがBitBucketからGithubに移行。 BitBucketの方もまだ残っているけど、開発はGithubでやります。
  • 読むのに気が散らないデザインと Solarized dark のPygmentsスタイルを コードハイライトに組み込んだ flat テーマを作成。 プレビューはこちら
  • readmore を使っていても記事全文のRSSフィードを生成する、 rss_generate_full_post という conf.py の設定を追加。
  • イタリア語ローカライズを追加。
  • バグ修正。

ざっくりとした印象

メインリポジトリがBitBucketからGithubに移行、ということでSCMツールも MercurialからGitに変更になるようです。Mercurialユーザにとっては、 少々気になる変更点かも知れませんね。

使い勝手の視点では、変更点は2つ。新しいテーマの追加とRSSに関する設定の 追加です。

flat テーマは プレビュー を見て頂くのが一番だと思いますが、白が基調の 3カラムデザインがベースなっていて、コードハイライトには独自にカスタマイズ したSolarized darkのPygmentsスタイルを採用しています。WebFontも使っている ので、OSやブラウザ環境による表示の差異にも配慮されているのが良い感じです。 もちろんレスポンシブデザインレイアウトに対応しているので、画面サイズ毎に 読みやすいレイアウトに切り替わってくれます。

RSSの設定の追加は、記事を書く側もそうですが、フィードを読む側にとっても 影響のある内容かと思います。自分はRSSリーダをあまり使うことがないのですが、 フィードで全文が読めるか否か、というのはユーザの利便性等を考えると、任意に 設定ができることが好ましいのかも知れませんね。

まとめ

本当にざっくりと、ですが書いてみました。 少しずつ、でも着実に改善が進んでいるのが好印象ですね。

今後は自分もなんらかの形でContributeして行きたいと思います。

ブログを移行してみました

以前ははてなダイアリーで書いていたブログを、ちょっくら移行してみようと 思い立ってやってみました。

何を使うか、という問題

ブログを移行するとして、では何を使うのか。

たまに気が向いたときや必要に迫られた時にしか記事を書かないわけですが、 それでもやはり「書く気が起り易い」道具を使いたいなぁという思いがある訳 です。

単純にはてなブログに移行する、という選択肢もあるにはあったわけですが なにしろ”はてな記法”も覚えられないし、Markdownは使ったことがないし、で とてもそのまま移行したところで、ブログを書かずに放置するだけになるのは 明々白々だったので、それ以上は考えずに却下しました。

そして次に選択肢として挙がったのがOctpressとTinkererでした。

どちらも非常によく出来ていて、かなり気軽に始められるなぁという印象だった わけですが、引っかかる部分もありました。

Octpress vs Tinkerer

Octpressに関して言うと、Ruby製であることと、記事のソースはMarkdownで 記述すること。Tinkererに関してはテーマのデザインがアレなことです。

普段、Pythonを主として使っていて、テキストマークアップもrst形式で記述する 習慣があるため、そこにブログを書くためにMarkdownを入り込ませるのは ちょっとした障壁に感じたのです。また、Rubyを使うこともほぼ無いので手元に Rubyの環境を用意するところから、ということもありました。

別に宗教上の理由でRubyを使うことを禁じられているわけではないのですが、 何しろ門外漢のため、調べることにコストをかけることになりそうだな、という 印象を受けたわけです。

一方、Tinkererはというと、Sphinxを常用している立場から見ると覚えることが 非常に少ないのは、大きなメリットでした。ですが、一つ大きな落とし穴が あったわけです。

それは標準で選択できるテーマが、とても残念なことです。

公式ドキュメントのサイトはTinkererで構築されているので、ご覧になると 分かりますが、「ちょっとこのスタイルは、、、」という見た目だったので、 飛びつくのを躊躇ってしまいました。

考えた結果

これらを踏まえて自分なりに考えてみた結果、結論としてはTinkererを選択する ことにしました。

理由は、ただ一つ:

覚えることが一番少ない

です。

記事のソースはreStructuredText形式で記述すればよいですし、生成されるHTMLも Sphinxで身につけたノウハウが使いまわせます。困る要素が見当たりません。 テーマが気に入らなければ「自分で作ってしまえ」という判断もできるわけですし。

このサイトのテーマについて

どこかで見たことがある、というのがたいていの人の印象かと思います。 それもそのはず、Octpressの標準のテーマを真似て作成したテーマです。

テーマの名前は特に決めていないのですが、個人的なコードネームとして lucid と 名づけていました。

いまはまだ出来たばかりなので、ドッグフード的に自分のサイトのみでの利用に とどめていますが、ある程度チェックができたら tinkerer-contrib あたりに PRを出してみようと考えています。