JavaScriptのthisを学習

javascriptのthisについて、こちらのページを読んで、やっとこさ分かってきた。
JavaScript の this について – IT戦記

こんなオブジェクトを作る。
var foo = {
prop : "hello",
func : function(){
alert(this.prop);
}
};
foo.func(); //helloと表示

ここまでは問題ない。thisがfooオブジェクトをあらわすから。
ここで、関数オブジェクトだけを取り出す。
var myfunc = foo.func;

でこの関数オブジェクトを実行してみる。
myfunc(); //undefined

“undefined”と表示される。
thisがなにを表すかというと、関数オブジェクトmyfuncを保持したオブジェクト。
ブラウザから実行したのであれば、windowオブジェクトになる。windowオブジェクトにpropというプロパティは
定義されていないからundefined。

新たにbarというオブジェクトを作って、
var bar = {};

barfuncプロパティに関数オブジェクトを設定する
bar.barfunc = foo.func;

propも定義。
bar.prop = "world";

で関数barfuncを実行。
bar.barfunc(); //world

“world”と表示される。
X.func()を実行した時に、func()内におけるthisは、Xを表す。
funcの実装コードがどこに書いてあろうと関係ない。という考えでいいかな。拙い図解。
this1.jpg
this2.jpg

firefoxの拡張を作っているのだが、addEventListenerに登録したfunctionからだとなぜか動作しない処理があった。原因は、addEventListenerで関数オブジェクトを登録したが、その関数オブジェクトを保持するオブジェクトが、functionの実装コードを書いたオブジェクトじゃあなくなっているからだったのだ。


IBM Symphonyを使ってみた

StarSuiteの記事に対して、うっちゃんさんから情報を頂きました。ありがとうございます。

IBM Symphonyは選択肢には入りませんか?
まだbeta4みたいですが・・・

さっそく試してみました。
ダウンロード・インストールは、IBMのダウンロード用アカウント(無料)が必要になります。英語ページなので慣れていない人にはわかりにくいダウンロードだと思います。ファイルのダウンロードもブラウザの機能ではなく、Javaアプレットを使用した独自ダウンロードツールを使ってダウンロードします。
ibm-symphony.png

なんと英語しかないと思いきや、日本語の言語ファイルも存在していて日本語化できそうです。
あっさりインストール完了。
ibm-symphony2.png
IBM Symphonyの最大の特徴はタブブラウザのように動作することです。デザインも凝っていてStarSuiteよりもかっこいい。右側のサイドバーに書式情報なんかが表示されるのは、Office2007のリボンを彷彿させます。
PDFへのエクスポートもできます。見出し→しおり機能もついています。意外と使える。
シンプルでかっこいいデザインなんだけど、MS Officeに似てないので機能を使うのはちょっと戸惑います。

インストールされたファイルを調べてみるとEclipseが入っています。EclipseのRCP(Rich Client Platform)で実装されているようです。内部にJREも同梱されているのですが、Javaアプリケーションとはまったく気づかないです。RCPってここまでできると関心しました。Office機能のベースはOpen Officeを使用しているようです。
Open OfficeベースのOfficeソフトは、派生が増えて全部がバラバラに成長しちゃったりしないのだろうか?


「プログラマー現役続行」を読んだ

週末勉強企画。(最近開発者から遠ざかった記事ばかり書いていたなぁ。)
プログラマー現役続行
嫌々管理職を担当する前に。
開発者としての道筋を示しています
この本いいですわ。
開発者としてあるべき姿の道しるべをしめしてくれます。年を取ったエンジニアが職を失わないための方法では決してないです。若い新入社員のような開発者こそ読むべき本だと思います。(たとえ将来プログラマーから別の役割を担うようになるとしても、重要なスキルになると思います)

私がこの本を読んで考えをあらためたのは、技術の習得において、業務で生すことを意識しすぎていたことです。
業務の中で学習することは非常に効率的ですが狭い範囲の技術しか習得できません。また即戦力的な知識が重要視されてしまいます。関係が無いと思われたスキルであっても学習して得た知識は無駄にはなりません。直接ではなくとも将来的にその知識はきっと役に立つのだと思います。「業務に関係なくともスキルアップしていけばいいんだ」と考えると気が楽になった気がします。
これからの私は次のようなことを実践していこうと思います。

  • 業務への関連性を気にせずどんどん学習しよう
    →仕事にどう生かせるかを気にしていたら、狭い知識しか得られない。自分が興味をもった技術を貪欲に学習するようにしたい。
  • 朝の学習を実践してみよう
    →実は何度もチャレンジしているが失敗している。朝早く起きて家で学習するだけではなく、早く出社して会社でとか、スターバックスでコーヒー飲んで本を読むなんて充実しているなあ
  • 社外での評価を求めて活動しよう
    →日本におけるソフトウェア業界は、プログラマ→安くて若い人。マネージャー→高くて偉い人。という認識が多い。そんな中で自分が活躍していくためには、会社内における相対的評価だけではなく、社外における絶対的な評価を求めるようにしたい。
  • 会社に頼らず、時間とお金を自分自身に投資して、継続的に学習しよう
    →一般的に言われることだが自己投資しよう。業務と関連のない学習ができるのも自己投資。
  • 英語を学習して、英語技術書を読むようにしよう
    →英語が読めないのは、技術の習得にとって大きなハンデだ。日本語に訳されるのを待つよりも英語を読めたほうが有利。「書く」「話す」よりも「読む」「聞く」を優先して学習する。「話す」「書く」ができるようになるのは相当の時間が必要。iknowとESLを継続しよう!
  • コンピュータの原理原則を理解しよう
    →高水準言語の世界だけではなく、コンパイラ、OSや、CPUについての知識も必要だと改めて思った。RuntimeErrorが発生してそこで終わる人と、そこからさらに調べられる人との違い