一瞬で今いるフォルダでcmd.exeを開く

Windows XPを使用していると、とにかく開いているフォルダでcmd.exeを起動したい、となることは多いです。

よくあるのは右クリックから開く、というやつ。まぁ当然、キーボード派の私にはありえない選択です。

んで、昔からCのプログラムとWSHをくみあわせてキーボードから開けるようにしていたのですが、やっぱWSHが絡むので遅い。

というわけでCだけで作ってみました。せっかくなのでおいておきます。

ダウンロード

explorexe.zip

使い方

解凍してできたexplorexe.exeのショートカットをデスクトップにつくります。

んで、ショートカットを右クリックして、

  • 「リンク先」でcmd.exe /k cd /d %sを後ろに追加します。
    • 例:C:\Documents and Settings\yourname\デスクトップ\explorexe.exe cmd.exe /k cd /d %s
  • 「ショートカットキー」を適当に設定します。
    • 例:Ctrl + Alt + C

これでOK。あとはエクスプローラを表示して、Ctrl + Alt + Cを押せばそのエクスプローラに表示されているフォルダをカレントにしてcmd.exeが開きます。

あとは、コマンドライン型ランチャーなんかに同様に登録するとめっさ快適です。

応用?

えー、見てのとおり引数の文字列にprintfしているだけなので、cmd.exe以外にも使えます。%sにあたるカレントフォルダのパスは空白が含まれている場合は自動的に「"」で囲まれます。

06.28.09/08pm

Python版Yahooテキスト解析 APIライブラリをキーフレーズ抽出に対応させました

しました。

ダウンロード

yahooapi

使い方

python code
  1. import yahooapi.jlp
  2. client = yahooapi.jlp.KeyphraseServiceAPI("apikey")
  3. result_obj = client.extract(sentence=u"東京ミッドタウンから青山一丁目駅まで歩いて15分かかります")
  4. for result in result_obj.Result:
  5.   print result.Keyphrase
  6.  
  7. # => 東京ミッドタウン
  8. # => 青山一丁目駅
  9. # => 15分
  10.  

うむ。

06.04.09/06pm

Python: 勉強がてらDHT(Kademliaっぽいもの)を実装しました

前々から一度じっくり勉強しないとなぁと思っていたDHTまわりの勉強がてらKademliaっぽいものをPythonで実装してみました。

Kademliaはいろいろ実装があるので、ソースを読んじゃうと答えみちゃった感じになるかなーと思って、元論文と首藤様の資料くらいしか見ずに実装してみました。ので、いろいろ間違ってるかも知れませんが・・・。

本家Kademliaとの主な違いは

  • UDPではなくTCPを使っている
    • ローカル環境しかもっていないので、UDPパケットがロスしやすい場合(WAN)を想定して実装するのがめんどくさい。
    • よってRPC-IDをつけていない。
    • パケットの分割や再送もTCPにおまかせ。
  • original publisherから一定時間publishを受けなくてもインデックス情報をexpireしていない
    • 実装するのは簡単です。
  • ノードがネットワークに参加したとき、Index情報を移動させていません
    • これも実装は簡単です。

ダウンロード

適当なのですが、置いておけば誰かの役に立つこともなきにしもあらず、かもしれないので置いておきます。jsonつかっているので2.6以上で動きます。

実装について

以前Chordもちょっと実装したことがあるのですが、やっぱりいろんなソフトで採用されているだけあって、Kademliaはかなり実装が楽ですね。論文読んで素直に実装すれば動きます。

えーと、内部についてはmultiprocessing使えよとか、TCPサーバを自前で書くって標準ライブラリにあるだろ、とか、twisted,eventlet使えよとか、スレッド周り適当じゃね?とかまぁいろいろあるんですが分かりやすさ重視ということで。

通信にはjsonを使いました。

基本的な動かし方

python code
  1. import kademlia_tcp
  2. kademlia_tcp.DEBUG = True
  3. n = kademlia_tcp.KademliaNode("ip address", port)
  4. n.join(n)
  5. remote = kademlia_tcp.ContactNode("ip address", port)
  6. n.join(remote)
  7.  

という感じでネットワークを作れます。DEBUGをセットすると、通信情報など、様々な情報が出力されます。あとは

python code
  1. key = n.hash("key")
  2. n.publish(key, "value")
  3. n.find_value(key)
  4. n.ping(other_node)
  5. n.store(other_node, key, value)
  6. n.find_node(other_node)
  7.  

というようなメソッドが使えます。

動かしてみて

ローカル環境でですが、100ノードほどで動かしてみました。元論文以外には特にchurnの対策はしてないのですが、そこそこ耐性があるんですね。3スレッド、0.1秒間隔で参加と脱退を繰り返したのですがちゃんとpublishしたものが取得できました。もうちょっとchurn対策をすればかなり使えそうだな、と感じました。

ルート探索は今回はTCPなのですが、そもそもKademliaは反復的探索なのでこの部分はやはりUDPにしてしかるべき、だなとも思いました。現実的にはルート探索などではUDPを使って、FIND_VALUE(値の取得)ではTCPにするなどの併用が一番現実的っぽいかなあ、とも感じました。

というわけで

P2P実装楽しいですね。実際のマシンで実験できる環境があればもっと楽しいんでしょうけど。

04.23.09/07pm

About

Author:yuin(http://inforno.net/)

文学部文化学科卒という生粋の文系趣味プログラマ。

主にRuby、Javascript、PHP、JAVA,Python,C,Scala,Schemeなどを使っています。今はPythonな感じかもしれない。今後作曲活動なども復活するかもしれない。

Pages