[ruby] open-uri でプロキシ認証

認証プロキシ下のコンピュータから ruby の open-uri を使うためのメモです。

ネットで検索したら open-uri.rb にパッチをあてる、みたいなハックが何件かヒットしましたが、ソースコードを読んでみたところ、少なくともバージョン 1.9.2 ではライブラリを書き換えることなく、以下のように対処可能です。

require "open-uri"

pxy = "http://my.proxy.com:8080"
usr = "proxyuser"
pss = "proxypass"

options = { :proxy_http_basic_authentication => [pxy,usr,pss] }
uri = "http://www.google.com/"

open(uri,options){ |io|
  # do something with io
}

proxy_http_basic_authentication というオプションに3つの要素(プロキシサーバーアドレス+ポート、ユーザ名、パスワード)を与えれば認証プロキシを乗り越えることができます。

おまけ

スクリプトにパスワードを直接書くことに抵抗ある人は例えば以下のようにすれば、スクリプトの実行毎にプロンプトに入力することができます。

require 'highline'  # なければ gem でインストールしましょう。

usr = HighLine.new.ask('Proxy ID: ')
pss = HighLine.new.ask('Proxy Password: ') { |q| q.echo = '*' }

highline を使うとパスワードをターミナルから入力する際に、画面に表示させずに * (アスタリスク)を表示させることができます。gem でインストール可能です。

[c++11] ネストしたクラスでの decltype

c++11 の decltype について。入れ子クラスの場合のちょっとした問題。下のサンプルコードの一番最後の行でコンパイルエラーが出る。

struct Outer {
  int x;
  struct Inner {
    int y;
  };
};


int main(){
  Outer outer;  // OK
  Outer::Inner inner;  // OK

  decltype(outer) outer2;  // Valid for c++11
  decltype(inner) inner2;  // Valid for c++11

  decltype(outer)::Inner inner3; // Error!!!!
}

コンパイル。

$ g++ decltype_test.cpp --std=c++0x
decltype_test.cpp: In function ‘int main()’:
decltype_test.cpp:16: error: expected initializer before ‘inner3’

decltype(outer) は Outer と展開されるので decltype(outer)::Inner は Outer::Inner と展開されて欲しいところだけど、できないみたいですね。g++ のバージョンは 4.4.3 と 4.5.2 でためしてみました。

ほとんどのケースでは auto を併用すれば問題は解決するのだけど、たまに困ります。これは仕様なのか、未実装なのかはわかりませんが。

文献管理アプリについてのメモ

ここ数日間、肥大したコンピュータ内部の文献管理について少し調査&トライアルしてみました。

とりあえず Mendeley と zotero standalone を使ってみた。できるとよさげなことたち。

  • タグによる管理
  • 全文検索
  • 軽快な動作
  • 電子ブックリーダーのサポート
  • bibtex の書き出し
  • 論文サイト(Web of science など)と連携

“文献管理アプリについてのメモ”の続きを読む

証明に使えそうな不等式の大全集

結構な数の不等式が書いてあります。ほとんどに名前が付いているので有名なものばかりのはずなんだけど、四分の一くらいしか知らなかった。たくさん覚えておくと何かいいことがあるかもしれません :-)

いくつかのものはもっと一般的な形が存在したり、積分形にしてもOKだったりします。たとえば、コーシー・シュワルツ不等式なら、もっと一般的に内積空間に対して

\begin{align*}|\langle x,y\rangle|^2\le\langle x,x\rangle\langle y,y\rangle\end{align*}

が成り立ちます。Jensen 不等式なら

\begin{align*}\varphi\bigg(\int f(x)p(x)dx\bigg)\le\int \varphi(f(x))p(x)dx\end{align*}

だし、ほかにもヘルダー不等式、ミンコフスキー不等式も積分形にできます(もちろん関数空間はきちんと設定しないといけないけれども)。

binomial sum 不等式の積分形は成立するのでしょうか?

\begin{align*}???\qquad \int_0^d\frac{\Gamma(n+1)}{\Gamma(n-x+1)\Gamma(x+1)}dx\le n^d+1 \qquad???\end{align*}

いろいろ妄想してみると楽しいですね。

蛇足ですが、タイトルには「大全集」と書きましたが、個人的に知っている名前付き不等式でここに書いていないものありますね。たとえば、Gronwall 不等式、Sobolev 不等式とか。ほかにもたくさんあるかもしれません。

【追記】list of inequalities — wikipedia