プログラミング

2007-02-04

Xubuntuのインストール

(作業中のメモ程度の記述です)

以前、Debianを入れて運用していた(そしてハードディスクが壊れた)古いノートPCだけれど、新しくHDDを買ってきて復活させることにした。

今度は Ubuntu Linux 6.10 で行こうと思う。

なんせ非力な(Crusoe 600MHz, 176MB RAM)マシンなので、Xubuntu (Xfce) にするのがいいだろう。

Ubuntu の Alternate Install CD を使って、まず Install in Text Mode でGUI無しのインストールを行なう。
(最初は通常版の Install CD を作ってやってみたのだが、メモリ不足なのかインストールが途中で止まってしまった)

OS のインストール完了後、
sudo apt-get install xubuntu-desktop
して、Xfceのデスクトップ環境を構築した。

このマシン、もともと Windows 2000 が入っていた(今はデュアルブートで設定)のだけれど、なんだかんだ言って Windows 2000 って良くできてるな、と思ったり。起動も(相対的に)早いし、操作していてもレスポンスの感覚(クオリア!?)は Xfce に優る印象。 まあ、基本、サーバーとして運用するので、Xfce でも十分なのだけれど。

一定時間が経ったらノートPCの液晶画面をOFFにする設定にできないかと思ったが、Xfce のスクリーンセーバーでは単に黒くすることしかできないようだ。 「黒くしててもバックライトはついてるからな…。 かといって、ふたを閉めると(ハードディスクの故障の一因と思われる)HDDなどの熱がこもるという問題があるし…。」

結局、ふたを閉めるラッチの部分にゼムクリップを差し込んで、『(ふたを閉めてないけど)閉めたかのように認識させる』という物理的かつ原始的な Hack でごまかすことに。 ただ、これをすると自動的に省電力モードに入っているのか、(SSHで作業していても)若干レスポンスが悪くなるような印象。

メールまわりの設定。 お仕事の予行演習もかねて、Postfix で Maildir 形式を試すことにする。それ自体は問題なかったが、POP3/IMAPサーバとして Dovecot を入れようとして手こずる。 結局うまくいかず、Courier-POP でしのぐことに(Ubuntu でも Universal なパッケージとして存在)。

| | コメント (0) | トラックバック (0)

2006-12-02

Rails を使っていて

最近、Ruby on Rails を仕事でも使い始めた。

当面は不特定多数が使うというわけではない、プロトタイプ的な性格のプロジェクトなので、Rails という新しいフレームワークを試しやすい状況だ。

Railsの流儀に慣れてくると、スムーズに開発のサイクルがまわりはじめる。開発していて “快感!” てな感じはたしかにある。

migration の仕組みが気に入った。プロトタイピングには絶好だ。

ひとつだけ気になるのが名前の衝突。うっかり、Railsフレームワーク上で使われている名前(変数名など)を、そうと気づかずに別の用途で使おうとしてハマることがある。「どうも変なエラーになるなあ」と思いながら色々調べ、ためしに変数名やview名を変えたら解決、なんてことがあった。

Railsの柔軟性と表裏一体の面もあるので、だからダメだという気はないけれど、何かしらチェッカーみたいなものがあるとうれしいな。

| | コメント (0) | トラックバック (0)

2006-06-11

lighttpdをインストール

自宅サーバーの世代交代ということで、lighttpd をインストールしてみる。 その記録。

現行機が Thinkpad 560X 上に FreeBSD 4.6 + Apache なのだが、もうちょっと新しいノートPCに Debian(sarge) を載せることにした。

Webサーバーについても、今 Rails をモノにしようとしているところなので、lighttpd を選んでみた。

現時点では lighttpd は Debian の stable 版のパッケージにはなっていない。 testing 版のパッケージという段階だ。 この時点でちょっと迷ったが、突撃してみることに決めた。 /etc/apt/sources.list に以下の二行を追加する。

deb http://ftp.jp.debian.org/debian/ testing main
deb-src http://ftp.jp.debian.org/debian/ testing main

aptitude update して aptitude install lighttpd する。けっこう根幹的なライブラリまで更新されるので、ちょっとびびる。SSH経由でインストール作業を行なっていたが、SSHのデーモンが再起動されても接続が維持されるのにちょっと驚く(うう…シロウトだ)&感動。

インストール完了。「一度、再起動せよ」という感じのメッセージがあったので、再起動する。sources.list の上記二行をいったんコメントアウトしておく。

あとは /etc/lighttpd/lighttpd.conf をいじって設定をしていくが、ひとつはまった落とし穴があった。lighttpdのサービスを起動しても、他のマシンからアクセスできない。 localhost からだとどうやら大丈夫だ。 あーでもない、こーでもないとやっているうちに、原因が判明。 lighttpd.conf の以下の記述のせいだった。

## bind to localhost only (default: all interfaces)
server.bind = "localhost"

この場合の bind という単語の意味をちゃんと理解できてなかった…。 設定作業が完了するまで外からアクセスされないようにというセキュリティ上の配慮なのだろう。 この設定をコメントアウトしたら他のマシンからも見えるようになった。

| | コメント (0) | トラックバック (0)

2006-04-26

sleepできないJavascript

なぜ Javascript には sleep関数がないのだろう?

C/C++をはじめとして Java や Perl など多くのプログラミング言語には “一定時間、処理を停止する” ための関数として sleep が用意されている。sleep が実行されると、(マルチタスクOSにおいては)他のプロセスに CPU の処理能力が渡されることになる。

Javascript でスクリプトを書いていて「sleep がほしいな」と思うのは、ある程度 “重い” 処理を書くときだ。素直に書くとWebブラウザの Javascript 処理が CPU を占有して、ユーザーに「なんか重いな」と気づかせてしまう。それは UIプログラミングでは避けたい状況だ。そこで sleep を使えれば…、と思うのだが。

Javascript のもともと想定されていた使い方は、ユーザーの操作に対してイベント駆動で小さな処理をさせるというものだったのだろう。だから最初の言語仕様で sleep が入っていなかったのはまあ理解できる。だがその後の言語仕様の拡張においても sleep が追加されなかったのは不思議だ。あるいは、sleep を使わずにそれと同等の効果を出せる「Javascript 流のイディオム(たとえば setTimeout メソッドを使った)」があるのだろうか?

素直にスクリプトを書くと必要以上に CPU を占有してしまいがちになるのが、Javascript が嫌われる一因となっている気がする。インタプリタ側で対処するという考え方もあるだろうが、それよりは sleep を導入する方が自然な解決策と思える。当然、後方互換性が問題になるが…。

| | コメント (0) | トラックバック (0)

2006-04-12

Rails と文字コード

Rails本の「Hello, World!」から学んだこと。

ひとつ。やはり日本語がからむと文字コードを意識することから逃れられない。付録Fにあるとおり、基本は「すべてUTF-8で統一する」というのが方針になるが、「Hello, Rails!」の例ですら、Windows環境では時刻の表示部分に文字化けが発生する。時刻を文字列化する際に「東京(標準時)」とシフトJISで書かれるため。kconvを使って .toutf8 すればよい。こういった処理は controller 側でするべきか、それとも view (.rhtml) 側でするべきか…。

もうひとつ。UTF-8UTF-8N の違いについて。 TeraPad文字/改行コード指定保存 メニューの選択肢にこの両者があって区別がついていなかったが、「ArcExplorer: UTF-8Nについて」というページを見て理解した。両者の違いは「ファイルの先頭にエンディアンを規定するBOM(Byte Order Mark)が付くかどうか」であって、ソースコードの場合は(BOMが付かない)UTF-8N で保存すること(UTF-8で保存すると Syntax Error が発生する)。

| | コメント (0) | トラックバック (0)

2005-08-27

RubyでBMPファイルをあつかう

必要にせまられて、RubyでBMPファイルをあつかう簡単なライブラリを書いた。

ライブラリとドキュメント、サンプルコード ※ Ruby 1.8用

(2014年6月3日 追記)
従来のコードのままでは、Ruby 1.9以降で正しく動作しませんでした。
(Tagussanほか一名の方、コメントでの指摘ありがとうございます)
Ruby 1.9以降用に修正したコードをGitHub上に公開しましたので、そちらもご利用ください。
bmp-ruby


RubyでBMP画像(Windowsビットマップ)をあつかうためのライブラリで、無圧縮の24bitカラー(1677万色)にのみ対応している。

このライブラリを使ってできることは、
・新しいビットマップ画像を生成する
・既存のBMPファイルを読み込む
・ビットマップ画像全体を一色で塗りつぶし
・ビットマップ画像のピクセル単位の色の読み込み/書き換え
・ビットマップ画像の切り抜き(クリッピング)
・ひとつのビットマップ画像の上に別のビットマップ画像を貼り付ける
・BMPファイルとして書き出す

プリミティブな機能しかないが、自由に使ってください。

| | コメント (5) | トラックバック (0)

2005-08-03

続・BackSpaceキーで戻るためのスクリプト

以前の記事で、「Webサイトの中で、テキスト入力欄(検索窓など)にカーソルがある状態でもBackSpaceキーを使って『戻る』ことができるようにしたい」ということを書いた。

仕様としては、以下のような感じ。


  1. テキスト入力欄にフォーカスがあっても、何も入力されていない場合は、BackSpaceキーを押したら前のページに戻るようにする。
  2. ただし、入力した文字をBackSpace押しっぱなしで削除したときに、いきなり前のページに戻ったりはしないようにしたい。
  3. (隠し機能として)Shiftキーを押しながらBackSpaceキーを押せば、文字が入力されている状態でも前のページに戻るようにする。

続きを読む "続・BackSpaceキーで戻るためのスクリプト"

| | コメント (0) | トラックバック (0)

2005-07-27

コマンドライン指向のユーザー・インターフェース

Googleを使っていて、ふと考えたこと。 コマンドラインの可能性について。

コマンドラインという言葉自体、たいていの人にとっては縁のないものかもしれない。一行のコマンドをキーボードから入力することによってコンピュータを操作する方式のことを言う。ちょっと前からPCを使っている人なら、MS-DOSの「DIR」コマンドとか「COPY」コマンドを覚えているかもしれない。

パソコンを利用する際の操作方式としては、コマンドラインはMacやWindowsのGUI (Graphical User Inteface)にとってかわられた。多くの人にとって、マウス、アイコン、メニューバーなどを使って操作する方が、より直感的で覚えやすかったのは間違いない。

そして、Web環境においても、マウスを使ってビジュアルなサイトの中のリンクをクリックするというのが操作の中心になっている。キーボードでコマンドを入力するなどというのは過去の遺物なのだろうか。 「いや、そうではない。Web環境においてコマンドライン的なユーザー・インターフェースが生きる場があるのではないか」というのがこの記事で言いたいことだ。

多くの人が頻繁に利用するであろうサイト Google は、実はコマンドライン的な性格を持ち続けている。そう言うと「検索サイトだから、一行入力欄にキーボードで入力するのは当たり前」と反論されそうだが、Googleの場合はそれだけでなく入力欄をよりコマンド的に使った機能をいくつも提供している。

ウェブ検索において対象サイトを指定(限定)する「site:」オプションもそうだし、電卓機能もそうだ。さらに辞書検索や路線検索(電卓機能のページの末尾に解説がある)などは、コマンドライン的な構文(機能[動詞]+対象物)そのものと言える。

これらの機能すべてを、通常のサイトのような見た目で構築しようとしたら、各機能へのリンクがずらずらと並ぶ(いわゆるポータルサイトのような)つくりになっていただろう。Googleはそうするかわりに、利用者自身にやりたいことを(ある一定のルールで)入力させることを選んだ。キーボードに慣れていてコマンドを覚えている利用者にとっては、快適な環境になっている。

このようなコマンドライン指向のユーザー・インターフェースには短所もある。一番多い批判は「やりたいことに対して、どう入力したらいいかわからない」というものだろう。Googleの特殊機能にしても、その機能があることを知らない人には機能がないも同然だ。コマンドライン環境が、しばしば敷居の高いものとなってしまうことは否定できない。

それでも、利用者がある程度ひんぱんに利用するWebアプリケーションを作る場合(つまり利用者が「ちょっとは決まり事を覚えてもいい」と思ってくれる場合)、コマンドライン指向のユーザーインターフェースを検討してみる価値はあるのではないか、と考えている。その場合、コマンド体系も重要になるだろう(自然言語的なアプローチもありえる)が、とりあえず今日はここまで。

| | コメント (0) | トラックバック (0)

2005-07-08

検索窓への自動フォーカスとBackSpaceキー

はるか昔(といっても5年前くらいか)、Googleを使い始めた頃に「こりゃ、便利だ」と感心したのが『ページを開くと自動的に検索窓にフォーカスが設定される』ことだった。いちいちマウスで入力欄をクリックしないでいい。単純なことだけど、頻繁に使う検索サイトでは、この一手を省けるのが大きい。

しかし、この機能にはひとつ小さな副作用がある。多くのWebブラウザではBackSpaceキーに『(ひとつ前のページに)戻る』機能を割り当てているが、テキスト入力欄にカーソルがある状態ではこの機能が効かないのだ(BackSpaceキーの本来の機能である『一文字削除』の動作しかしない)。マウスで『戻る』を押す人にはまったく問題ないのだが、自分はけっこうBackSpaceキーで『戻る』のに慣れているので、Yahoo!のトップページ(今年になって自動フォーカスするようになった)などでBackSpaceを押しても戻れず、いらつくことがある。

自分で「テキスト入力欄への自動フォーカス」があるサイトを作る場合に、同時に「BackSpaceキーで『戻る』」こともできるようにする方法を考えてみた。

続きを読む "検索窓への自動フォーカスとBackSpaceキー"

| | コメント (0) | トラックバック (0)

2005-06-09

RubyからMySQLを使う

最近、仕事でMySQLを使っている。
ちょっとしたデータチェック用のスクリプトをRubyで書いてやろうと思ったのだが、やりはじめると思ったより手間取った。

使っているMySQLはバージョン4.1.11。RubyはWindows上でOne-Click Ruby Installer(1.82)を利用している。便利なライブラリがデフォルトで多数入っているパッケージだが、MySQLのためのライブラリは入っていないようだ。

MySQLのためのライブラリを探していて見つけたのが、Ruby/MySQL。Rubyで記述されているので、これがいいだろう(楽だろう)と思ったが、ページに注記されているように現時点ではMySQL 4.1.Xにはそのままでは対応しておらず、「MySQL 4.1.x でも使用できるパッチ」をあてる必要があった。(我ながらチトかっこわるいが)ハンドコーディングでパッチ当て。

これでMySQLサーバーに接続できるようになったが、日本語データがうまく扱えない。クライアント機にmy.iniを設定していてもRuby/MySQLには関係ないようだ。character_set_name()というメソッドは予約されているが、まだ実装されていない。何か手はないかと考えたが、見つけられなかった。当面の使用目的であるデータチェックでは日本語データのあるフィールドを無視できたが、なんだかすっきりしない。

Windows上でRubyからMySQLを使おうというニーズはそれなりにあると思うのだが、現時点では「さらりとライブラリを使って楽々と」とはいかないようだ。(それとも、何か便利なやりかたを見落としているだろうか)


(6月15日 追記)
その後、ODBC経由の接続を試してみようかなどと調べているうちに、日本語データを文字化けさせずに扱うやりかたが見つかった。Ruby/MySQLを使って接続した後、"set names sjis" というqueryを実行すればよい(MySQLサーバー側がシフトJISの場合)。

| | コメント (0) | トラックバック (0)