01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 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
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
・第9章 もっと便利なヘルパーオブジェクト
いろいろと便利なヘルパーオブジェクト。
Template オブジェクトは便利に使えそうだ。
・第10章 パフォーマンス上の注意点
さらっと読む。
・第11章 総仕上げ
タスクリストシステムを作成して総仕上げとする。
Prototype のおかげで短いコードで、分かり易く、表現豊かな UI の記載が行える。
素晴らしいライブラリだ。
また、本書でそのパワーを生かす方法を学び、非常に参考となった。
- 5分でわかるRack - Greenbear Diary (2008-07-16)
Rackの思想
「Webアプリって要するにリクエストをレスポンスに変換するだけの関数だよねー」 ってのがRackの基本っぽい。
確かに。
- Greenbear Laboratory - Rack日本語リファレンス
- ウノウラボ Unoh Labs: RackでWebアプリのWebサーバー依存を無くす
・第8章 Ajax がこんなに簡単になった
「8.3 効率を高める Ajax.Updater」サンプルの取り上げ方はうまいなぁ。。
そこまで手数のかからないソースで、ちゃんと役に立つものを取り上げている。
1点だけ、Ruby のライブラリを検索する server.rb のソース(p.178)で、
def get_search_results(g)
suffix = "/*#{Regexp.escape(g)}*.rb"
$LOAD_PATH.collect do |dir|
Dir.glob(dir + suffix, File::FNM_CASEFOLD).collect do |f|
File.basename(f, '.rb')
end
end.flatten.sort.uniq
end
となっているのだが、suffix は、
suffix = "/**/*#{Regexp.escape(g)}*.rb"
としておいた方が実用性は高いかと。

本当のソフト開発を本当の意味でわかってもらうのにいい本
楽しい
実際に現場で使わせてもらってます
優秀なソフトウェア開発者の日々の徒然
プログラミングチームを率いるときにジョエル・テスト
1. ソース管理システムを使っているか?
2. 1オペレーションでビルドを行えるか?
3. 毎日ビルドを行うか?
4. 障害票データベースを持っているか?
5. 新しいコードを書くまえにバグを修正するか?
6. 更新可能なスケジュール表を持っているか?
7. 仕様書を持っているか?
8. プログラマは静かな労働環境にあるか?
9. 買える範囲で一番良い開発ツールを使っているか?
10. テスト担当者はいるか?
11. プログラマを採用するときにコードを書かせるか?
12. 「廊下での使い勝手テスト」を行っているか?
・第7章 フォームを操作する
フォームのあるページをロードした際には、最初の入力フィールドにフォーカスがあたっているのが確かにうれしい。
# 何を最初のフィールドとするか?込み入ったページでは悩むこともあるだろう。。。
そんなとき、
formElt.focusFirstElement();を dom:loaded のタイミングで読んでやるがよいかなと。
formElt.serialize();を呼んであげればよい。
■ DOCTYPE 宣言で、標準準拠モードで表示させる
ブラウザは DOCTYPE 宣言でレンダリングモードを切り替える。
標準準拠モードと互換モードのどちらかで動くことになるのだが、互換モードで走らせてしまうと、各バージョンのブラウザにおいて、どのような挙動になるか把握するのが非常に面倒。
そのため、標準準拠モードで動作させておくようにする。
以下の宣言を頭に入れておく。
ただし、XML 宣言をこの前に入れてしまうと、DOCTYPEスイッチが起こってしまう(IE6のみ?)ため、XML 宣言は省略する。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
clear: both;
RC 1 が出ていたようなので、インストールして使ってみることに。
[2008-09-24] に書いていた HTML Project Support プラグインが RC1 ではデフォルトのプラグインの参照では見えない。
プラグインの設定にて、
- Latest Development Build
http://deadlock.netbeans.org/hudson/job/nbms-and-javadoc/lastStableBuild/artifact/nbbuild/nbms/updates.xml.gz
を追加してインストールしておく。
[2008-09-12] にて、不満点(というかかなりストレスとなっていたところ)として上げていた Emacs キーバインドにて、インクリメンタルサーチである Ctrl + s が効かない点だが、これは、再度キーマップの設定にて割り当てを実施すると効くようになる。
何が悪いのかはよくわからないが、これは Mac OS X Tiger (Leopard は使っていないのでわからない) だけの不具合。Windows では問題なかった。
何はともあれ、これでストレスがかなり減る。。
# こんなことだったら、とっとと試しておけばよかった。。
他のキーバンドでも、何故か動かない・・・ということがあれば、一度キーマップの設定をやり直してみるとうまくいくものがある。
- MOONGIFT: ブラウザベースのSubversionブラウザ「Warehouse」:オープンソースを毎日紹介
たまたま図書館で手にして読み始めた本。
訳書の発売が 2005/12 となっているので、原書はさらに数年前になるのかと思うが(本文で出てくる日付がだいたい 2000年 - 2003年)、この移り変わりの早い業界の中にあって古さを感じさせない。
いろいろ新しいものは出てくるが、やっぱりソフトウェアは人が作るもの、と改めて思わせてくれる。と言っても、まだ最初の数章しか読めていないのだが。。
たまたま手にとった本がこんな良書だったとは。
流石に図書館の本に落書きはできないので、タイミングをみて購入しようと思う。
と、どこかで見たことのある著者名だなぁと思っていたら、[2008-10-02] に取り上げていた読みたい本「BEST SOFTWARE WRITING」も Joel Spolsky だったんだ。

本当のソフト開発を本当の意味でわかってもらうのにいい本
楽しい
実際に現場で使わせてもらってます
優秀なソフトウェア開発者の日々の徒然
プログラミングチームを率いるときに初歩的なことだが、非常に重要な点。
JavaScript の変数宣言では、var を使用するが、var を使わなくても、変数の宣言は行える。
ただ、var を使用しない場合、その変数はグローバル変数になってしまうことに注意。
関数内でグローバルな変数を定義することなんて滅多にないので、デフォルト var を付ける。
JavaScript の場合、ブロックレベルにスコープは無く、関数スコープしかない。
・第6章 これで DOM が楽しくなる!
DOM の操作、巡回は Web アプリでは必須の要素。
しかし、ここをちゃんとやったことはない。。。よい勉強になる。
Tree 構造でデータを表現する。
■ DOM を渡り歩く (6.2.5)
W3C 仕様の素のプロパティで渡り歩くのは何かとメンドイ。。
Prototype は、Element のメソッドとして、
- DOM を巡回するためのメソッド
- 要素のコンテンツを変更するメソッド
を用意してくれている。
- DOM を巡回するためのメソッド
- down
- firstDescendant
- next
- previous
- up
firstDescendant を除き、引数に文字列、整数を与えられる。
文字列の場合、CSS セレクタとして解釈され、整数の場合メソッド名の方向で index 番目の要素得られる。
文字列、整数、両方一緒にも指定できる。
また、これらのメソッドが巡回するのは、"要素"単位。テキストノード、コメントノード、実体参照などは巡回しない。
- 要素のコンテンツを変更するメソッド
- cleanWhitespace
- remove
- replace
- update
- CSS クラス名を調整するメソッド
- addClassName
- hasClassName
- removeClassName
- toggleClassName
- 要素の可視性を操作するメソッド
- hide()
- show()
- toggle()
- visible()
■ 参考になったソース
- p121:L20 prototype/dom/fragments/people_6.js
this.selected = (this.selected && this.selected.id == id ? null : this.find(id));選択されているもの自身を選択するとその選択が解除されるようにするためのものである。
・5章 統合されたイベント処理
初めて Prototype で書かれたイベント処理を見た時に、よく使うページ読み込み時の load イベントにdom:loaded という記載を見てハテ?と思ったものだが、その説明もある。
load が外部リソースも含めてロードされたタイミングであるのに対して、dom:loaded は、DOM 要素が全て読み込まれたタイミングのイベントとなるのでそれよりも先に発生する。
■ リスナーの登録に関する注意点
バージョン 1.6 で変更点、及び注意点がある。
- イベントの伝播でキャプチャリングの指定はできなくなった。
というか、これまでもできなかったのだが、切り替えのオプションがあったため、できるものと勘違いされていた。
- イベントの解除に、イベント名の提供のみでいけるようになった。
実際、JavaScript の世界では、登録した際のハンドラ、イベント名など登録を行った時と同じ引数で解除をしないといけないのだが、element.stopObserving() で、Prototype がよきに計らってくれるようになっている。
- イベントハンドラは自動的に登録された要素にバインドされる。
イベントハンドラの中の this は常に W3C の currentTarget プロパティと同等のものをさす。
とはいえ、リスナーは、その持ち主であるオブジェクトに依存するメソッドとして定義されるので、ハンドラ内でもメソッドが this を正しく参照する必要があり、bind() を使うことにはなる。
ただし、bind() では引数の順番が保証されないので、bindAsEventListener() を使う。
- bind() メソッドは、オリジナルのものをラップした"新規"の無名メソッドを返す。
これを意識しておかないと、stopObserving を使ったイベントの解除で嵌まることがあるので注意。
実際に動かしてみて、慣れていかないといけない。。
- session.el + minibuf-isearchが便利すぎる
で知った。
入れておく。
必要な elisp は以下のもの。
- Session Management for Emacs
- minibuf-isearch
設定は、
- dotemacs-session-el.txt
を参照。
・4章 Enumerable で高度なコレクション
■ Array#each での脱出方法
列挙の切り上げ next(continue), break はどう書くのか?
- next(continue)
return。
古いバージョンの Prototype には、$continue もあるようだが、現在はなく、return を使う方がパフォーマンス的にも優れている。
- break
$break という特別に用意された例外定数を使う。
throw $break;
$R(1, 10).partition(function(n) {
return 0 == n % 2;
});
=> [[2, 4, 6, 8, 10], [1, 3, 5, 7, 9]]
>> (1..10).partition { |n| 0 == n % 2 }
=> [[2, 4, 6, 8, 10], [1, 3, 5, 7, 9]]
働きとしては、最初の引数を受け取り、そのまま何もせずに返します。
で、何がうれしいのか?
この関数を使うことで、ほとんどのメソッドのイテレータ引数を省略可能にすることができるのです。
eachSlice など集計を行う際に便利なメソッド。
■ グローバルな値を計算する(4.5.1)
- inject(accumulator, iterator) => value
Ruby でもよく使う inject。
JavaScript でも使えるのはうれしい。
■ 各要素を別の形に変換する (4.5.2)
- collect/map(iterator) => Array
- invoke(methodName [, arg.... ]) => Array
- pluck(propertyName) => Array
collect は Ruby でもなじみがある。
invoke と pluck は便利だなぁ。
ほぼ同じ使い方となるが、
- invoke は、それぞれの要素に対して"メソッド"を呼び出す必要がある場合
- pluck は、それぞれの要素に対して"プロパティ"を取得する必要がある場合
に使用する。
collect を使う前に、invoke、pluck が使えないか、考えてみること。
コードの可読性もそうだが、パフォーマンス的にもすぐれている。
Ruby に同様のものは用意されていないのかな?
なさそうだ。
書くとしたら、以下のような感じ?特に invoke と pluck の違いは意識する必要ないかな?
class Array
def pluck(mtd)
inject([]) { |r, e| r << e.send(mtd) }
end
alias :invoke :pluck
end
・1章 Prototype を理解する
・2章 $() 関数のクイックヘルプ
・3章 普通の JavaScript もパワーアップ
まで。
結局 Prototype とは何か?
- Prototype は、ブラウザの JavaScript 環境を向上させるべく設計された JavaScript ライブラリ
- 組み込みの型(タイプ)と DOM を拡張し、便利なメソッドを追加し、形象可能なクラススタイルのオブジェクト指向を実現している。
- 高度なイベント処理と強力な Ajax 機能もサポートしている。
便利なライブラリであるが、既存の JavaScript に新規のライブラリを追加するだけのものではない。既にある DOM、メソッドを拡張し、非常に扱い易いものとなっている。
また、Ruby に触発されて書かれたものであるため、その言語思想が反映されており、Ruby 愛好家にとって心地よい。
便利になる、ことは非常にうれしいことであるが、何よりも最もうれしいのは、Prototype が便利な機能を提供しつつ、最も悩まされるブラウザ間の互換を保ってくれることがある。状況によっては、全く 0 にはならないだろうが、各ブラウザのバージョンを調べて、思った通りの動作をするのか、1つ1つ調べていく手間を削減してくれる。
■ $() 関数
document.getElementById('id 値') とタイプしなくとも、$('id 値') でいける。
単なるショートカットではなく、$() 関数で取得される要素は Prototype で拡張された要素となる。
■ $$() 関数とCSS セレクタ
CSS にあまり馴染んでいなかった自分にとって、本書で触れられていた CSS セレクタは参考になった。
$$() 関数は、その引数に CSS セレクタを渡すことで、そのセレクタに基づいた要素を取得することができる。
本来この CSS セレクタはブラウザによりサポートされている CSS のバージョンに依存し、使用できる/できないケースがあるのだが、そこは Prototype が吸収してくれる。と、書くと誤解を招くかもしれない。正確には、Prototype でサポートしている CSS セレクタを使用すれば、基本ブラウザの互換をコーディングする人が考える必要はない。Prototype は独自の CSS パーサ(CSS3 対応)を持っている。
■ $A() 関数
これはかなり強力。DOM のコレクションを扱うケースは多々あるが、$A() はコレクションを Array オブジェクトに変換してくれる。
それで何が幸せか?返される Array オブジェクトは Prototype で拡張されており、Enumerable モジュールが mixin されているため、その恩恵にあずかることになる。
■ for...in 文
これは,オブジェクトの列挙可能なプロパティやメソッドに対して反復処理を行うもの。
単なる配列を列挙するためのもの、として使うと想定外のものが出力される。
Prototype を使用していない環境では、
ary = [1, 2, 3]
for (var e in ary) {
console.log(e);
}
の結果は、1, 2, 3 が表示されるだけだが、Prototype を使用している環境で上記のスクリプトを実行すると拡張されたメソッドがズラズラと並ぶ。関数のバインディングとは本質的に、this が参照しているオブジェクトと関数を実行時に結合させることを意味します。
そう、実行時の self が this になる。
JavaScript ではレシーバー(オブジェクト)を省略すると、window オブジェクトが暗黙のうちにバインドされ、window オブジェクトのスコープをもつ。
当然、レシーバーを省略した時の話だけではない。
これは扱いにくい。
Prototype ではこれに対する解決策として、Function に2つのメソッドを提供する。
- bind(thisRef, [, arg...]) => boundFunction
- bindAsEventListener(thisRef, [, arg...]) => boundFunction
bind() の1つめの引数(thisRef)にバインドさせたいオブジェクトを指定する。
関数に対するメソッドってところがかっこいい。
作成中のアプリで、JavaScript で悩む。
Prototype を使いこなしたいため、読み始めた。
Prototype Core チームの一人である Christophe Porteneuve 氏による解説。
- JavaScript リファレンス
- JavaScript DOM リファレンス
- prototype.js リファレンス
- J-CASTが持つ隠れた“財産”:ITpro
ほう、そうなんだ。
- J-CASTニュース ビジネス&メディアウォッチ
- オンラインで動画・音声・教科書を無料で公開している大学の講義・授業まとめ - ひげぽん OSとか作っちゃうかMona-
- はじめようRuby on Rails〜フレームワークで作るWebアプリケーション〜
- SOI 講義案内
Internet Week 2006
から。
- String#[](regexp, nth = 0)
[] 内に正規表現(文字列でも)を与えた場合、マッチした部分文字列全体を返す。
マニュアルより。
正規表現 regexp の nth 番目の括弧にマッチする最初の部分文字列を返します。
nth を省略したときや 0 の場合には正規表現がマッチした部分文字列全体を返します。
正規表現が self にマッチしなかった場合や nth に対応する括弧がないときは nil を返します。
整数を与える使い方しかしていなかった。。
- ホワイの(感動的)Rubyガイド
■ 5. ルールを作るものと夢を生きるもの
6. ルールを作る者たち
にはいる。
グローバル変数について、
- $"
require でロードされた全てのライブラリ
ミックスインについて、ドクター・チャムとヤギの会話。
「7. 夢を生きる者たち」から。
「そう、includeでクラスに取り込まれるモジュールは、そのクラスのミックスインだ。scan_for_a_wish に戻って見てみれば、それがself.readメソッドを呼んでいるのがわかるだろう。MindScanner がミックスインされるクラスがread を持つか確認するだけでいい。持っていないとエラーが投げられることになる」
「ミックスインがまだないメソッドを必要とするというのは奇妙だ。自分でやるべきように思える」
ドクター・チャムはキーボードから目を上げてヤギを見た。「これは君のビデオコレクションみたいなものだ。君のビデオカセットは、そのビデオカセットを使う機械に 入れないと使えない。それらは互いに依存しているのだ。ミックスインは基本的な要求を持っているが、クラスがひとたびその要求を満たせたなら、すべてのそのほかの機能を手に入れることができるんだ」
「そいつはクールだ」とヤギが言った。
■ 6.ダウンタウン
「3. スポンサー付きのドラゴン退治」からメタプロに入っていく。
・Creatureのコード
クラスのメタクラスを取得するイディオム。
class Creature # このクラスのメタクラスを取得する def self.metaclass; class << self; self; end; end end
オブジェクトのコンテキストで文字列 expr またはオブジェクト自身をブロック引数とするブロックを
評価してその結果を返します。
オブジェクトのコンテキストで評価するとは評価中の self をそのオブジェ
クトにして実行するということです。また、文字列/ブロック中でメソッ
ドを定義すればそのオブジェクトの特異メソッドが定義されます。
- Module#class_eval
モジュールのコンテキストで文字列 expr を評価してその結果を返します。
.....
ブロックが与えられた場合にはそのブロックを
モジュールのコンテキストで評価してその結果を返します。
ブロックの引数 mod には self が渡されます。
モジュールのコンテキストで評価するとは、
実行中そのモジュールが self になるということです。
つまり、そのモジュールの定義文の中にあるかのように
実行されます。
「3. スポンサー付きのドラゴン退治::あなたを登場させる。」まで。
いやぁ、内容が凄く濃くなってきた。
Xubuntu -> gOS の遍歴を辿り、結局本家 Ubuntu を EeePC 4G-X で使用することにした。
こんなに OS のインストールを行ったのは何年振りだろう。。。
使用する Ubuntu は、
- ライブCDの部屋
から取得した
- eeeubuntu-8.04-desktop-i386-0925.iso
他に1台家庭内共有サーバとして動かしているのが Ubuntu なので、起動した画面を見ると少しほっとする。
$ uname -r 2.6.24-16-generic
$ sudo modprobe -r uhci_hcd再度読み直し。
$ sudo modprobe uhci_hcdこれで PPP 接続の「モデムのポート」の設定で行っている /dev/ttyUSB0 として D02HW が認識される。
$ uname -r
Xubuntu でシステムアップデートをかけた後、ネットワーク系に混乱が発生した。。
1つ1つ潰していくのもありだが、gOS がノートブックにも力を入れている、との記載をどこかで読んだのを思い出し、ちょっと gOS を試してみることにする。
- gOS - Discover a Good OS - Download gOS 3.0
確かに、Gadgets は楽しい。。
ただ、設定変更を行う GUI にて、「予期しないエラー」が頻発する。
例えば、「システム」→「システム管理」→「ネットワーク」で「ネットワークの設定」画面などで「ロックの解除」の解除を行いたいのだが、パスワードはあっているはずなのに、「予期しないエラー」、もしくはパスワードが合ってない、とくる。
GUI でのスーパーユーザへの権限昇格で何かへくってる??
何はともあれ、のきなみ「ロックの解除」ボタンを使うところはそういう状況。
さて、本家 Ubuntu かな・・・
redo は、現在の繰り返しをやり直しますが、ループを一番最初からやり直したいことがあります。
retry 文はまさにそのようなとき使用します。retry は、あらゆるループを起動し直します。
「プログラミング Ruby」より。
- ホワイの(感動的)Rubyガイド :: 5. ルールを作るものと夢を生きるもの
にある LotteryTicket::new_random の記載にある
class LotteryTicket
def self.new_random
new( rand( 25 ) + 1, rand( 25 ) + 1, rand( 25 ) +1 )
rescue ArgumentError
redo
end
end
だと、
>> LotteryTicket.new_random
LocalJumpError: unexpected redo
from ./lottery.rb:20:in `new_random'
from (irb):32
LocalJumpError が発生する。- Ruby on Rails用 統合開発環境(IDE) 比較レポート:CodeZine
- OpenSolaris に Web Stack をインストール (4) : 開発クラスタをインストール - Masaki Katakai's Weblog
Linux 向けにはまだ Beta 版だが、使用してみる。
- Adobe Labs - Adobe AIR for Linux
- Adobe Labs - Downloads: Adobe AIR for Linux Beta
からダウンロード。
ダウンロードされた adobeair_linux_b1_091508.bin ファイルに実行権限を与えた上で起動する。
$ cd ~/Desktop $ chmod +x adobeair_linux_b1_091508.bin $ ./adobeair_linux_b1_091508.binGUI のインストーラーが起動される。日本語になっているので画面のガイドに沿ってインストールを行う。
$ /opt/Adobe AIR/Versions/1.0 $ ./airappinstaller ~/Desktop/ReadAir.0.3.airインストーラーの画面が起動し、なんとなくインストールは完了した模様。
Unkown desktop manager((null)), only Gnome and KDE are supported
だそうで。。。そう、Xubuntu を使っているので、desktop manager は xface なんだよね。。
まだ Beta 版だが、AIR のサポート Gnome と KDE だけになるのかな・・・
だとすると無念。
Mac OS X では普通に使える。
ほったらかしにしていたが、EeePC に Xubuntu をようやく入れた。
用途して、
・移動中の連絡
・ネットでの情報チェック
・サーバ管理
となっている EeePC なのだが、Windows XP よりも、Linux 系の OS が入っておいておいてくれた方が勝手がいい。しばらくデフォルトでインストールされている XP を使っていたが、ようやく Linux 系 OS Xubuntu に切り替えた。
使用したのは、
- ライブCDの部屋
からダウロードした
- eeexubuntu-8.04-desktop-i386-lcr-0909.iso
ドライバなど EeePC 用に準備してくださっているパッケージのようで、インストール後、特に何もすることなく使い始めることができた。感謝です。
インストール後、そのまま無線LAN、EMOBILE の D02HW も使用可能。
D02HW の接続はモデムの設定として行っておけばよいのだが、
- 今日の気分はバリいくつ?: D02HW on Ubuntu7.10
に書かれている内容のままでいける。
ただ、一応使えるには使えるが、OS 起動時に D02HW が繋がっていないと、接続がうまくいかない。なぜかな?
日本語の言語パックは追加が必要。
追加を行うまでは中途半端な日本語環境のままとなる。
「バッテリーが壊れています」のメッセージがでるのだが、一応バッテリーは問題無く使えている。
251 個の Update があったのでやっておく。
流石にこの数だと結構時間がかかる。
また、ディスク容量が 600M 消費される。。4G しかなく、インストール時に残り 1.3G となっていた状況ではこれはきつい。。
sudo apt-get cleanでキャッシュをクリアしておく。260M 節約。
$ uname -r 2.6.24-19-generic確かに該当している。
$ sudo -s # dpkg -i linux-ubuntu-modules-2.6.24-19-generic.deb # cd /lib/modules/2.6.24-19-generic # tar xfz /home/hoge/tmp/modules-2.6.24-19-generic.tar.gz # mv net/* madwifi # rm volatile/ath_hal.ko # cp /home/hoge/tmp/eeepc_acpi.ko kernel/drivers/acpi/ # cp /home/hoge/tmp/uvcvideo.ko ubuntu/media/usbvideo/ # mkdir kernel/drivers/net/atl1e # cp /home/hoge/tmp/atl1e.ko kernel/drivers/net/atl1e/ # cp /home/hoge/tmp/rt2860sta.ko kernel/drivers/net/wireless/ # depmod -a
# echo "linux-ubuntu-modules-2.6.24-19-generic hold" | dpkg --set-selectionsうつの忘れてた・・・
$sudo taskselを使うのがてっとり早い。
$ diff -u /etc/X11/xorg.conf.org /etc/X11/xorg.conf
--- /etc/X11/xorg.conf.org 2008-10-05 06:07:47.000000000 +0900
+++ /etc/X11/xorg.conf 2008-10-05 01:43:10.000000000 +0900
@@ -20,7 +20,7 @@
Option "XkbRules" "xorg"
Option "XkbModel" "jp106"
Option "XkbLayout" "jp,jp"
- Option "XkbOptions" "grp:alt_shift_toggle,grp_led:scroll"
+ Option "XkbOptions" "grp:alt_shift_toggle,grp_led:scroll,ctrl:swapcaps"
Option "XkbVariant" "106,"
EndSection
5. ルールを作るものと夢を生きるもの
オブジェクトの誕生
より、
Class とObjectの間にModuleがあるのに気付いた? Objectが王で、Rubyの他のすべての父祖だとすると、Module は貧しい孤児たちの修道女で、Rubyの街の子どもたちを守り、保護している。(アナロジーを完成させるなら、Class は村の学校の先生で、Kernelは尊大な村の顔役だ。)
'<<' は、対象が何であっても、素直に全て連結オペレータと思ってよいな、と思った。
それが文字列の場合、
>> name = 'Taro' => "Taro" >> name << ' Yamada' => "Taro Yamada"文字列は追加(連結)される。
>> a = [1] => [1] >> a << 2 => [1, 2] >> a << [3, 4] => [1, 2, [3, 4]]配列は追加(連結)される。
>> class Hello; end => nil >> class << Hello >> def say >> "Hello" >> end >> end => nil >> Hello.say => "Hello"オブジェクトにメソッドはクラスメソッドとして追加される。
elsif picks.uniq.length != 3
raise ArgumentError, "3つの数字は違うものでなければなりません"
と、
if [note1, note2, note3].uniq!
raise ArgumentError, "異なる鳴き声を選んでください"
という2つの書き方を行っている。

ゆっくり楽しめる本です
原著の意図を考えると…- ホワイの(感動的)Rubyガイド
いくらか冗長な記述もあるが。。作者のユーモアにつきあって読んでいると楽しくなる Ruby の入門書の翻訳。
正直物語ははしょって読んでしまったが、摩訶不思議なストーリーの中で展開される扱っている Ruby のエッセンスの切り口は短い文書の中でもキレがある。
「4. 浮いている小さなコードの葉っぱ」の unless の説明にある
unlessキーワードは負電荷を持ったものだけを受け入れるというポリシーだ。つまりnil とfalseということだ。
なんて表現はうまいなぁと思った。
5章 ルールを作るものと夢を生きるもの
「つぶやきなしの耳栓」まで。
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 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
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
最終更新時間: 2009-10-14 00:22