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以外の言語に興味がない人にはそれほど利点はないかもしれない(他の言語を使う人と協力できるならそうでもないかも)。
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年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 で起動する
- マジックコメントをこの位置に書く
といったことが注意すべき点です。