AVG Free の凶悪なダイアログ

先日、AVG が不意にこのようなダイアログを出しました。凶悪な選択肢が並んでいます。

20130928124515

ツールバーをインストール? AVG Nation Search をホームページ、デフォルト検索エンジンに? そんなことを望む人がいるんでしょうか。

ただより高いものはない?

基本的には AVG Free を気に入ってはいるのです。軽いですし。

「無料のアンチウイルスソフトなんて使わないほうがいいよ」とアドバイスしてくれる人もいますが、考えを改めるつもりはありません。不思議でしょうがないのは、彼らが「無料のソフトは性能が低い」と頭から信じていることです。実際に検証したわけでもないのに。

アンチウイルスソフトの評価を行っているドイツの独立機関 AV-TEST によると、AVG Free のウイルス検出率は中の上くらいです。もちろん、このテストで上位だから絶対に安全というわけではありません。上位のものが検出できなかったウイルスを下位のものが検出する例も多々あります。

万一感染した場合の保証についても、無料のものが無保証なのは当然ですが、有料のソフトだって使用許諾契約書に小さな文字で「損害が発生しても一切保証しない」と書いてあるのが普通です。

恐らく AVG の戦略は、無料版を配布することによって一定のシェアを確保し、できるだけ多くの検体を得て検出率を上げることにあると思われます。その恩恵を真っ先に享受するのは有料版のユーザーであるにしても、無料版のパターンファイルもたいしたタイムラグもなしに毎日更新されるので、三方が丸く収まるというわけです。

このようなエコシステムの一部であることに満足していたのですが、それに冷水を浴びせかけたのが冒頭のダイアログです。

有料版を買え、買えと言われるのは我慢もしますが、ブラウザのホームページを変えろなどというのは余計なお世話も良いところです。

AVG に限らず、変なツールバーをインストールさせようとしたり、ブラウザの設定をいじろうとしたりするアプリがよくあります。はっきり言って非常に印象が悪く、逆効果です。よく分からずに入れてしまうのを期待しているのかも知れませんが、そういう人たちは今やスマホやタブレットに流れ、残っているPCユーザーは詳しい人が多いですからね。

LAN-HGW450/S 及び CV 導入

自宅にLAN-HGW450/SというWifiルータとLAN-HGW450/CVという無線コンバータを設置しました。




ルータの方は特に説明の必要はないと思います。無線コンバータというのは、Wifi の電波を受けて有線に変換し、各々の機器と繋ぐものです。有線LANにしか対応していない機器を無線化することができます。

従って、機器が無線LANに対応していれば本来必要ないものです。

ですが、我が家では PlayStation 3 を DLNA クライアントとして使っていて、この PS3、802.11 b/g にしか対応しておらず、たまに映像が乱れることがあったため、11 a/n に対応した LAN-HGW450/CV を導入したのです。ルータも替えたのは、ついでです。

802.11 a/n 対応

11n には2.4GHz 帯を使うものと、 5GHz 帯を使うものがあります。11a は 5GHz 帯のみなので、11 a/n と書いてあれば 11n の方も 5GHz 対応と見て間違いありません。逆に 11 b/g/n と書いてあれば、2.4GHz にしか対応していないという意味です。

2.4GHz 帯の混雑は有名で、ウチのご近所でも様々な SSID がひしめいています。一方、5GHz 帯はまだ新しいこともあり、また、チャンネル数も多いのでかなりすいています。

そういうわけで、11 a/n 対応の環境を構築してみました。

ちなみに、iPhone5 は 5GHz の 11n ですぐに繋がりました。が、Nexus7 は 2.4GHz の 11n でしか繋がりませんでした。実用上問題ありませんが、ちょっと残念ですね。

思わぬ不具合

いまどきの製品らしく、省電力機能もあります。

LAN-HGW450/S 省電力機能

30分刻みで週間スケジュールを組むことも出来るという凝ったものですが、この機能がウチの環境では不具合を招いてしまいました。

省電力モードになると有線LANを低速にするのは良いのですが、リンク速度が変わると CATV モデムが混乱するようで、WAN側の接続が失われてしまうのです。

そこで、有線LANは常時高速とし、ランプをオフにするに留めました。LEDランプの消費電力など本当に微々たるもので、節電には殆ど貢献しないでしょうけどね。

まあ、そこまで省電力にこだわる必要もないように思われます。消費電力は最大でも 15W ですから、24時間フル稼働で1ヶ月で10.8kWh、電気代は250円ほどです。実際にはそれよりずっと少ないでしょう。

論理性を欠くUI

最大の不満は論理性を欠く UI です。管理画面は下のような感じです。

LAN-HGW450/S 管理画面

良く使う機能を大きなボタンにしたかったのは分かりますが、あまり美しい配置とは言えません。

しかも、ボタンを押すと結局左側にサブメニューが現れるので、さして直感的に操作出来るわけでもありません。

ボタンでカテゴリ、例えば節電スケジュールを選び、設定し終えてから別のカテゴリを選ぶには右上の「ホーム」をクリックする必要があります。

ユーザーにそんなまだるっこしいことをさせるより、最初からボタンではなく左側のメニューで大きなカテゴリを選び、右側でサブメニューを選ぶようにすれば良かったのではないでしょうか。あるいは、展開可能なツリーメニューならなお良かったのですが。

ハードウェアは良い

このように、ソフトウェアには不満がありますが、ハードウェアのスペックは申し分ありません。理論上の最大スループットは450Mbps です。ただ、今のところ我が家では 270Mbps(リンク速度)でしか繋がりません。電波状況などに左右されるのでしょう。実効速度は計測していないので分かりませんが、少なくとも一般的な動画を見るには十分です。

型番から分かるように同一メーカー(Logitec)の同時期の製品ですから、条件さえ良ければ450Mbps で繋ぐことも可能なはずです。

Nexus7 を買った

Androidタブレット、Nexus 7 を買いました。

002.jpg

早速遊んでいる図です。ご覧のように持碁ですが、CPUは白の三目半勝ちと判定しました。九路盤ではコミ三目半でやるのが普通なのでしょうかね。あまりやったことないのでよく分かりません。

それはさておき、Nexus 7、期待通り動作はかなりキビキビしています。他のタブレットをいじったことがないので比較できませんが、スペック的にはそれなりのようです。

ただ、やはりというか、UIに若干荒削りなところがあります。例えば、青空文庫の蔵書が読めますが、日本語が必ず横書きになってしまって、どう頑張っても縦書きにできません。どうにかすると出来るのかも知れませんが……。

また、音声認識はなかなか高精度ですが、句読点の入力の仕方が分かりません。Googleのヘルプには、「くてん」「とうてん」「かんたんふ」などと発声することによって入力されるとありますが、実際に試すと「句点」「読点」「感嘆符」となってしまって、「。」「、」「!」にはなりません。
これも私の勘違い、もしくは簡単な設定でどうにかなるのかも知れませんが、今のところどうにもなっていません。

うむー。

気に入ったのは、DLNAクライアントとして使えることですね。手持ちの動画は全て問題なく再生できました。カクカクしたり止まったりといった不具合は全く起きません。

面白いのはカメラは前部に1つだけで、ビデオチャットなどに使うことは出来ますが、スナップ写真を撮るようにはなっていないことです。デフォルトではカメラアプリもありません。恐らく「このデバイスで写真撮りたがる人はいないだろう」ということで思い切って省略したのに違いなく、これは価格やサイズや重量を抑える意味で好ましい選択だと思います。

とりあえず、リビングでちょっとネットしたり動画見たりに重宝しそうです。

猫と杓子とパソコンと

EZTimeline(イージータイムライン)という Webサービスを作りました。

Twitter、Facebook、RSSを一つのタイムラインに表示できるほか、写真のアップロードなどにも対応しています。フォローしている人や購読しているRSSをタブで分類することもできます。タブは自由に作ったり消したりできるうえに並べ替えることもできます。

自分としてはかなりの自信作なのですが、泣き所もあります。

それは現在のところPCにしか対応していないということです。PCの利用は今後徐々に減っていき、タブレットやスマホに置き換えられるであろうことは多くの人が指摘しているところです。ましてや、TwitterにしてもFacebookにしても、現在既にスマホからの利用がPCを上回っていると言われます。今更PC用のサービスを作るのはいささか先見の明を欠くのではないか、確かに私の頭にもそういう考えがよぎりました。

しかし、です。世の中の流れに敢えて逆らってみるのも一つのやり方です。少なくなったとはいえ、主にPCでネットをやってる人は世界中に何億人もいるわけです。外出中はスマホ、家に帰ったらPCという人も多く居ます。EZTimelineは全体をざっと眺めるのに適しているので、PC専用でもそれなりに使い道はある、と思っています。競合が少ない分有利とさえ言えるかもしれません。

PCはよく自動車に喩えられます。そして、皆が皆自動車を持つ必要はないのと同じように、たいていの人にはタブレットやスマホで十分である、というようなことが言われます。
一理ある考え方ですが、必ずしも必要でないとしても、やはり自動車を所有する意味は皆無ではありません。行動範囲が広がりますし、経済にも寄与します。大袈裟でなく、車によって視野が広がる、という側面があるのです。
もちろん、ネガティブな側面もあります。事故の危険、環境への負荷、などなど。その点、PCはそこまで危なくありませんし、車に比べるとエコです。

「皆が皆PCを持つ必要はない」式の議論でもう一つ気になるのが、「自分は十分に知的なのでPCを使いこなせるが、愚民どもはスマホで十分」という鼻持ちならないスノビズムです。
漫画「美味しんぼ」で、交通渋滞に立腹した海原雄山が「必要もない連中が車に乗るからだ! 馬鹿どもに車を与えるな!」とのたまうシーンがありますが、これに通じるところがあります。

PCを捨てて専らスマホを使うということは、常に情報の受け手に甘んじる、ということでもあります。なるほど、スマホでもブログの更新くらいはできるでしょうが、PCに比べると創造性を発揮しにくいことは間違いありません。
「今だってPCで創造性を発揮している人なんて殆ど居ない」という反論があるかもしれません。確かにその通りですが、スマホ一辺倒になってしまえば、ポテンシャルさえなくなります。

天然資源の乏しい我が国にとって、創造性は唯一無尽蔵の宝です。日本人にはAppleやGoogleより優れた製品・サービスを作れない、と誰が決めたのでしょう。決して無理ではないはずです。都合良く日本近海から石油が沸く可能性は殆どありませんが、日本のITベンチャーが世界を席巻する可能性は十分にあります。

そういう意味でも、軽々しく「もうPCなど必要ない」とは言わないで欲しいものです。

[JavaScript]二分探索のベンチマーク

今作っているWebサービスで、とりあえず仮の仕様ということで線形探索を多用していたのですが、リリースに向けて、可能な部分は二分探索を使うように改良しました。理屈の上から言えば、O(n) が O(log2n)になるわけで、当然速くなったものと考えて、実際には検証していませんでした。

ここ数日、少し余裕が出来たので、ちょっとベンチマークを取って見ました。それぞれ、100万回ループして、かかった時間を計っています。各ブラウザのバージョンは、Firefox 12.0、IE 9.0.8112.16421 64-bit Edition、Google Chrome 18.0.1025.168 m、Opera 11.62、OSは Windows7 64bit、マシンは i7-2600 です。

Array.prototype.binarySearch = function( val ){
	var low = 0;
	var high = this.length - 1;
	var middle;

	while( low <= high ){
		middle = ( low + high ) / 2 | 0;

		if( this[middle] == val )
			return middle;
		else if( val < this[middle] )
			high = middle - 1;
		else
			low = middle + 1;
	}
	return -1;
}

Array.prototype.linearSearch = function( val ){
	var length = this.length;
	for( var i = 0; i < length; i++ ){
		if( this[i] == val )
			return i;
	}
	return -1;
}

var array = new Array();
for( var i = 0; i < 100; i++ ){ array[i] = i; }

var start = new Date().getTime();

var result, r;

for( var i = 0; i < 1000000; i++ ){
	r = Math.random() * 100 | 0;
	result = array.linearSearch( r );
	//result = array.binarySearch( r );
}

var end = new Date().getTime();

alert( end - start  );

 要素数100

要素数100程度ではあまり変わらないという結果でした。
線形探索が遅いと言っても、平均すれば n / 2 で済むわけですから n が小さいうちはそれなりに速いですね。

search.png

と、言いますか、最近のPCは本当に速いので、100万回ループしてようやく数ミリから数十ミリ秒という誤差レベルの違いしか出ません。

そこで、今度は要素数1000でやってみました。

要素数1000

さすがに、今回は無視しがたい差が出ました。
ただ、問題のWebサービスでは個々の要素数が3桁を超えることはそうない(それ以上が必要な場合はデータベースを使う)と思われるので、ソートのコストも考えると線形探索で十分だったのかも知れません。
むしろ、パフォーマンスに最大の影響を与えるのはやはりDOM操作なので、そこの最適化に注力するのが賢明なようです。

モニタのキャリブレーション

モニタを買いました。三菱RDT233WLXです。ついこの間にもiiyamaの27インチを買ったばかりですが、そちらはテレビ用に回し、今までデスクトップでセカンダリモニタとして使っていた三菱RDT178Sを退役させて、プライマリだったBenQをセカンダリに、新しく買った三菱をプライマリにしました。

001.jpg

KVM で Mac と切り替えて使っています。

002.jpg

そして、散財ついでに i1Display 2 を導入しました。

003.jpg

センサーを設置しているところです。マウスをぶら下げて遊んでいるわけではありません(笑)

残念ながら、この製品、28,000円と安物のモニタが買えてしまう値段の割には、ドライバが未署名でWindows7で使えない、設定アプリの表示が時々おかしくなる、といった難点があります。

もっとも、WindowsXP や Mac が使える環境なら特に問題ありませんし、Windows7であっても、起動時にF8を押して「詳細ブートオプション」を表示し、「ドライバー署名の強制を無効にする」を選択することで、一応使えます。

気に入ったのは、素早く客観的で正確なモニタ調整ができることです。それこそが存在意義ですから当然と言えば当然ですけどね。

モニタを設定する際に試行錯誤で延々とやるくらいなら、こういった製品を使って時間の節約をするのも良いのではないかと思います。タイムイズマネーです。

スキルと才能、どっちが大事?

高名なプログラマ Joel Spolsky 氏は、経営する会社の面接試験に於いて、受験者に簡単なコードを書かせるそうです。その一つが「文字列をインプレイスで反転させる」というものです。
氏曰く、ほとんどの受験者が文字列のバッファをもう一つ割り当てて、そこに反転した文字を埋めていくのだそうです。しかし、それでは不合格です。インプレイスじゃないとダメなんです。
と、いうわけで、私も挑戦してみました。

int main () {
    char str[] = "the quick brown fox jumps over the lazy dog";
    int len = strlen( str );
    for( int i = 0; i < len/2; i++ ){
        str[len] = str[i];
        str[i] = str[len-i-1];
        str[len-i-1] = str[len];
    }
    str[len] = '\0';

    printf( "%s", str );

    return 0;
}

いかがでしょう。

実行結果は

god yzal eht revo spmuj xof nworb kciuq eht

となります。
とりあえずこれで正解のはずですが、もっとエレガントな書き方を思いつかれた方はぜひご教示ください。

印象深いのは、Spolsky 氏が「求めているのは才能に溢れた人物であり、特定のスキルを持った技術者ではない」と述べていることです。日本ではその特定のスキル、殊に資格が重視されるのと好対照ですね。
かつて日本企業のお偉いさん達は口をそろえて「我社の財産は人材です」と言っていたものです(そして、甲陽軍鑑を引用して「人は石垣、人は城!」と得意気に付け加えていたものです)。
それが今では「才能? そんなわけのわからんものより具体的なスキルだ」などとおっしゃる。人材派遣が流行るのも道理です。
その考えも分からないことはありません。即戦力はどこの現場でも欲しい。しかし、それだけではあまりに近視眼的と言わざるを得ません。

十分に賢く、物事を成し遂げるタイプの人を雇えば、どんなスキルであれすぐに身につけてくれる筈です。たまたま今特定のスキルを持っている人よりずっと頼もしいではありませんか。
将来を見据えて人材の採用、育成を行うことが、結局は企業が生き残るための一番の方法です。

JavaScript の undefined のナゾ

JavaScript では、ある識別子が未定義の場合、undefined という特殊な値を持ちます。
最近気づいた(遅い)のですが、引用符付きの “undefined” と、引用符無しの undefined では意味が異なるんですね。
まず、宣言前の識別子を undefined と比較しようとするとエラーになります。
ただし、typeof演算子を使って “undefined” という文字列と比較することはできます。

一方、宣言後は 引用符無しの undefined と、直接比較することが出来ます。

まとめると、次のような感じです。

//----------------宣言前-----------------------------------
alert( variable == undefined ); // -> エラー

alert( typeof variable == undefined ); // -> false
alert( typeof variable == "undefined" );  // -> true

var variable;  // 宣言する

//----------------宣言後-----------------------------------

alert( variable == undefined ); // -> true

variable = 0;  // 値を代入する

alert( variable == undefined ); // -> false

ややこしいですね~

【パッチ】Windows7でマウスホイールの効きが悪い場合

先日取り上げた、Windows7で一部のMS製マウスのホイールの効きが悪くなってしまう問題ですが、手っ取り早く直したいという方は次のプログラムをダウンロードして、実行してみてください。
もしこれで状況が改善するならば、スタートアップに入れるなどして毎回実行すると良いでしょう。

ダウンロード:fix_wheel.exe (411 KB)

これは、以下のAHKスクリプトを配布用にコンパイルしたものです。

#MaxHotkeysPerInterval 200
WheelDown::WheelDown
WheelUp::WheelUp

return

Windows7 でマウスホイールの効きが悪い場合

Windows7を使い始めて思ったのが、マウスホイールの効きが悪いことがある、ということです。スクロールが遅かったり、なにか引っかかるようだったり。

私の使っているマウスはMSのWireless Optical Mouse 5000で、調べてみると、どうやらこの機種を含めてMS製マウスのいくつかで同様の不具合が発生しています。

原因は、MS製のドライバ(IntelliPoint)がデルタの下限を120から引き下げたことのようです。この変更に対応していないソフトで、ホイールの効きが悪かったり、あるいは全く反応しなかったりするわけです。

いずれ、ドライバかソフトの側で対応されると思いますが、それまでの繋ぎとして、以下のような処置を施しました。

AutoHotKey スクリプト

GroupAdd, MousewheelHandler, ahk_class SomeClass ;ここにクラスを追加
GroupAdd, MousewheelHandler, ahk_class AnotherClass ;クラスはWindow Spyで調べる
#IfWinActive ahk_group MousewheelHandler
{
    #MaxHotkeysPerInterval 200
    WheelDown::WheelDown
    WheelUp::WheelUp
}
return

要するに、AutoHotKeyを通すことで、ホイールを動かしたときの命令を従来型に戻し、古いアプリにも理解できるようにしています。
これで、XPと同じ感じでスクロールするようになりました。
SomeClass等は、実際不具合が起きているソフトのクラス名を調べて書き換えてください。

CapsLockでIMEの切り替え

もう一つ、以前にも書きましたが、私は CapsLock キーで IME を切り替えています。
Mac環境ではKeyRemap4MacBookを、WinではMayuを使っていましたが、MayuはWindows7には未対応とのことで、この機会にこれもAutoHotKeyで書いてみました。二つもキーリマップユーティリティーを常駐させるのもなんですからね。

CapsLock::Send {Alt down}``{Alt up}
return

簡単そのものです。ただ、CapsLock を Alt + ` と入れ替えていることからおわかりの通り、これは英語キーボードの場合です。日本語キーボードだと、CapsLockの刻印のあるキーを押下しても、実際には「英数」という日本語環境独自のキーコードが送られ、実際にCapsLockするためにはShiftキーを押しながらでなければいけない、という事情がありますので、結構手こずるかも知れません。
尚、`(バッククォート)はAutoHotKeyでは特別なエスケープ文字なので、上のように二重にしなければなりません。

癖のある文法

AutoHotKey、非常に強力なのですが、噂通り文法には癖がありますね。
例えば、つい、

if condition {
    expression
}

のように書いてしまいがちですが、AutoHotKeyではこれは文法エラーなのだそうで、

if condition
{
    expression
}

と書かなければいけません。

関連記事:
【パッチ】Windows7でマウスホイールの効きが悪い場合