トップ 追記

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|
2018|02|

2018年02月26日

_ test-unit の setup の継承に関する挙動について

https://railstutorial.jp/ で minitest でなくて test-unit 使ってやっているのですがなんか問題が起きたのでメモ。

問題

rails の fixture がなんかうまく動かない。具体的には 以下のようなコードがエラーが生じる(usersはrailsのfixtureで 作ったやつ)

def setup
  @user = users(:michael)
end

解決?

以下のようにブロックにすると解決した

setup do
  @user = users(:michael)
end

関連ありそうな話(継承に関するsetupのふるまい)

パターンA

require 'test-unit'

class Parent < Test::Unit::TestCase
  setup do p "Parent setup"; end
end

class Child < Parent
  setup do; p "Child setup"; end 
  def test_foo; end
end

パターンB

require 'test-unit'

class Parent < Test::Unit::TestCase
  def setup; p "Parent setup"; end
end

class Child < Parent
  setup do; p "Child setup"; end

  def test_foo; end
end

パターンC

require 'test-unit'

class Parent < Test::Unit::TestCase
  def setup; p "Parent setup"; end
end

class Child < Parent
  setup do; p "Child setup"; end

  def test_foo; end
end

パターンD

require 'test-unit'

class Parent < Test::Unit::TestCase
  def setup; p "Parent setup"; end
end

class Child < Parent
  def setup; p "Child setup" end

  def test_foo; end
end

パターンDだけはParent#setupが実行されない。


2018年02月17日

_ Let's note RZ6にDebian stretchをインストール

生じた問題と解決策メモ

ヘッドホンが使えない

pulseaudio止めてalsaを直接叩くと使えた。なぜだ。

(上のに関連して) USB Audioに繋いだときにALSAのデフォルトデバイスをそちらに変える

Arch linux の解説 を見よ。

VMWare で Windows 10 を動かす (host: Debian Stretch, guest : Windows 10)

CPUを2個割り当てると快適

タッチスクリーンを有効にする/無効にする

xinput でできる。

apt-get install xinput

でインストール。 xinput コマンドでタッチスクリーンの idを調べて(eGalax Inc. eGalaxTouch とかいう名前)

xinput disable ID

で無効にできる。enableを使うと有効になる。IDの代わりにデバイス名を直接指定してもよい。


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日

_ 日記復帰

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


トップ 追記