Blog, The

1 月 22 日生まれ、ブログ座です。

Ruby の Gold 試験を受けてきた

Ruby が好きです。
いつかは Ruby で仕事したいなーって思ってます。


まぁでも、いざ Ruby で仕事するってなったときに、
特にコミュニティーとかで活動してるわけではない凡人が、「Ruby が好きです」なんて言ってもちょっと弱いなーと思い、
もう 2 年ほど前ですが、Ruby の Silver 資格を取得しました。
で、昨年 Ruby の Gold 試験が新設されたということで、遅ればせながらステップアップとして受験してきました。


結果は 80/100。なんとか合格できてホッとしてます・・・。

試験について

Rubyアソシエーション: トップページ

発表されてる出題範囲の通りといった感じでした。
中でも変数・定数のスコープ、オブジェクト指向に関する問題が多かったです。
あとはそれぞれの小項目ごとに 1 〜 3 問ほど出題されてるっていう感じでしょうか。


上記ページでは対象バージョンが 1.8.7 となってますが、試験開始前の説明では 1.8.x となってました。
確証はありませんが、1.8.x 内での変更は出題範囲外なのかもしれません。(1.9 からの backport とか)

勉強するとき参考にしたもの

ITトレメ Ruby技術者認定【Gold】試験 過去問題一覧 − @IT自分戦略研究所

Ruby Gold 試験の過去問題(予想問題?)が 1 日 1 問出題されてます。
システムの制約なのか、複数選択の問題は出題されてない(多分)ですが、試験では複数選択の問題が結構出題されました。


Amazon.co.jp: プログラミングRuby 第2版 言語編: Dave Thomas, Chad Fowler, Andy Hunt, 田和 勝, まつもと ゆきひろ: 本
Amazon.co.jp: プログラミングRuby 第2版 ライブラリ編: Dave Thomas, Chad Fowler, Andy Hunt, 田和 勝, まつもと ゆきひろ: 本

ピッケル本ですね。
1.9 に対応した新しいのが出てますが、持ってません。出題範囲は 1.8 なので問題ないんじゃないでしょうか。
ライブラリ編の Object, Module, Class あたりを斜め読みした程度です。


Amazon.co.jp: Ruby技術者認定試験 公式ガイド (ITpro BOOKs): 伊藤忠テクノソリューションズ, Rubyアソシエーション, ITpro: 本

Ruby Silver 試験の対策本です。
問題の内容については Silver のものなので、あまり参考になりませんでしたが、問題の形式は実際の試験に近かったです。


RubyGems.org | your community gem host

試験対策って訳ではないんですが、使ってる gem でわかんないことがあったらソースを読むようにしてます。
その中で得た「こうするのが Ruby 流」「多分こう動く」みたいなものが今回の試験で生きてたように思います。

Google Apps Script で UI が更新されないときに確認すること

最近、なんやかんやあって Google Apps Script やってます。


UI Services っていう、ちょっとしたフォームみたいなのを作る API があって、それを使ってスクリプトを書いてたんですよ。

2つリストボックスがあって、リストボックス1の何かが選択されたら、リストボックス2の項目を置き換えるっていう、
割とありがちな処理だと思うんですが・・・

function onOpen() {
  SpreadsheetApp.getActiveSpreadsheet().addMenu('Test', [
    { name: 'Foo', functionName: 'onClickFoo' }
  ]);
}

function onClickFoo() {
  var app = UiApp.createApplication().setTitle('Foo');

  var panel = app.createVerticalPanel();
  app.add(panel);

  var listBox1 = app.createListBox().setId('listBox1');
  listBox1.addChangeHandler(app.createServerChangeHandler('onSelectListBox1'));
  listBox1.addItem('1-1');
  listBox1.addItem('1-2');
  listBox1.addItem('1-3');
  panel.add(listBox1);

  var listBox2 = app.createListBox().setId('listBox2');
  listBox2.addItem('2-1');
  listBox2.addItem('2-2');
  listBox2.addItem('2-3');
  panel.add(listBox2);

  SpreadsheetApp.getActiveSpreadsheet().show(app);
}

function onSelectListBox1() {
  var app = UiApp.getActiveApplication();
  var listBox2 = app.getElementById('listBox2');
  listBox2.clear();
  listBox2.addItem('2-4');
  listBox2.addItem('2-5');
  listBox2.addItem('2-6');
}

どうも期待通りに動いてくれません。


英語わからないながら以下のページをぼーっと眺めてたら、

Ui Service - Google Apps Script — Google Developers

イベントハンドラの最後に必ず、

return app;

って書いてあったんで、おもむろに追加してみると、

// 省略...

function onSelectListBox1() {
  var app = UiApp.getActiveApplication();
  var listBox2 = app.getElementById('listBox2');
  listBox2.clear();
  listBox2.addItem('2-4');
  listBox2.addItem('2-5');
  listBox2.addItem('2-6');
  return app; // ← 追加
}

いやー、動きました。

イベントハンドラは、必ず (かどうかはわかんないけど、少なくとも UI の更新が発生する時は) アプリケーション (UiInstance) を返すようにしないとダメみたいですね。

Apache + Subversion で Active Directory 認証

会社で Subversion のサーバを立てることになって、
「せっかくだから AD 連携したい」と色々試してたところ、えらくハマったのでメモ。

環境

OS は Debian Squeeze。
Samba で AD ドメインに参加したりとかは、特にしてません。

インストール

まずは普通に ApacheSubversion をインストール。

# aptitude install apache2 subversion libapache2-svn

Apache モジュールの設定

関連する Apache モジュールを有効にする。

# a2enmod alias auth_basic authnz_ldap authz_default authz_user dav dav_svn ldap

/etc/apache2/mods-enabled/dav_svn.conf を編集。

<Location /svn>
  DAV svn
  SVNPath /path/to/repos

  AuthType Basic
  AuthName "Subversion Repository"
  AuthBasicProvider ldap
  AuthzLDAPAuthoritative Off
  AuthLDAPUrl "ldap://dc.example.com:389/DC=example,DC=com?sAMAccountName?sub?(objectClass=*)" NONE
  AuthLDAPBindDN hoge@example.com
  AuthLDAPBindPassword hogehoge
  AuthzSVNAccessFile /path/to/repos/conf/authz
  Require valid-user
</Location>

OpenLDAP の設定?

/etc/ldap/ldap.conf に以下の行を追加。ハマったとこ。

REFERRALS off

正直、何なのかよくわかってない。
OpenLDAP 2.1 ´ÉÍý¼Ô¥¬¥¤¥É: ʬ»¶¥Ç¥£¥ì¥¯¥È¥ê¥µ¡¼¥Ó¥¹¤Î¹½ÃÛ
この辺の話だと思うんだけども・・・


とりあえずこれらの設定で、Active Directory 認証ができるようになった。よかった。