2011年11月30日水曜日

三角関数と微分積分

前に読んだ OpenCL のサンプルでフーリエ変換が出てきたのでもう少し詳しく知ろうと、
Excelで学ぶフーリエ変換−Excel 2010対応版−
を最近読み始めたのだが、基本知識がなさすぎて最初の時点でつまづいた。
当然、全てが理解できるとは思っていないが、フリーエ変換のの字も出る前の基本知識の説明の時点でつまづいたら先に進みようがないため調べることに。

でてきた式が

ふむふむ、なるほど、なんで?って感じ。

三角関数は、
  • しんこうこうしん
  • ここマイナスしんしん
  • しんたすしんはにしんこう
  • こうたすこうはにこしん
なんて覚えた記憶がある。でどうやって使うの?
公式の導き方も知ってたような記憶があったが、知ってたかもという記憶だけ・・・

まずは三角関数からかと、ググッて勉強。先は長い。Wikipedia に色々公式が載っていた。
まずは、ピタゴラスの定理より

この時点で悩むことになるが・・・
半径 1 の単円で角度 X の場合、x = cosX, y = sinX となり、直角三角形の斜辺の 2 乗は各辺の 2 乗の和になることから上記、式になるようだ。

次は、加法定理。
しんこうこうしん、ここマイナスしんしんは加法定理のようだ。
左辺を覚えてないと意味がなかった。
加法定理の導き方は Wikipedia に載っていた。
A(cos(-α), sin(-α)) B(cosβ, sinβ) の線分の長さから求めるものしか分からなかったが。
線分 AB の長さの 2 乗は、

途中が省かれてて、最初見たときは?だったが、
上記ピタゴラスの定理により、2 に変換されている。
また、sin(-X) = -sinX, cos(-X) = conX による変換も行われる。

次に、+α分回転させた、A'(cos(-α + α), sin(-α + α)) = (1, 0), B'(cos(β + α), sin(β + α)) を考える。
線分 A'B' の長さの 2 乗は、回転させるまえの線分 AB の長さの 2 乗に一致することにより求めるようだ。

さらに、加法定理より積和公式を求める。
  • しんたすしんはにしんこう
  • こうたすこうはにこしん
は、積和公式の変形の和積公式のようだ。
 cos の加法定理、

の2つの式を足して、

が積和公式の一つ。

ここで、α = x, β = x とすると、

となりようやく本題の式に代入可能な形になった。


1/2 は外に出せるはず。で積分だが、+1 の積分は、+x となるのはいいが、問題は cos2x の部分。
cos x であれば、sin x なわけだが・・・
で調べてみると、合成関数の積分なるものを使うっぽい。
t = 2x として、cos t とする。これを t で積分すると sin t。ただこれは t の積分なので
x でやるためには、 t を微分したものを用意して、

で割ってやると

となり、

やっと繋がった・・・
すごい遠回りをしてる気もする。意外とあっさり変換できたりして・・・

2011年11月22日火曜日

ASUS UX31E-RY128 の感想

しばらく使用してみて、(というかほとんど使用していないが・・・)気づいたこと。

タッチパッド
タッチパッドの反応が悪い時がある。いくら触っても反応しない。 いきなり不具合!?または微妙な仕様!?
かとあせったがとりあえずマニュアルを見たところ、キーボード操作中はタッチパッドの反応領域が狭くなるらしい。
つまり、キーボード操作直後は、反応領域が狭いため、一定の部分からタッチしないと反応しない。
 
「コントロールパネル」の「マウス」より設定をみたところ、範囲のサイズと中心点を設定できるようだ。
キーボード入力中にパッドに触るとクリック扱いとなって、別ウィンドウがアクティブになったりしていたので範囲を小さくした。これは便利だ!
ノートパソコンに慣れていないので最近では当然の機能なのかもしれないが・・・

また、タッチパッドの下に、左クリック、右クリック用のボタンが 2 つあるが、これを使わずともタッチパッドのジェスチャーで右クリックやドラッグ、スクロール、ズーム等の処理ができる。タッチパネルの影響なんだろうか。

キーボード
キーボードの操作感だが、普段メカニカルな感じが好きなため、ノートのキーボードはあまり好きではないが、ノートにしては結構クリック感があるほうだと思う。悪くないかと。

重量
持ち歩いた感じ、やはり本などと一緒に持ち運ぶと重い・・・クッション入りのバッグも欲しいが、それだけで 1kg とかするので迷い中。壊れては意味がないがデフォルトのケースはあるので。
電車で座れずに立ったままブラウジング等もやってみたが、立ちながらやるには大きい。腕も疲れる。
さすがにタブレットのようにはいかなかった。座れる場合は問題ないが。

解像度
解像度は結構満足できるレベル。ブラウジングやちょっとした入力なら何の問題もない。
この記事もノートでやっているがいい感じ。


現時点では、こんなもんか。もうちょっと使ってみれば色々でるかもしれないが。


ノートより通勤途中の地下鉄で WiMax が繋がらないのが痛い。駅停車時ぐらい繋がるのかと思ってたのが甘かった・・・

2011年11月14日月曜日

Jericho HTML で一部サイトが文字化け

前回のソースで一部サイトが文字化けを起こした。

Souce のコンストラクタに URLを渡した場合は、ヘッダー情報の Content-Type の charset からエンコードが取得できるかもだが(Jericho が取得しているかは未調査)、BODY 部分のストリームを渡す場合、取得出来ないため内容から自動判別すようで、そこがおかしくなっているようだった。
なので指定してやることに、
HttpClient http = new DefaultHttpClient();
HttpResponse res = http.execute(new HttpGet(URI.create("http://www.example.com")));
if (res.getStatusLine().getStatusCode() != HttpStatus.SC_OK)
{
  LOG.error("Failed to load uri.");
  return false;
}    

InputStream in = res.getEntity().getContent();
if (res.getHeaders("Content-Encoding").length > 0 &&
  "gzip".equals(res.getHeaders("Content-Encoding")[0].getValue()))
  in = new GZIPInputStream(in);

String charset = EntityUtils.getContentCharSet(res.getEntity());

Source source = null;
if (charset != null) source = new Source(new InputStreamReader(in, charset));
else source = new Source(in);
14 行目で Content-Type の charset からエンコードを取得して、指定があれば、17 行明で明示的に指定してやることに。直接渡しているので、Shift_JIS 等で部分的に文字化けがおきそうだがとりあえず。

Source(final Reader reader) の実装が、
this(reader,(reader instanceof InputStreamReader) ? ((InputStreamReader)reader).getEncoding() : null);
となっていて、instanceof が気に入らない。Source(final Reader reader, final String encoding) が public だといいのだが。

Content-Type の charset がなければ今まで通り自動判別。

もっとスマートにいかないものか・・・

2011年11月11日金曜日

Shell から rsync

しょうもないことで嵌まったこと。

rsync を実行してバックアップする Shell ファイルを作成中のこと。exlude で除外ファイルを指定したかったわけだが・・・
CMD="rsync -avz"
echo CMD "--exclude='*.pid'" src1 dest1
echo CMD"--exclude='*.lock" src2 dest2
上記の様に普段は、まずコマンドの前に echo をつけてコマンド、引数の確認後、出力されたコマンドをコピペして実行し動作確認を取った後 echo を外して Shell の確認って手順で作成することが多い。
今回、コピペでやると --exclude で指定しているファイルが除外されるが、Shell ファイルを実行すると除外されなかった。

原因は、--exclude オプションがクウォートで囲まれてコマンドに渡されているためで、当然なわけだが、echo で出力されると文字列が展開されてクウォートが表示されない。

実際は他にもオプションや変数を渡してたりして、気づくのに結構かかってしまった。

2011年11月9日水曜日

Scala の勉強(インストール)

前にちょっと調べた程度で終わっていた Scala を勉強しなおそうかと思う今日この頃。
はっきり言って全然覚えてないので初歩からスタートすることに。

まずは環境を作るところからか。(いつものように Cygwin 上でやってみる)
  1. http://www.scala-lang.org/ の Download Scala より Windows の最新版 scala-2.9.1.final.zip をダウンロード。
  2. インストール場所へ展開。
  3. 環境変数 SCALA_HOME と PATH を設定。
とりあえずこんな感じか。

emacs 用に scala-mode も付属している。さらに ENSIME なるものもあるようなので入れてみる。
  1. ${SCALA_HOME}/misc/scala-tool-support/emacs へ移動。
  2. make ELISP_COMMAND=emacs のパス
  3. https://github.com/aemoncannon/ensime/downloads より ENSIME をダウンロード。
  4. インストール場所へ展開。
  5. .emacs あたりに設定。(yasnippet も使用)
    (when (require 'scala-mode-auto nil t)
      (add-hook 'scala-mode-hook
                '(lambda ()
                   (yas/minor-mode-on)))
      (when (require 'ensime nil t)
     (add-hook 'scala-mode-hook 'ensime-scala-mode-hook))
      )
    
eclipse プラグインも入れておきたいがこれはそのうち。

参考にするサイトとして、
あたりを調べつつやっていこうかと。
は初心者向けらしい。英語なんで少しずつだがここからやってみるか。

2011年11月3日木曜日

ノート PC 購入

やっぱりノート PC を購入。
ネットブックを買うならタブレットでもいいかと思ったが、もう少しディスプレイ等のスペックも欲しかったので、ウルトラブックなるレベルのものにしたいと。
Mac Book Air で Mac デビューするのもありかと思ったけど、結局調べてた ASUS UX31E-RY128 を買ってしまった。
とりあえず触ってみてから決めようと、発売日の今日秋葉原に行ってきた。Sofmap で展示されているのを見つけとりあえず触って見ることに。韓国版(?)が展示されていて、キーボードが違っていた。英語キーボードが良かったが、発売されているのは日本語キーボードだけだということ。
タブレットに比べるとさすがに重さは感じるが、持ち運びは楽そうな感じだった。SSD256GB 版は発売がまだだった。まぁ 128GB もあれば十分かなと。

Sofmap ヨドバシ と見て、最終的にヤマダ電機で購入。
他の店より 3000円ほど安く、WiMAX の 1 年契約でさらに 5000円引きと。WiMAX の割引はヨドバシもやってそうだったが。
カード払いだとポイント 8% になるということで、悩んでたら 10% にしてくれるということで購入することにした。

 ケースがデフォルトで付いてるのが良い。

こちらは WiMAX ルータ。
部屋での電波は怪しいかなと思ったが、電波 は 2 本立った。
家には無線ルータもスイッチもないので直接ネットに繋がるのはいいかも。

2011年11月2日水曜日

Jericho HTML で Content-Encoding が gzip なサイトのパース

Jericho HTML でパースできないサイトがあるようで、調べてみると、Content-Encoding が gzip になっていた。
元ソース。
Source source = new Source(new URL("http://www.example.com"));

Accept-Encoding からはずせばいいのかもしれないが、HttpClient も使用しているため、そちらで対応することに。
HttpClient http = new DefaultHttpClient();
HttpResponse res = http.execute(new HttpGet(URI.create("http://www.example.com")));
if (res.getStatusLine().getStatusCode() != HttpStatus.SC_OK)
{
  LOG.error("Failed to load uri.");
  return false;
}    

InputStream in = res.getEntity().getContent();
if (res.getHeaders("Content-Encoding").length > 0 &&
  "gzip".equals(res.getHeaders("Content-Encoding")[0].getValue()))
  in = new GZIPInputStream(in);
Source source = new Source(in);
Jericho HTML だけで対処出来る方法があればいいのだが。
compress, deflate は未対応・・・

文字化けしたので、続き