2011/05/15

肉体言語Tython

肉体言語Tython
Hello World!で吹いたw プログラマーと言えば貧弱だったりデブだったりするイメージが強いですが、これで変わります!

2011/04/28

Rubyでダブルディスパッチ的eql?の再定義

ダブルディスパッチについて調べていて、rubyの例にヒット。うならされたのでリンク。
eql?の再定義に関する質問に対してのまつもとゆきひろさんの実装が秀逸。すばらしかー。

2011/03/29

KDW

追記 KDWのサポートが終わったようです。拡張カーネルや拡張コアを使いましょう。
https://www7.atwiki.jp/win2000/pages/16.html

>KDWのWindows 2000 API サポートは 2012年12月までの予定です。
>それ以降は fcwinのみのサポートになります。
>Windows 2000ユーザーには、より互換性が高い、拡張カーネル や ドライバの互換性向上に特化した、拡張コアの利用をお勧めします。




以下は備忘録です。
 --------------

Windows2000でXPをエミュしてるバカ,もとい天才がいると聞いて

http://slashdot.jp/~BlackWingCat/journal/444434



Wikiを読んでいたのが 中身がおかしい。

http://www7.atwiki.jp/win2000/pages/16.html


昔フックを掛けるとかラッパ-通すとかあったなぁみたいなデジャブにかられたのだが

ブログをみつけた。

http://blog.livedoor.jp/blackwingcat/



いや マジおかしくない?この人(ホメ言葉

2011/03/25

Make Link

知人とはIRCや各種メッセンジャーソフトでウェブページに関する情報交換をよくしています。そのときURLを貼るのですが、URLだけだと既知のものであったり、見直したときにわけがわからないんですよね。そこでFireFoxアドオンのMake Linkを導入。下の画像のようなインタフェースで、クリップボードにリンク文字列とURLを放り込んでくれます。

2011/03/17

[24時間365日] サーバ/インフラを支える技術 スケーラビリティ、ハイパフォーマンス、省力運用

[24時間365日] サーバ/インフラを支える技術 ‾スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

hatenaの中の人が執筆した本。具体的アプリケーション名をあげながら、止めることができないサーバまわりをどう構築するか書いている。ネットワークやサーバの教科書的な用語や概念は知っていないと、理解するのは少し難しいかもしれない。改訂されない限り、時間がたつと内容が一部古くなってしまうことが予想される。早めに読んだほうがいい(もっと早く読めば良かった…)。

個人的に面白かったなぁと思う点は2点。1. linux系OSでの負荷の調べ方(なんとなくしか理解できていなかった)。2. サーバ機を汎用的に運用する方法(サーバ機をネットワークブートにして、アプリケーションサーバ、リバースプロキシー、ロードバランサーなどに起動時に自由に変更できるようにする。また、そういう運用が可能なネットワークを組む。そうすることによって、それぞれの用途毎に予備機を用意する必要がない)。

貴重な運用ノウハウがこの値段で提供されているのは素晴らしい。全然触れたことがない世界なので、刺激的だった。いいなぁ、こういう仕事してみたい。

2011/02/24

Rubyの面白いところ Part 12 「標準ライブラリにバックトレース機能がある」

LLな言語を使う開発者は、どうにもIDEを使わないイメージがあるのですが、標準ライブラリにトレースバック機能 があるんですねぇ…。

#!/usr/bin/ruby

def foo
  p caller(0) # ["caller.rb:4:in `foo'", "caller.rb:11:in `bar'", "caller.rb:14"]
  p caller(1) # ["caller.rb:11:in `bar'", "caller.rb:14"]
  p caller(2) # ["caller.rb:14"]
  p caller(3) # []
end

def bar
  foo
end

bar
ファイル名、行番号、メソッド名を出力しています(参考)。

2011/02/17

Rubyの面白いところ Part 11 「caseとbreakは他言語と動作が異なる」

breakはもっとも内側のループを脱出します。ループとは

  • while
  • until
  • for
  • イテレータ
のいずれかを指します。 C言語とは異なり、breakはループを脱出する作用だけを持ち、caseを抜ける作用は持ちません。(参考)

ほっほー。試しに下記を実行するとfirstが出力された。つまり、2つ目からのwhenはifではなくelse ifなんですね。

a = 1
case a
when 1
  p "first"
when 1
  p "second" # never come here
else
  p "else" # never come here
end

2011/05/11 追記:
動物本を見るとelse ifという表現はあまりよろしくない気がしました。

プログラミング言語 Rubyより

他の言語のswitch文は、単純に適切なcaseラベルの先頭に制御を移すだけである。そこから制御は継続され、他のcaseラベルに「落下」することもある。この落下の動作により、複数のcase節が同じコードブロックを参照できるのである。Rubyでは、個々のwhen節にカンマ区切りの複数の指揮を並べられるようにして、同じ目的を達している。Rubyのcase文は落下しない。

プログラミング言語 Ruby 第2版 131ページ caseとswitch
def hasValue?(x)      # hasValue?という名前のメソッドを定義する
  case x              # xの値に基づく多方向条件分岐
  when nil, [], "", 0 # nil===x || []===x || ""===x || 0===xなら
    false             # メソッドの戻り値はfalse
  else                # そうでなければ
    true              # メソッドの戻り値はtrue
  end
end

2011/02/16

Rubyの面白いところ Part 10 「多重代入における*の取り扱い」

多重代入は複数の式または配列から同時に代入を行う。左辺の最後の式の直前に*がついていると、対応する左辺のない余った要素が配列として代入される。余った要素が無い時には空の配列が代入される。

foo, bar = [1, 2] # foo = 1; bar = 2
*foo = 1, 2, 3 # foo = [1, 2, 3]

ここまでは便利だなぁーと思うのですが、次の仕様がどう有効活用するのかよくわからない...

特に最後の単体の*はメソッド呼び出しにおいて引数を完全に無視したいときに使用できます。

def foo(*)
end
foo(1,2,3) # ok

def bar()
end
bar(1,2,3) # in `bar': wrong number of arguments (3 for 0) (ArgumentError)

何か有効活用する意味があると思うんですが、思いつきません...

参考: Rubyリファレンスマニュアル