̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ IT ニュース&コラム 2012/8/20 通巻584号 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄                        News and Column  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    Android の WebViewクラスを使った多くのアプリに脆弱性 2012年 7月 16日、JVN(Japan Vulnerability Notes) は、Android向けの GREE製の7つのゲームに、悪意のあるサイトを見るだけで情報の漏洩などを してしまう脆弱性が見つかったと発表した。    Android は、セキュリティが弱いという噂が流れているが、    それを裏付けるように、過去には、iLunascape、Yahoo    ブラウザ、Sleipnir などの多くの Android 上で動く    アプリに、今回と同様の脆弱性が見つかっている。    今回の脆弱性は、Android の WebViewクラスを使うときに    注意しなければならない点をアプリが踏まえていなかった    ことが原因である。 それは、WebView#addJavascriptInterface    を使って、HTML ファイルの中の Java Script から、アプリが    作成した Java のクラスのメソッドを呼び出せるようにした    とき、何も注意しないで普通に作成したら、Java Script から、    メールを発信したり、個人情報にアクセスする Java の機能を    呼び出るようになってしまうことらしい。 Android を提供している Google にとっては、注意点を踏まえていなかったことが 悪いと主張するだろう。 デフォルトでは、addJavascriptInterface を使わなければ、 そのような脆弱性は発生しないのだから。 しかし、多くのアプリに脆弱性が見つかってしまうのは、addJavascriptInterface を使うことがよくあるのに、それを使うだけで、セキュリティが甘くなってしまう ことが原因だろう。 addJavascriptInterface を使っても、もう1段階の設定を しなければ、メールを発信したり、個人情報にアクセスできないようにするような、 API の体系にしなければならない。 それゆえ、Android はセキュリティが弱いといわれる要因だろう。 1つの対策や 実績のある古い技術だけで十分と思ってしまう、驕った技術者が Google に多いの かも知れない。 参考リンク: http://jvndb.jvn.jp/ja/contents/2012/JVNDB-2012-000077.html http://codezine.jp/article/detail/6618 * The others Last week watched News  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ◇ Windows 8 のRTMダウンロード提供開始。90日有効な評価版も。 http://www.itmedia.co.jp/news/articles/1208/16/news020.html … スタート画面に飾りがついて、少し豪華に。 ◇ インテルが2013年からノートPCやスマートフォンにワイヤレス充電技術を搭載か。 http://gigazine.net/news/20120814-intel-wireless-charging-techlonogy/ … PCに近づけると、ケータイを充電できるように。 ◇ アマゾン、Chromeの拡張機能 Send to Kindle for Google Chrome を公開。 http://www.asahi.com/digital/cnet/CNT201208160032.html … 任意の Web ページを、オフラインの Kindle へ転送。 ◇ SCE、今秋からPlayStation Mobileを本格展開。 http://av.watch.impress.co.jp/docs/news/20120815_553407.html … オープンな開発環境で作成した PlayStation のソフトのオンライン・ショップ。 ◇ OracleがJavaのアップデートをリリース、Mac向けにも初の直接提供。 http://www.itmedia.co.jp/news/articles/1208/16/news017.html … Mac の Java も健在。 ◇ A4サイズの紙1枚に1MBのデータを印刷してバックアップできる PaperBack。 http://gigazine.net/news/20120817-paperback/ … 紙原本主義ならこれを。暗号化にも対応。汚れに注意。                      Snap Note 3 開発BLOG  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ [ ソースコードが早く読めるようになる、シンプル・コメント ] プログラムのソースコードに書く関数名や変数名は、英単語を省略しない ようにするだけでも、かなり読みやすくなります。 たとえば、stat と省略しないで、status ときちんと書くことです。 それだけで、正しい 単語に変換する人間の思考回路が省略できますし、誤った単語を覚えて しまわないようになります。 そして、適切な関数名を付ければ、関数に対するコメントも必要なくなり ます。 それは、コメントが必須となるコーディング・ルールの元で、 コメントを書くと、関数名と同じ説明文になることで分かります。 関数に対するコメントをコピーして作られた、Doxygen が出力する ドキュメント HTML を見て分かりやすいですか? そういうことです。 つまり、ソースコードだけでも、名前の付け方次第で、かなり読みやすく でき、コメントがほとんど要らないようになります。 これは、ソース コードとコメントが矛盾してしまい、悩んでしまう時間を大幅に短縮 できます。 コメントは、ソースコードと異なり、正しさを検証でき ないので、間違いが増えてしまうのです。 ただ、コメントが全く不要というわけではありません。 どうしても必要な コメントがあります。それは、関数の中の複数行のコードが意味のある センテンスになるとき、そのセンテンスの最初に書くコメントです。  /* XML を解析します */  config.Flags =    F_ParseXML2_Delegate |    F_ParseXML2_OnStartElement;  config.Delegate = work;  config.OnStartElement = MkkwdsWorkClass_makeInFile_onXML_StartElement;  e= ParseXML2( path, &config ); IF(e)goto fin; 上記のコメントは、その下の6行で行うソースコード内容を説明しています。 このセンテンスに対するコメントを省略すると、ソースコードを読む速度が 下がります。 なぜなら、コメントが無いときは、たとえ全部でなくても、 ソースコードを読んでいく必要があり、最終的にソースコードを理解した 状態というのは、コメントに書かれるべきことを知ったことに相当するため、 それなら、最初からコメントから読むほうが早いからです。 そして、上記のコメントは、更にシンプルなコメント(シンプル・コメント)に することができます。  /* Call "ParseXML2" */  config.Flags =    F_ParseXML2_Delegate |    F_ParseXML2_OnStartElement;  config.Delegate = work;  config.OnStartElement = MkkwdsWorkClass_makeInFile_onXML_StartElement;  e= ParseXML2( path, &config ); IF(e)goto fin; Call "関数名" だけのコメントですが、関数名が適切なので、何をしているのか すぐに理解できます。 また、関数名はシンボルなので、シンボルから説明書を 検索することができ、詳細を知ることもできるようになります。 文章を書くのが 苦手な人のコメントを読むよりは、混乱も少ないでしょう。 コメントというと、パラメーターの説明をしたいところですが、それをするには、 上記の場合、config 構造体のメンバー変数や、関数の引数の説明をコピーする ことになり、二重表現になります。 それをするぐらいなら、config の型、または、 ParseXML2 関数の仕様が、すぐに検索できるようにしたり、正確さよりも理解の しやすさを重視したドキュメントを整備しておく方が、生産効率が高まります。 ただ、この Call "関数名" よりも優先したいシンプル・コメントがあります。 それは、出力内容を表すシンプル・コメントです。  /* Set "work2->title" */  status = GetApplicationStatus();  e= ParseXML2_StatusClass_getAttribute( status, _T("title"), &work2->title ); Set "変数名" だけのコメントですが、変数名が適切なので、何を出力している のか、すぐに理解できます。 上記のコードは、ParseXML2_StatusClass_getAttribute 関数を呼び出しているの ですが、その関数名から推測できる、「属性を取得する」 ことは、抽象的なので あまり有益な情報ではありません。 むしろ、work2->title から推測できる、 「タイトル」 を取得しているという具体的な情報の方が有益です。 オブジェクト指向から、可能な限りメソッドよりプロパティを用意したほうがよい、 という教訓が得られたことと同じように、関数(処理)の説明よりデータの説明を した方がよいのです。 出力変数名を使って grep 検索すれば、データの入出力関係を辿っていくことが 可能になります。 つまり、入力変数の内容を知りたければ、入力変数の値を設定 しているコードを検索して、そこに書かれたシンプル・コメントを見れば分かる ということです。 また、そこに書かれたソースコードは、テストが通っている ので、間違いがありません。 データの入出力関係は、プログラムを理解するときの 重要なポイントです。 場合によっては、出力変数に形容詞を付けるなどして具体的にした方が親切に なることもあります。 そのときは、コロンなどに続けて補足するとよいでしょう。  /* Set "work2->title" : 現在のファイルの Title タグ */  status = GetApplicationStatus();  e= ParseXML2_StatusClass_getAttribute( status, _T("title"), &work2->title ); ここまでのコメントは、英語ですが、Call とか Set とか、非常に単純な単語 しか使っていないので、日本語にする必要がありません。 つまり、シンプル・ コメントを使えば、そのまま海外にも出せるソースコードになるのです。 もし、説明が難しいことをコメントに書きたいときは、まず、ドキュメントに 書くことを検討しましょう。 ドキュメントの方が、図表を使えるので、より 理解が早まります。 以上を検討しても、今までのようなコメントを書きたいときだけ、書いても かまいません。 もし、ソースコードに日本語が含まれていて、それを海外に 出す必要が出てきたら、vbslib 4 の Translate コマンドを使って、日本語を 英語に変換できますから。 vbslib 4 は、3-clause BSD ライセンスで提供されています。 誰でも無料で 自由に使えます。 商用利用でも構いませんし、改変も再配布も自由です。 http://www.sage-p.com/vbslib/vbslib.htm         ソフトウェアデザイン館 Sage Plaisir 21 について  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ホームページ  >>> http://www.sage-p.com/ メルマガ    >>> http://www.mag2.com/m/0000083983.html ブログ     >>> http://blog.livedoor.jp/sage_p/ ツイッター   >>> http://twitter.com/Ts_Neko ダウンロード  >>> http://www.sage-p.com/freesoft.htm サポート掲示板 >>> http://www.sage-p.com/kg_ban09/z6037C8.cgi 東日本大震災  >>> http://www.sage-p.com/saigai.html メール   >>> ts-neko◇sage-p.com ←◇を@に変えてください          緊急メールは件名に「うどんメール」を付けてください。  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ このメルマガの登録・解除をするときは… >>> http://www.mag2.com/m/0000083983.htm  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ News & Column are composed by T's-Neko 2012  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄