今日調べたことと今日わかったこと。(久々に3時間ぐらい色々してた)
今日色々引っかかったことでわかったことを書いておこう。
前からこの話は知ってたんだけどポート番号を忘れたので調べなおしてたIRCとかは接続されるとidentサーバに接続しようとしてくるんだけど、基本ルータはこのパケットをスルーするのでタイムアウトまで次の処理が行われなかったりする。
113番ポートにきたパケットをRejectしてやればすぐに処理が継続されるようになる。
カレントオブジェクトselfについて Ruby - Qiita
instance_eval
以前にselfになんか足すのにclass_evalを使ったんだった気がするけど、instance_evalを使うと該当のinstanceにだけ変更を加えることができる?ようだ。そもそもクラスがinstance化されるっていうのはメモリ上でどうなってるんだろうか?以前(Javaをやってたころ)はクラスがinstance化されてもクラスメソッド自体はメモリ上に1つしかないのかと思ってたんだけどJavaでもReflection使ったら中身を書きかえれるよなぁ。。でもあれはclass_evalなのか?なんかよーわからんな。
橋本商会 » Node.jsのEventEmitterをRubyに移植した
橋本商会 » websocket-client-simple 作った
shinosaka.rbで書いてたプログラムの続きを少しやってたんだけど、websocketで別のところから情報とってきてLitaのhandlerクラスのメッセージを受けた時のresponseに返そうとしてたんだけど、websocket内でresponseが見えない。
そりゃ使ってたwebsocketのgemは別スレッドで処理してるんだから見えるわけないわなーとか思ってスレッドに引数の渡し方を調べてた。
でもこのgemはEventEmitterというnode.jsとかで使われるイベント登録の仕組みと同じことを行えるgem(thread生成、Proc登録とイベントのコールバック処理を簡単に書けるようにするようなやつ)を使ってるんで引数を渡せない・・・。instance_evalとかで無理矢理渡すか。みたいなことを試すのにリファレンス読んでた。Threadとかはやっぱり言語の中でも非常に面白い。
そろそろ眠いのでこの辺にしておく。