Programming

Sphinx+翻訳 Hack-a-thon 2012.07

今回のお題は、Google site のドキュメントを MoinMoin に移行しようZE☆

html2rest

最初のアプローチは、html2rest を使って直接変換する方法→玉砕

  • ヘッダとかメニューとかフッタとか、余計なものまで変換されて鬱陶しい
  • そもそもいろいろ崩れる!!

Copy&Paste

Google Site の編集モードでコピー、MoinMoin の GUI モードでペースト
→結構いける。文章部分はほぼ完璧。画像も来るけど、元のサイトへのリンクになる

画像とリンクの差し替え

該当ページのディレクトリの attachments 以下に直接画像ファイルをコピー、MoinMoin にペーストしたソースの、リンクを添付ファイルへのリンクに差し替え
差し替え用のスクリプトはこんな感じ。


import sys
import re

fp = open(sys.argv[1])
lines = fp.readlines()
fp.close()

fp = open(sys.argv[1]+'_clean', 'w')

pat = re.compile('https://.*/([^/\?].*)\?.*\}\}')

for line in lines:
    line = line.rstrip()
    while True:
        #replace image
        if not re.search('\[\[([^\]]*)\]\]', line):
            break

        #replace image
        m = re.search('(\[\[https://[^[]*/([^/\?][^\[]*)\?[^\[]*\}\}\]\])', line)
        if m != None:
            print m.group(1), ' ==> ', m.group(2)
            line = line.replace(m.group(1), '{{attachment:'+m.group(2)+'}}')
            continue

        #replace internal link
        m = re.search('(\[\[(.*)\|([^\]]+)\s*]*\]\])', line)
        if m != None:
            if re.search('https://sites.google.com/a', m.group(2)):
                #Inter Wiki
                #print m.group(1), ' =|> ', m.group(3), m.group(3)
                line = line.replace(m.group(1), '_SB_'+m.group(3)+'|'+m.group(3)+'_EB_')
            else:
                #external link
                #print m.group(1), ' =|> ', m.group(2), m.group(3)
                line = line.replace(m.group(1), '_SB_'+m.group(2)+'|'+m.group(3)+'_EB_')

    fp.write(line.replace('_SB_', '[[').replace('_EB_', ']]')+'\n')

fp.close()

このスクリプトを通すことで、以下の処理を行う

  • アタッチされた画像を参照するようにする
  • InterWikiName を変換
  • 外部ページへのリンクを MoinMoin 形式に変換

途中で Copy&Paste が入るので自動化は難しいものの、いずれにしても変換後のチェックはしなければいけないのでまあいいかなぁと。

Programming, 雑記

GCS2012でお話をさせていただきます

@FumotoKZ さんのお誘いで、 GCS2012Technical Artist Jam でお話をさせていただくことになりました。

当日までにでっちあげた日々成長中のシステムの一端を披露できるよう、夜も寝ないで昼間寝て準備を進めていきます。今の予定では、「究極のバッチフレームワーク(予定)」と称して、自動処理マニアが半分実益、半分趣味でやるとこうなる!!という実例をお見せできればなーと考えています。ぜひご参加ください 🙂

Programming

Sphinx+翻訳 Hack-a-thon 2012.03

PyDoc はいい加減アレだし、そろそろ Sphynx 使いたいよねーと思っていたところに Sphinx+翻訳 Hack-a-thon があったので参加中。

作業ログ代わり兼Blogネタとしてやったことを記録していく感じ。

インストール

Windowsへのインストール

はいはい easy_install ドーーーーン!!

>easy_install sphinx

Sphinxを使ってみる

Pythonって何?という人のためのSphinxチュートリアルを参考に作業を進める

プロジェクトを作成する

Windows の場合、 $(Pythonのインストールディレクトリ)\Scripts\sphinx-quickstart.exe を使う。いろいろ聞かれるものの、ほとんどはとりあえずデフォルトで。プロジェクト名、Authorなどは適当に。

とりあえずビルドしてみる

$(Pythonのインストールディレクトリ)\Scripts にパスが通っていれば VS のコマンドプロンプトから起動しなくても大丈夫。

>make.bat html

ドキュメントを書いてみる

reStructuredText入門 を参考に。日本語でドキュメントを書く場合は、元の rst ファイルは UTF-8 で保存されている必要がある

例としては下のような感じ。ただし、セクションなどの記号は、特に標準というものはない。(!!)


========
タイトル
========

セクション
========

サブセクション
--------

サブサブセクション
^^^^^^^^

ドキュメント中で使用されていない記号が出てきたときに、それが随時セクションわけのための記号として登録されていく。
そのため、別のドキュメントで別のセクション記号が使用されていてもOK。

ただし、ドキュメントをインクルードする場合はそれぞれのドキュメントで仕様を統一しておく必要がある。

所感

  • やっぱりタグでドキュメントを書くのは21世紀になってやることなのカー?という気持ちが強い
  • Windows でも環境構築をするのは簡単
  • WYSIWYG で Web インターフェースなエディタが欲しいナー(チラチラ
CG, Programming

回転マトリックスの求め方とマトリックスから回転角度の求め方

以前、mixi 日記に書いていたものの、mixi日記検索できないぜジーザス!!ってことでこちらに転載します。

XYZ順に行列を掛けるときの回転マトリックスの作り方と、そこからXYZそれぞれの回転値の求め方です。
これ、何故か数年に一度必要になるんですよね、、、、

なんか,毎度毎度この展開をやっては資料を無くしてる(そして再び一から計算しなおし…)んで,いいかげんウンザリなんですよね(笑
しかも、他のページに載っている式が間違っているものが結構あって、検索しても信用できなくて結局自分で計算するという。。。。ソレハサテオキ。

回転行列を求める

まず, XYZ それぞれの軸の回転.


    | 1  0   0 | 
Rx = | 0 Cx -Sx| 
    | 0 Sx  Cx | 

    |  Cy 0 Sy | 
Ry = |   0 1  0 | 
    | -Sy 0 Cy | 

    | Cz -Sz 0 | 
Rz = | Sz  Cz 0 | 
    |  0   0 1 | 

Cx,Cy,Cz,Sx,Sy,Sz は cos(θx),cos(θy),…sin(θz) の略です.
表示が崩れて汚いのはご愛嬌(笑

因みに,これも忘れた場合は一から考えるんですけどイマドキはググった方が早いですね.そのときは座標系の違いに気をつけないといけないですけど.

XYZ回転のマトリックスを求める

XYZ 回転の場合,回転マトリックス R は RzRyRx.
これを一生懸命展開します.


   | CyCz SxSyCz-CxSz CxSyCz+SxSz | 
R = | CySz SxSySz+CxCz CxSySz-SxCz | 
   | -Sy SxCy CxCy | 

※2013/04/08 計算結果に間違いがあったので訂正しました。ご指摘いただいた Jagoon さんありがとうございます。

ε=(。・д・。)ふー

根気があれば完全に手の運動です.でも,大抵どこかで間違えるんですよね…(´・ω・`)

回転行列から回転角度を求める

因みに,最初に R がわかっていれば回転角度も求めることができます。
ただし、このときに必ずしもマトリックスを作った元の回転角度がわかるというわけではありません。

こちらのサイトは行列の表記が転置されているので気をつける必要がありますが回転順序が違う場合も含めて詳細な計算方法が掲載されています(合っているかは検算していないので誰かやってくださいw)
※注記:NumPyで行列を扱うと、上記サイトのように列優先なので、NumPyを使うときは転置された表記のほうがわかりやすいかもしれません

続・回転行列から回転角度を求める

より詳細を記述した資料をみつけました(注意:PDF)。ちゃんとやろうとすると結構めんどくさいみたいです。笑

コンピュータ

infraBench 公開しました

クライアントPCから見た社内インフラのパフォーマンスを計測するためのツール、infraBench を公開しました。

。。。と言っても、フレームワークとプラグイン一本しかまだ登録されていないですが(汗。

社内のインフラのパフォーマンスって案外定量的に計測されておらず、計測されていたとしても各社独自の方法で行われているので、客観的に早いのか遅いのか、快適なのかそうでないのかを知る術がほとんどなかったりします。

また、インフラの計測といっても非常に多岐に渡り、スループットやレイテンシ、トラフィック、などなどいろいろな計測方法やツールがあります。しかし、これらの情報を適度にミックスしながら比較し、現場の「遅い」という体感を数値に表すのは至難の業です。

infraBench を使うことで多角的なベンチマークを手軽に行う環境を構築し、更に他の環境と比較することでどこに問題があのかをより簡単に把握することができる環境構築を目指します。

その環境を構築するためにも、実際に使ってベンチマークを取って頂ける方や、プラグインを開発して頂ける方の協力が必要です。よろしくおねがいします。

つかいかた

現状、githubで公開しています。 git pull した後に config.txt を必要に応じて書き換えて infraBench.py を実行するだけです。計測結果の表示は全く整形していないのでまだ非常に見づらいです。

config.txt のかきかた

config.txt は一行毎に実行するベンチマークの命令を記述します。

サンプルで登録されているものはこのようになっています。


fileStat(path = './tmp/1k'   , size = 1024   , count = 10)
fileStat(path = './tmp/10k'  , size = 10240  , count = 10)
fileStat(path = './tmp/100k' , size = 102400 , count = 10)
fileStat(path = './tmp/1000k', size = 1024000, count = 10)

filestat がプラグインの名前、そのあとの () で囲われた部分がこのプラグインを実行するときの引数になります。
この引数の内容はプラグイン毎に異なります。

この例では、fileStat プラグインが4回呼び出され、それぞれカレントディレクトリの下に 1KB/10KB/100KB/1MB のファイルを 10 個づつ作り、それぞれのファイルの情報を取得するのにかかった時間と CPU サイクル数を計測します。

プラグインアーキテクチャ

infraBench は非常に単純なプラグインアーキテクチャを採用し、ほとんど手間無く機能を追加することができるようになっています。

プラグインで必要な関数は 3 つで、 preProcess(), process(), postProcess() になります。
infraBench は実行の際、config.txt で指定された実行順序に preProcess() を全て実行し、次に process()、最後に postProcess() を実行します。

各関数はargs と valuesという引数を二つ取り、args は config.txt で設定された値を辞書として取ります。values は infraBench 全体で蓄積していく値のブロックを取ります。
各関数は必要に応じて値の追加や既存の値の加工、削除などを行ってその結果を返り値として返します。これにより、 infraBench 全体ではあたかもプラグインというノードを直列に繋いだノードのようなふるまいになり、最後の処理が終った時の返り値に全ての情報が入っていることになります。

詳しくは modules/fileStat.py を読んでみれば何をすべきなのかわかります。

さいごに

infraBench は基本になる骨組はできているものの、必要なプラグインは全く整っていない状態です。ぜひとも一緒に機能を増やし、より手軽に社内ネットワークの状況を把握できる環境を構築していきましょう!!ご協力おねがいします。

雑記

学生~社会人時代、私が勉強に使った資料たち(1)

最近、学校の先生や学生さんから「何を勉強したら就職できるんですか?」というご質問を受けることが多いので、自分が学生時代~社会人にかけて勉強するのに使った教材や資料のうち、自分の血肉になったと実感した資料たちをご紹介します。

3ds max, Programming

PyMax公開準備中

公開をしないとな~と思いつつ後回しにしてしまっていた PyMax を公開するための準備をはじめました。

まずは形からってことで、PyMax のサイトを立ち上げました。
コードとかバイナリとかドキュメントとか、準備ができ次第順次公開していく予定です。できれば今回のゴールデンウィーク中に一通りの準備を終えたいところです。

同時に、PyMax を一緒にメンテナンスしていただける方も絶賛募集中です!! JCGS としては既にガンガン使っているので使えることは間違いないですが、まだまだやらないといけないことがたくさんあるのです。きちんとメンテナンスをして情報発信をしていけば、日本国内だけではなく世界中のプロダクションで使用されること間違いなしの PyMax 、一緒にメンテナンスしませんか!!

未分類

Wafの勉強をしてみた

ビルドシステムは make を始め幾つかありますが、21世紀になって make は無いわーということで他のものを探していたところ、Waf がいいという話を聞いたので調べてみました。

まず当たるのは本家の “The Waf Book” です。かなりの力作で、これを読めば Waf の全てがわかるでしょう。英語ですけどね。

これはこれでよくまとまっているんですが、英語&長い!!ということで私の脳では一気に処理できない!!ということで、こちらを読みつつ、”純粋関数型雑記帳“さんの”waf チュートリアル“という記事も参考にさせて頂きました。これはとてもわかりやすいです。執筆者の tanakh さんに感謝です!!

追記としては

  • Windows の VS2008 でも使えた!!(exe,lib,dllどれもさくっと生成できた)
  • “wscriptの基本的な書き方”の項目にある ”set_options” というのは Waf の仕様変更により “options” になっている
  • “ライブラリの作り方”の項目にある ‘cxx cstaticlib’ は ‘cxx cxxshlib'(DLLを作る場合は ‘cxx cxxshlib’)にする

このあたりが気になったところです。特にVS対応は予想外で嬉しかったです 🙂

他にも幾つか仕様が変わっているものの、全て警告が出てどう変更すればいいのかわかるのでとても親切です。

未分類

シーグラフ東京 第60回セミナー

直前ですが、3/9 に R&H の加藤氏をお招きして講演が開かれます。

皆さん奮ってご参加ください!!

シーグラフ東京 第60回セミナー

きたる3月9日、第60回目のシーグラフ東京セミナーは、Rhythm&Hues の加藤俊明氏を迎えて、カジュアルな雰囲気で開催します。

加藤氏は長年数々のレンダラー開発に携わり、Square USA時代には “Kilauea”: parallel global illumination renderer,
現在は老舗の CG/VFXスタジオRhythm and Hues Studios にて活躍される
トップレンダリストです。
今回はその加藤氏に、レンダラーの変遷と、ご自身が開発してきたレンダラーのお話をしていただきます。

世界の主流レンダラーは Pixar RenderMan ですが、実際の現場では様々なレンダラーが使い分けられ、自社開発のレンダラーを活用しているプロダクションもあります。
レンダラー開発者や、シェーダー開発者としてキャリアを重ねたい方や、数学がCG計算が得意で、自身のレンダラーを開発してみたい学生さん、CGプロダクションの中で、レンダラーがどういう位置づけで活躍しているのか、世界の第一線で活躍される加藤さんにお話を聞けるとともに、会場に集まる同業の面々とも情報交換して頂けます。