トップ 追記

ohai日誌

2003|12|
2004|01|02|03|04|05|06|07|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|06|08|10|11|
2008|01|02|03|04|05|07|09|
2009|01|02|
2013|06|12|
2014|01|02|03|04|06|09|10|12|
2015|04|
2016|09|

2016年09月16日

_ GObject Introspection

RubyKaigi 2016ですとうさんがGObject Introspection (以下GIと省略)について講演していたので、すとうさんから聞いた話や私が考えたことなどをまとめます。

GI は何のために作られたか。GI はどのような仕組みなのか。

JavaScript や Python から Gtk や Gnome 関連のライブラリを使うため。

そのため、(ある程度)言語非依存なフレームワークにするため、「C library <-(a)-> GI <-(b)-> 各言語(JS,Python,Ruby,etc)」という仕組みになっていて、(a)だけ用意すると(b)の部分はGIのフレームワークが面倒を見てくれる、という仕組みになっている。

Ruby から使うためにはどうすればよいか。拡張ライブラリとの違いは?

拡張のライブラリの場合「C library <-> Ruby」の「<->」の部分を Ruby-C API を用いて C で書いてコンパイルする。

GI の場合は「C library <-(a)-> GI <-(b)-> Ruby」という構造になっていて、 (a)の部分を GI の API を用いて C で書いてコンパイルする。 (b)はRuby GIライブラリが面倒を見てくれる。実はここで書いたCのコードの 関数のシネグチャやコメントなどからも必要な情報を読みだす。

GCは?

GObject 自体がリファレンスカウントを持っているので、これを使う。

利点は?

  • 上の話の (b) から先の部分の言語を変更することができる。JavaScriptやPythonであれば問題なく動作すると考えらえる。SWIGも同じようなことはできるはずだが、間接層が薄くて実際問題としてあまりうまくいかない。GIはかなりリッチな間接層なのでそれなりにうまくいく。
  • 上の利点と深く関連したことだが、PythonやJavaScript、PHPの人々と協力して開発を進めることが容易

欠点は?

  • FFIのように「Cコンパイラを使わずに開発する」ようなことはできない。特にWindowsで開発環境を整えるのはかなり面倒
  • Ruby-C API の代わりに GI の API を用いることになるので、Ruby だけを考えるならとくに開発が楽になるわけではない
  • Ruby-C API を使うよりは柔軟性が欠ける

結論

上に書いた利点が重要かどうか、が鍵。

この仕組みが一番役立つのは、「C libraryの提供者が各言語用のバインディングを用意したい」場合であろう。例えば「libgit2 (git の機能を提供するC library)の開発者側がスクリプト言語用のバインディングを用意したい」というときには有用であると考えられる。Ruby以外の言語に興味がない人にはそれほど利点はないかもしれない(他の言語を使う人と協力できるならそうでもないかも)。


2015年04月08日 近況

WPI-AIMR に助教として4月に着任しました。というわけで仙台在住です。


2014年12月14日

_ 京大周辺の昼ごはん

この記事は KMC advent calender の14日目の記事です。 13日目はnon_117のKinect v2で人間の3Dスキャンとポイントクラウドでの描画をする 〜KMC/OUCCアドベントカレンダー2014 13日目〜でした。

この記事では京大の北のほうのお昼ごはんのお勧めのお店を紹介します。KMCぽくない気もしますがまあ気にせず役に立ててください。 一食1000円くらいのお店を紹介します。雰囲気や混雑具合なども評価基準に含まれています。場所とか定休日とか営業時間とかはリンク先を参照してください。

ピタカ

紹介する中では一番のお勧め。洋食屋でイタリアンぽい所もあります。とりあえず日替わりランチ850円を頼むと良いと思います。私は頼みませんがデミグラスソースがおいしいです。日替わりランチにはドリンクを150円で付けられるのでそちらも頼むと良いでしょう。私はエスプレッソばっかり飲んでいます。

あっちっち

鉄板焼屋。ランチは880円で6,7種類の中(豚もやしロール、せせり塩、などのメインに御飯、味噌汁、1品が付いてくる)から選べます。京豚もやしロールが一番お勧めされていておいしいのですがそれ以外のメニューも良いです。

prinz

カフェレストラン。ランチは1000円〜1100円で週替わりのプレート/パスタ/ホットドッグ と固定のメニューがいくつか。 ギャラリーを併設していてコンクリートの床に白い壁のシンプルな内装、といった雰囲気です。

駱駝

中華(四川)料理。 上に挙げた店に比べると有名な店で、わりと混んでいます。 サービスランチ1000円、など。四川料理らしく多くのメニューが辛くてそういうのが好きな人におすすめ。とりあえず麻婆豆腐を頼むとよいんじゃないでしょうか。

KMC advent calender、12/15はtyageの「ECMAScript勉強会」です。


2014年10月18日

_ RubyKaigi2014 の発表スライド

一月前ですがスライドを公開します。

<URL:http://www.kmc.gr.jp/~ohai/20140919/p.pdf>

実はこのLTの発想の元は PRML である気がしています。


2014年09月15日

_ yasnippet の trigger-key の変更法

yasnippet(emacs で snippet を実現するシステム)の trigger-key(展開を開始するキー)を変更したい場合はyas-minor-mode-mapをdefine-keyで変更してください。例えば C-; に変更したい場合は

(define-key yas-minor-mode-map (kbd "C-;") 'yas/expand)
(define-key yas-minor-mode-map (kbd "TAB") nil)
(define-key yas-minor-mode-map [(tab)] nil)

として、tabの割り当てを消してC-;に割り当てます。かつて(2012年ごろ)は yas-trigger-key を変えるという方法でしたが、<URL:https://github.com/capitaomorte/yasnippet/issues/296>でこの方法は廃止されました。webで検索するとyas-trigger-keyを使う方法が散見されますがこれは使えません。

これは 2014/9/15 に yasnippet 8.1.0 で確認した情報です。


2014年06月17日

_ 数学セミナーの記事

「歩行と力学系」という題の記事を数学セミナーに國府先生と書きました。非常に簡単な数理モデルを用いて、二足歩行を力学系理論から理解しよう、という内容の記事です。特集タイトルは「カオス超入門」ですがカオスの話はありません。まあ二足歩行がカオス的だと困るのですが。図書館などにも置いている雑誌なので気が向いたなら読んでくださるとうれしいです。

何人かの人に原稿を見てもらってコメントをいただいたのが役に立ちました。その皆様に感謝します。


2014年04月26日

_ 環境変数を指定してからRubyを実行するようなスクリプトを一つのファイルに書く

Ruby には -x というオプションがあって 「#!ruby」と書かれた行の手前まで読み飛ばしてから ruby スクリプトを読み込んで実行するという機能があります。これを使うと環境変数などを指定してからRubyを実行するというようなことができます。RBENV_VERSIONなどを指定できるのが便利かもしれません。

#!/bin/sh

RBENV_VERSION=2.1.1
export RBENV_VERSION
exec ruby -x $0

#!ruby
# -*- coding:utf-8 -*-

puts RUBY_VERSION

ここで、

  • ruby を exec で起動する
  • マジックコメントをこの位置に書く

といったことが注意すべき点です。


2014年03月30日

_ 日記復帰

させました。リダイレクトの設定とかしないと。


2014年02月11日

_ GitのCLI

git の CLI はユーザインターフェースとして見るとかなりひどい代物です。

  • 既存のツール(具体的に言うとsubversion) と同じ名前に異なる機能を割り当てている(checkoutとかrevertとか)
  • 一つの名前にまったく異なる機能を割り当てている(checkout, resetなど)
  • 利用者がやりたいこと名前が対応していないものが多い(staging が add で untaging が reset だ、とか)
  • シェルスクリプトから利用するときの使いやすさがあまり考えられていない(例えば現在のHEADのブランチ名だけをstdoutに出力する、というuse-caseに対してgit branchのmanを調べてもそんな機能はない、とか(rev-parseにあるらしい))

まあ覚えてしまえば使いこなせる程度ではあるのですが、UIやUXがどうこう言っているようなOS Xを使っているような人々(Macに対する偏見)があれを使っているのはあまり理解できない話だなあ、と思います。


2014年01月10日

_ LuaTeX-ja で PDF プロパティに日本語を使う

PDF にはプロパティという形でメタデータなどを付加することができます。LaTeXではhyperref.sty というパッケージでこれを利用することができます。

ただ、デフォルトの状態ではUnicodeをあまりちゃんと扱えないようで、タイトルに日本語を書こうとしてもうまくいきません。これは、

\usepackage{hyperref}
\hypersetup{unicode}

でうまくいくようになります。

実はこの \hypersetup{unicode}、他のパッケージなどにも影響を与えます。beamerはtitleやauthorの情報をPDFメタデータに設定します。というわけでtitleに日本語を使うときはこれをしておくとタイトルが適切に設定されます。またPDFのコメントもメタデータと同じ扱いらしくpdfcommentパッケージを使うとき、この\hyperref{unicode}をしておくと日本語(など)のコメントを使えるようになります。

以前から困っていた問題が解決したのでまあ良いのですが、workaroundとして美しくなさすぎなのでもっとなんとかなる方法はないんでしょうか。

環境は Debian Wheezy です。


トップ 追記