2010年8月16日星期一

Ruby语言里面block, Proc, lambda的区别

简而言之Proc就是可变的block,是可插入代码段。
而lambda是可变函数。

Proc与lambda有以下区别
1.lambda检查参数个数
2.Proc的返回值为函数返回值。return之后的代码不执行。

http://www.robertsosinski.com/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/

2010年8月12日星期四

百度小说阅读背景文字变换

把下面的链接拖动到浏览器工具栏里,点击即可改变背景颜色,文字颜色与大小。

Change font and color

2010年8月3日星期二

PCのWIFIを通してIPHONEからインターネットアクセス方法

http://d.hatena.ne.jp/adonishi/20080912/1221232426


Windows-XPとiPhoneでのWifiルーター化
iPhone | 00:13

さてはて、先日(ちと遅い)夏休みとして、青春18きっぷで奈良へ行ってきました。もちろん鈍行乗り継ぎなので、片道9時間ぐらいかかります。半分ぐらい寝てましたが、後の半分はiPhoneに大量に入れていった、DVDなどから変換したビデオを見てました。おかげでぜんぜん飽きずに9時間(x2)が終わって楽勝でしたよ。

その時、一緒に持っていったラップトップ(Windows-XP SP3)で、iPhoneをWifiルーターとして上手く使う方法を確立したので、まとめて見ます。(今まで何度か試していたのだけれど、いまいち上手く行っていなかったのでした。結構めんどうくさいです。)

基本的な方針
WindowsからJailbreakしたiPhoneへWifi接続(adhoc)をした後に、PuttyのSOCKSフォーワーディング機能を使って、windowsからの接続をiPhone経由で3Gネット側へ確立できるようにする。

(しかし、そう簡単には行かないんだよなぁ、これが、、、)

必要なプログラム等
Putty - http://www.chiark.greenend.org.uk/~sgtatham/putty/
FreeCap - http://www.freecap.ru/eng/
そしてもちろんJailbreakしたiPhone
設定
Wifi接続の設定
まずWindowsとiPhoneをWifiで接続しますが、一対一での接続でいいのでadhoc接続をします。

ここでは、iPhoneのIPアドレスを10.0.0.1、Windows側を10.0.0.2とします。

まず「ネットワーク接続」開いて(「スタート」->「接続」->「すべての接続を表示」)、ワイヤレス・ネットワークの接続を探します。
そのプロパティを表示し「ワイヤレス ネットワーク」のタブを選びます。
一番下の「詳細設定」を押して、「アクセスするネットワーク」の中から「コンピューター相互(ad hoc)のネットワークのみ」を選びます。(後で戻しておくと良いでしょう。)
「詳細設定」を閉じて「プロパティ」に戻り、「優先ネットワーク」の「追加...」を選びます。
「SSID」を適当なものに(ここでは「adhoc」)設定、「キーは自動的に提供される」のチェックをはずす。
「ネットワークキー」とその入力確認が入れられるようになるので、適当なパスワードを(5文字、もしくは13文字)を両方へ入力
「OK」を押して「プロパティ」に戻り、また「全般」のタブに戻る。
「インターネット プロトコル(TCP/IP)」を選択し、「プロパティ」を押す
「次のIPアドレスを使う」を選択し、「IPアドレス」に「10.0.0.2」、「サブネットマスク」に「255.0.0.0」、「デフォールト ゲートウエイ」に「10.0.0.1」を入力
「OK」で「プロパティ」へ戻り、また「OK」で「プロパティ」を閉じる
これで設定は終了。接続してiPhone側の設定をします。

iPhone側で「設定」->「Wi-Fi」に「adhoc」が出ていたらそれに接続、無かったら「その他…」を開き、名前:「adhoc」、セキュリティ:「WEP」、パスワード:(さっきWindowsで設定したパスワード)を入力し「Join」します。
Windows側で、「ネットワーク接続」にある、ワイヤレス・ネットワークの接続をダブルクリックして「ワイヤレス・ネットワークの選択」を表示します。
登録した「adhoc」が見えるので、それを選択して「接続」を押します。
接続できたらiPhone側上で、この「adhoc」接続の設定を開き、IPアドレスの設定を「DHCP」から「静的」にします。
「IPアドレス」を「10.0.0.1」に、「サブネットマスク」を「255.0.0.0」にします。


これで、設定できました。

メモ:通常Windows同士でad hoc接続をする時には、IPアドレスはWindowsが擬似DHCPサーバーになってくれるので、お互いに相手先からIPアドレスが取れます。しかし、iPhoneはこれをしてくれないので、今回の場合iPhone側はIPアドレスが取れますが、Windows側はIPアドレスが取れません。なので、静的にIPアドレスを設定してやる必要があります。
こうすると、他のWiFiアクセスポイントに接続する場合などに、非常に不便なので、「ヴァルヘルIPコンフィグ」 - http://www.valsoft.jp/delphi/vipconfighp.html 等の設定スイッチ・ユーティリティを使用することをお勧めします。
SOCKSトンネルの作成
次にPuttyでiPhoneにアクセスしてSOCKSトンネルを作ります。

あまり知られていないのかもしれませんが、Putty(もしくはOpenSSH)には、SSHアクセスの他に、特定のポートのフォーワーディングや、SOCKSによるダイナミックなフォーワーディング(トンネリング)を作ることができます。今回はこの機能を使って、Windows上にSOCKSポート(localhost:1080)を作って、iPhone上までトンネルを作ります。

まずPuttyを立ち上げて、iPhone Wifiルーター用の設定を作ります。
「ホスト名(または IPアドレス)」に「10.0.0.1」を入れます。
「カテゴリ」から「接続」を選び、「keep aliveの間隔(秒、0でオフ)」を2秒程度に設定します。
「カテゴリ」から「接続」->「SSH」->「トンネル」を選びます。
「源ポート」に「1080」を、「送り先」に「localhost」、その下のラジオボタンを「ダイナミック」にします。
そこで「追加」ボタンを押します。(すると上のリストに「AD1080」と表示される)
また、最初の所へ戻るために、「カテゴリ」から「セッション」を選ぶ。
「保存されたセッション」の所へ適当な名前を付けて保存を押す。(「iPhoneAdhoc」など)
これでトンネル設定、終了です。

iPhoneにWifi接続後、Puttyでこの設定を読み込んで「開く」をすれば、SSH接続のウインドウが表示され、それと同時にSOCKSトンネルが確立されます。(閉じる時には、SSHのウインドウに「exit」と入れれば閉じます。)

メモ:この設定の途中で「keep aliveの間隔」を数秒に設定していますが、これをしないとWiFi接続がすぐに切れてしまいました。それの対策として設定しています。(ここがまた、はまった所だったのでした、、、)
SOCKS用のユーティリティFreeCap を設定する。
この状態でSOCKSトンネルが動いているので、一応、SOCKS対応のIEやFirefoxの設定でこれを指定してあげれば、接続できるのですが、DNSがSOCKSに対応していないため名前が引けないのと、毎回SOCKSの設定するのが面倒なので、ここは登録したアプリケーションのすべてのアクセスを強制的にSOCKS経由にするFreeCapと言うユーティリティを使うことにします。( http://www.freecap.ru/eng/ )

FreeCapを立ち上げて「File」メニューから「Settings」を選びます。
「Default Proxy」の「Server」に「localhost」を、「Port」に「1080」を入れて「OK」を押します。
「File」メニューから「New Application」を選びます。
アプリケーションの設定画面が出るので「Browse...」を押してSOCKS上で使うアプリケーションを選びます。
すると、必要な情報が入るので問題なさそうなら「Ok」を押します。
メイン画面に設定したアプリケーションが現れるので、それをダブルクリックするとSOCKS対応状態でアプリケーションが開きます。

ふう、大変長い設定でしたが、これで、iPhoneをWifiルーターとして使えるようになります。