2016年4月18日月曜日

google chrome canary Windows 64bit がうまく動かない?

google chrome canary  (Windows 10 64bit) をインストールしていたのですが、何時からか正しく起動しなくなりました。現在のバージョンは 52.0.2711.0 です。

起動はするんですがスタートページが表示出来ず、メニューから設定や他のページなどを選んでも表示されません。一度削除し、クリーンインストールしても状況は変わらず。

クリーンインストールして通常起動、正しく表示されないので右上×を押してブラウザを終了。そのあと --diagnostics をつけて起動すると……

[FAIL] Thumbnails database
       Cannot open DB. Possibly corrupted

これか?  と思ってプロファイルディレクトリ
C:\Users\win10user\AppData\Local\Google\Chrome SxS\User Data\Default
の中を見てみたら、 Thumbnails がファイルじゃなくてディレクトリになってる!?

Thumbnails ディレクトリを削除し、もう一度 --diagnostics をつけて起動すると

[PASS] Thumbnails database
       File not found (but that is OK)

あ、いいんだこれ……

でもこの状態で --diagnostics を外し、改めて起動すると、やっぱり画面が正しく表示されません。

ブラウザを終わらせて--diagnostics をつけて起動すると、やはり同じ Thumbnails database でFAIL が出るという。 

とりあえずおかしいところだけメモ。理由を調べる時間はない…


追記:
2~3日後に更新されて直りました。そして数ヶ月後、また同じようにおかしくなり、数日後に更新されて直りました。さすがcanary……

バグを回避して最小限の機能で起動し、オンライン更新して再起動をかける、というのが大事ですね。

2016年3月31日木曜日

Jigdo mini が 64bit Windows 10で動かない件

回答はここに書いてあるんですが

Download this archive and extract it in the jigdo-bin folder :
https://code.google.com/p/golangide/downloads/detail?name=msys-1.0.zip&

  http://atterer.org/jigdo/debian-jigdo-mini-howto#comment-3983

golangide自体がもう移動しているうえにファイルがどうも見つからないので……

https://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/

から最新のファイルを拾うのがよいと思います。具体的には

https://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/msys-1.0.18-1/

から msysCORE-1.0.18-1-msys-1.0.18-bin.tar.lzma をダウンロードして展開すると、binフォルダの下にお目当ての msys-1.0.dll がありますので、これを jigdo-bin の下に入れて置換してやるとよいでしょう。

2016年3月4日金曜日

MATLABで関数の積をplotする

MATLABで乗算を使うときは、* と .* の違いに充分注意しよう、特に 1変数関数を作るときに気をつけよう、という話。 

MATLABではforループを使わず、x軸として取り得る値を予め行列(ベクトル)化し、これを関数に与えてplotする、 というやり方をするわけですが、たとえば0以上1未満までをN点でplotしたい、なんてときは…

>> N=2^10; ts=1/N;
>> t=0:ts:1-ts;

(0から始まっているので、範囲の終わりで ts をひとつ引いておくとサンプル数や周期性の辻褄が合うよね、ってやつです。)

>> plot(sin(2*pi*10*t));

出来る。10Hzの正弦波を 0から1までplotしたものです。

>> plot(sin(2*pi*10*t)+sin(2*pi*20*t));

これも出来る。10Hzの正弦波と20Hzの正弦波を足しあわせた波形を0から1まで plot したものです。

じゃあ正弦波を掛け合わせた波形を plot するには? と思って + を * にすると…
>> plot(sin(2*pi*10*t)*sin(2*pi*20*t));
エラー:  * 
内部行列の次元は一致しなければなりません。

最初の2つ(特に加算)はうまく出来てるのに、何故*はうまくいかないんだろう……?
f(t) = sin(2*pi*10*t)*sin(2*pi*20*t);

実は、そもそも t が (1x1024) の行列なので、 初項の sin(2*pi*10*t) の結果が既に (1x1024) の行列になってるんです。 で、二項目の  sin(2*pi*20*t) もまた (1x1024) の行列になるものですから、 (1x1024)の行列 × (1x1024)の行列、を計算しようとしてエラーになるんですね。さすがMATLAB……

1変数関数をプロットするとき、すなわち y=f(t) を計算しようとしているときに想定している t はスカラー値なんですから、 行列が渡ってきたら行列の要素ごとに計算することにしておいたほうがいい、ということになります。

というわけで意図した通りになる書き方は、

f(t) = sin(2*pi*10.*t).*sin(2*pi*20.*t);

こうじゃよ、というお話でした。sin(2*pi*10*t)など単項の関数がそのままplot出来てしまえるだけに混乱しますね。


関数にパラメーターを与えるときも、そのパラメーターがスカラー値ならば同じような書き方をしておいたほうがいいようです。 例えばこんな感じ。もっと簡単な書き方はないものか…
function main

fs=2^10; ts=1/fs;
t=0:ts:1-ts;

plot(t,sinxsin(t, 2, 4));
hold on
plot(t,sin(2*pi*2.*t));
plot(t,sin(2*pi*4.*t));
hold off

end

function [ y ] = sinxsin( x, f1, f2 )
% sinxsin  return sin(2*pi*f1*x)*sin(2*pi*f1*x)
%   

y = sin(2*pi.*f1.*x).*sin(2*pi.*f2.*x);

end