2012年8月17日金曜日

CentOS-6 の OpenLDAP 環境構築

CentOS-6.3 で LDAPサーバーを作ろうとしたところ、次のようなエラーが出てどうもうまくいかなかった:

  • ldap_bind invalid credentials (49) ldapsearch
  • bdb_db_open no such file or directory

ネットを探してみると、CentOS-6 での OpenLDAP について書いているブログが多数あった。つまりつまずくポイントが色々あるということか:

だが、これらの内容を俯瞰してみるとけっこうバラツキがあって、腑に落ちない感じがした。さらにしつこく探してみると、よく整理された英語のページがみつかった:

"Minimal"とうたっているだけあって必要十分な手順が書いてあり、要所でのテスト(設定途中での動作確認)も理解を助けてくれる。うちの CentOS-6.3 でもうまくいった。

2012年8月10日金曜日

grep -r で再帰的に grep

今日ではないけど最近知った。ずっと find ... | xargs ... を使っていた。

小さい、軽量な、Linux distribution

Small で light weight な Linuxディストリビューション。

Webアプリとかそういうレベルではなくて、OS込みのプロダクトを、要するにハードウェアに直接インストールする形態の製品を提供したいときに使えるんじゃないかと思う。

2012年8月1日水曜日

iMacros と JavaScript を組み合わせて使う

よく使う Firefox add-on のひとつが、 iMacros なるもの(厳密には名前の右肩にTMが付く)。browser-based macro recorder であり、Webブラウザを使った操作を記録&再生することができる。


で、今日メモっておきたいのは、iMacros と JavaScript を組み合わせる方法について。iMacros のマクロはいくつかのコマンドからなっているが(Command Reference - iMacros に掲載されている)、一般的なプログラミング言語が提供するような関数や制御構造、データ構造をもたない。そこを JavaScrpt で補完しよう、という話。


例

環境は Firefox 14.0.1, iMacros for Firefox 7.5.0.4.

1. マクロを記録
まずは簡単なマクロをひとつ作るため、google.co.jp を開いて検索する操作を記録してみた。そうすると、次の内容のマクロ(#Current.lim)ができた。
VERSION BUILD=7500718 RECORDER=FX
TAB T=1
URL GOTO=https://www.google.co.jp/
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:f ATTR=ID:lst-ib CONTENT=foo
ここで、fooの部分が検索した文字列に相当する。
2. マクロを編集(変数の導入など)
記録したマクロをもとにして、繰り返し検索を行う処理をJavaScriptで作ることにする。そのための準備としてまずはマクロ "#Current.lim" を "my.lim" にリネーム。それから内容を編集。
第一に、新しいタブを作ってフォーカスを移すための iMacrosコマンド TAB OPEN と TAB T={{!VAR1}} を追加する。{{!VAR1}} はタブの番号を指定するために導入した変数。
第二に、JavaScriptから指定した文字列で検索を行うことにしたいので、foo を {{!VAR2}} と置換。
結果、マクロは次の内容になった。
VERSION BUILD=7500718 RECORDER=FX
TAB OPEN
TAB T={{!VAR1}}
URL GOTO=https://www.google.co.jp/
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:f ATTR=ID:lst-ib CONTENT={{!VAR2}}
TAG POS=1 TYPE=INPUT:BUTTON ATTR=VALUE:Google<sp>検索
3. JavaScriptを作成
とりあえずテキトーにマクロを作って、my.js とリネームしてから編集。 iimSet, iimPlay という2つのインターフェースを利用してJavaScriptを書く。具体的には、マクロに導入した変数 {{!VAR1}} に、タブ番号を iimSet() という関数でセット。それから配列にはいっている文字列 foo, bar, baz を {{!VAR2}} にセット。最後に、iimPlay() で my.lim を実行する。
var a = ['foo', 'bar', 'baz'];
for(var i=0, n=a.length; i<n; i++){
  iimSet("VAR1", i + 1);
  iimSet("VAR2", a[i]);
  iimPlay("my");
}
4. JavaScriptを実行
作成した JavaScript(my.js)を保存して、実行する(Playボタンとか)。うまくいくとタブを新規作成して検索する操作が3回繰り返される。
※空白のタブがひとつできてしまうから、いまひとつなところがあるのかもしれないな。。。

2012年7月7日土曜日

Fedora のインストールメディアとUSBメモリ、Mac OS X で作る

今日、Fedora-17 をうちのPCにインストールした。CD-RW, DVD-RWメディアが手元になかったのでUSBメモリを使った。USBメモリへの書き込みには、MacBook(Mac OS X)を使った。ただそれだけの話。しかしながら、いくつかの情報を必要としたのでメモしておく。


Fedoraをインストールするハードウェアは?

まずはハードウェア、なかでもCPUやマザーボードの仕様が分からないといけない。

CPUはAMD Phenom II 64bit で、マザーボードは ASRock の 880GM-LE。このマザーボードは BIOS を使っているモデル(UEFIではない、という点が重要)。

※ASRockのマザーボードAMD8シリーズのリストはこれ:ASRock AMD8


どのファイルをダウンロードすればよいか?

Fedora の場合、「Full Distribution」, 「Live Image」,「Minimal Boot Media」の3つの選択肢がある。今回は、必要なパッケージをあとから追加するスタイルでゆくから Minimal Boot Media がいい。

Minimal Boot Media のISOファイルは「boot.iso」という名前で配布されており、今回はこれで十分。一方、対象のマザーボードがUEFIを使用している場合は注意が必要で、「efiboot.img」を Full Distribution の中から抽出しなければならないらしい。

boot.iso は配布用サーバーの「fedora/linux/releases/17/Fedora/arch/os/images/boot.iso」といったパスに配置されている。


USBメモリにISOイメージを書き込む

MacにUSBメモリを挿して、ISOイメージを書き込む。Fedoraのドキュンメントにddコマンドを使った方法が掲載されているので、これに基づいてやればよい。Linuxを前提として書かれているが、Macにもddコマンドがあるのでそれほど大きな差はない(Mac OS X のコマンドである diskutil を使う点が異なる)。

2012年7月1日日曜日

Emacs で整数をさまざまな基数(radix, 底)で表現する

整数を2進数や16進数で表す方法は?

リファレンスマニュアルをひいたらちゃんと書いてありました。


The syntax for integers in bases other than 10 uses ‘#’ followed by a letter that specifies the radix: ‘b’ for binary, ‘o’ for octal, ‘x’ for hex, or ‘radixr’ to specify radix radix. Case is not significant for the letter that specifies the radix. Thus, ‘#binteger’ reads integer in binary, and ‘#radixrinteger’ reads integer in radix radix. Allowed values of radix run from 2 to 36. For example:

#b101100 ⇒ 44
#o54 ⇒ 44
#x2c ⇒ 44
#24r1k ⇒ 44

#{radix}rという表現で2から36までの任意の基数を指定できる、という機能は初めて知った。面白い。

ちなみに上の例は Emacs Lisp だけでなくて Common Lisp でも機能した(SBCL-1.0.55 だけど)。しかし、リファレンスからその説明をみつけだすことができなかった。