不景気がオープンソースに拍車?

久しぶりの日記です。
こんな記事を見つけました。


「食品事業のトーホー、約1500台のPCのオフィスソフトをOpenOffice.orgに入れ替え」
http://www.itmedia.co.jp/enterprise/articles/0901/27/news050.html


経費削減のために有料ソフトを無償のフリーウェアに入れ替えるというのはなかなかいいアイディアかもしれません。
既に住友電工や官公庁の一部でも導入が始まっているとか。
この流れでオープンソースの世界がより盛り上がってくれれば個人的には嬉しいのですが…

PyhonとEmacs

今いろんな言語に触れてみようということで、Pythonを書いているのですが、Pythonはインデントによってブロック構造を定義します。
こんなふうに…

  • if文
def factorial(x):
   if x == 0
      return 1
   else:
      return x * factorial(x - 1)
  • for文
sum = 0
for i in range(1, 11):
  sum += i


なので、はじめそれを知ったとき、「書くのにだいぶ神経使いそうだな〜」と思ってました。
ところが、いつもどおりEmacsでコードを書き始めると、なんと、自動的にインデントしてくれるではないですか!!
以前からコマンド上でで書いたコードすぐ実行するのにEmacs使ってきましたが、あらためて使いやすいな〜と思いました。

「解決策」:Google Chromeが起動しない...

先日、Google Chromeがエラーで起動しないという事態が発生しましたが、一応解決策が見つかりました。どうやら、「Symantec Endpoint Protection」が導入された環境でインストールしてしまうとこの症状が起こるようです。何故かというと、Google Chromeに標準で入っているサンドボックス機能と衝突しているからみたいです。つまり、解決策として、Google Chromeを起動するときに使うショートカットのプロパティの「リンク先」を、

"C:\Documents and Settings\User\Local Settings
   \Application Data\Google\Chrome\Application\chrome.exe" --no-sandbox

のようにすると問題なく起動します。


では、そもそもこのサンドボックス機能とは何なのか?

調べてみると、仮想ブラウザを実現するための機能らしいです。具体的には、保護された領域内(つまり箱のこと)でプログラムを動作させることにより、その外部へ悪影響が及ぶのを防ぐというセキュリティモデルのことで、プログラムが暴走したり、外部からウイルスが侵入したりしても、「箱」の外にあるファイルシステムなどに影響を与えることはできない、ということです。


だとすると、この解決策はサンドボックス機能をOFFにしてしまうので、セキュリティ的にはあまりよろしくないかも…?

Google Chromeが起動しない...

Googleがブラウザを公開したということで、早速インストールしてみたのですが…


「アプリケーションを正しく初期化できませんでした(0xc0000005)。[OK]をクリックしてアプリケーションを終了してください。」


というエラーが出ていっこうに起動できません。
Googleトラブルシューティングを確認して、やれることはすべてやってみましたが、全くダメでした。
いろいろ調べてみてわかったこととしては、インストール環境下に「Symantec Endpoint Protection」がインストールされているとこのエラーが出るみたいです。
残念ながら今のところ解決策は見つかってません。Googleさんがパッチでも出してくれるのを待つしかなさそうです…。


Javascript ラッパーオブジェクト

JavaScriptの"型"というものは便利なようでややこしく…

var s = "Hello, My Name is Jack.";
var name = s.substring(s.lastIndexOf(" ")+1, s.length);


このようなコードを普段何気なく書いてましたが、よくよく考えるとsってstring型じゃ…?
なんでオブジェクトのメソッドやプロパティを呼び出すことができるのか?

調べてみると、JavaScriptでは基本データ型(数値、文字列、論理値)のラッパーとして、Number、String、Booleanというクラスが用意されているそうです。つまり、文字列のメソッドやプロパティにアクセスしようとすると、JavaScriptが内部的にStringラッパーオブジェクトを生成し、文字列の代わりにこのオブジェクトを使用します。もちろん他の型でも同様です。だから上のようなコードが実行できるわけですね。

ちなみに内部で生成されるオブジェクトは一時的なもので、メソッドやプロパティの呼び出しが終了すると、廃棄されてしまいます。なので、「どうしてもオブジェクトとして扱いたい!」という人は、

var s = new String("Hello, My Name is Jack.");


とするとOKです。要ははじめからオブジェクトとして宣言すればいいということです。

jQuery (1)

現在読んでいる本です。

jQuery in Action

jQuery in Action




jQueryで要素を参照するには、次のような方法があります。

/* body要素を参照する */
$(document.body).background("#eee");
/* classNameから要素を参照する */
$(".className").html("Hello, World !!");
/* IDから要素を参照する */
$("#objectID").html("This object's id is 'objectID'.");
/* 指定した階層条件を満たす要素を参照する */
$("div > p").html("This object is in DIV element.");


この他にもtagNameでも参照可能。css3.0と同じような感覚で要素にアクセスできるようになってるそうです。ちなみに自分が使用しているブラウザはFirefox3.0なんですが、既にcss3.0対応済みのようです。InternetExplorerはどうなんでしょうか…。

YouTubeの全画面表示が重い

YouTubeを全画面表示にすると表示が重くなってしまう症状について。
先月購入したDell XPS M1330(Vista)でYoutubeの全画面再生を行ったところ、何故か処理が追いつかず、ものっすごい重くなってしまいました。ちなみにグラフィックボードはnVIDIA Geforce 8400M GSなので性能的には申し分ないはず…。しかも再生するフラッシュもたいした解像度じゃないし…。

と、困って調べてみたところ、全く同じ症状で困っている人がいました。どうもAdobe Flash Player 9.0の機能である「ハードウェアアクセラレーションの有効化」というのが原因らしいことが判明。早速「設定」→「ハードウェアアクセラレーションを有効化」のチェックを外したところ、なんと、問題なくスムーズに再生できるようになりました。

ちなみにこの「ハードウェアアクセラレーションを有効化」というのは、再生をCPU(ソフト)ではなくGPU(ハード)に依存して行う、ということらしいです。でもそれだと後者の方がパフォーマンスがいいのでは??

何故このような現象が起こってしまうのかは今のところ不明です…。