PHPについての都市伝説。最終行の ?> の後の改行はオッケーだった。

今回の記事は前回の記事の続きです。

事の発端は、WP Total Hacksの最終行に改行があるぞと指摘を受けたとこからでした。

しかし、実際には改行を入れた覚えはないし実際にvim上でもtracでも改行はないし、いままでに不具合の指摘を受けたこともありませんでした。

でもGUIベースのテキストエディターで開くと最終行に改行が入ってるではないですかっ!

で、よくよく調べたら以下のような事実が判明。

  • POSIXでは行は必ず改行で終わることと定義されている。
  • vimのような由緒正しきテキストエディターは、この定義を忠実に守っていて、自動的に行の末尾に改行をつける。

しかし、これだとひとつ問題が。

PHPは、<?php ?> の外側は何でも出力してしまうので、viでphpスクリプトを書く時は手を打たなきゃイカン。

でも、それってPOSIXの定義に反しててちょっと不思議。

以上が前回の記事です。

先に結論

PHPのパーサーは、閉じタグの直後の改行を自動的に削除する仕様になっています。

したがって、

<?php
  // some action
?>
[EOF]

みたいなファイルをrequireしても全く問題はありません。

@miya0001 @jim0912 公式?にも書いてあるの見つけた。http://t.co/KdYtnmtX の最初の「注意:」

あと、以下のようなphpの出力結果は、

<?php echo '<div>'; ?>
foo
<?php echo '</div>'; ?>

こんな風に改行が抜け落ちます。

<div>foo
</div>

ということは?

vim で PHP ファイルを編集する時に、前回の記事で紹介したような設定やコマンドを実行することは不要です。

あと、終了タグを書いちゃいけないという記述のブログ記事がたくさんありますが、「終了タグの後に余分な文字列を書かない」と「終了タグを書かない」は、どっちも書かないように気をつけるという意味でおなじようなものなので、終了タグを書いちゃダメというのは言いすぎかなと。(マニュアルでも書かないほうが無難と表現しています。)

vim 等により勝手に入っちゃう改行は無視されるわけですから!

実際、WordPressコアに含まれるファイルの多くが、?>(改行)で終わっています。

改行にまつわるそもそもなお話。

最終行の終了タグ直後の改行が嫌われる根本的な原因は、GUIベースのテキストエディターが、改行をトリガーにして新しい行があるかのように表示するからではないかと思います。

でも、これはしょうがいない。改行入れた時に新しい行ができなかったらいつできんねん!?ってことですから。

一方で、gccのようにファイルの最後が改行じゃないとエラーを吐くシステムもあります。

なぜ gcc はファイルの最後に改行がないと警告を出すのか? – Schi Heil と叫ぶために

gccも行の最後は必ず改行であるべしという定義を守ってるんですね。

というわけで

まずは理解すべき点。

「テキストファイルの行末は必ず改行が入っているべき」と定義されています。

私は普段 vim でプラグインを開発しているので、閉じタグの直後に改行が入っています。

なので、テキストエディターで開くと「あほかっ!」と頭に血が上ることもあるかと思いますが、phpのパーサーはもとよりtrac、subverionなどのツール類でもEOF直前の改行は無視しており、これが正しい姿なので、暖かく見守ってあげて下さい。(笑)

とはいっても、余計な心配をかけないように、終了タグ自体を順次消していったほうがいいですね。

変な誤解を与えないようにという意味でphpの終了タグは消したほうがいいかなと思った次第です。

最後に

ちなみに、このように閉じタグ直後の改行は無視されるという結果オーライな事実が判明しましたが、私自身入れてはダメと思いながら知らないうちに入っていたというのが事の発端なので、私の不勉強が諸悪の根源です。

すいませんすいません。

UNIXの行の定義とviの改行コード

今日、Yuriko.netの管理人さんでKtai Styleの開発者のゆりこさんからコメントやTwitterでTotal Hacksについて不具合をいくつかご指摘いただきました。

@miya0001 コードにいろいろあやしい箇所を見つけて指摘を出しました。ご検討のほどお願いします。

1行ずつ追っかけていただいたらしく、グサっと刺さる部分もありましたが(笑)本当にありがたい事です。

指摘していただいた内容については勉強不足も大いにあって、もう本当にごめんなさいで、今週中にはアップデートします。

ファイルの最終行に改行ですと?

ゆりこさんから指摘いただいた不具合の中で衝撃的だったのがこれ。

なぬ?

いままで不具合の報告もなかったので疑問に思って調べてみました。

実はここまでで、いちどゆりこさんには「改行ないっすよ」と回答したんですが。ふたたび「あるよ」と。

なんですと?

一瞬、頭がフリーズしかけたんですが、ふっと思い立ってテキストエディターで開いてみると、あるではないですか改行が!

あちゃーっ、改行コードがCRなんだね、そうなんだねと思って調べたらそうでもなさそう。

  • 改行コードはちゃんとLF。老眼のせいかもと思って(笑)をかもとさんにも見てもらった。
  • vimの設定も ff=unix になってる。

うーーーーん。

@miya0001 老眼?

ちょっとしつこく調べてみました。

結論から言うと正確なソースが見つからなくて詳しいことははっきりしないのですが、以下のような感じみたいです。

  • POSIXでは「Unix においてテキストファイルとは行の集合であり、行とは改行文字で終わるものと定義される」と定義されている。
  • viのような由緒正しきテキストエディターは、この定義を忠実に守っており、行末には必ず改行が入る仕様になっている。

参考

対策方法

twitterでこの件に関してゴチャゴチャ言っていると天の声が飛んできました。

@wokamoto @miya0001 :set binary noeol で保存すると改行コード入らないみたいです。やってみたところ入らないで保存いけました http://t.co/iDDCRLT

もしくは、以下のような方法もありですね。

@miya0001 @hibiki443 なるほどー、これっぽいですね。最後の ?> 書かなければ良いんじゃない?

でも個人的にはやっぱ不思議

結果オーライ(?)でこれらの方法で問題は解消するのですが、個人的には以下のような疑問を感じます。

  • POSIXで行と改行は常にセットであるべしと定義されているのなら、PHPのパーサーはこれをどう解釈してるの? (実際に動作確認をすると最後のLFを無視してるような気がするし、いままで気がつかなかったし。)
  • vimをバイナリーモードで起動することで何か問題がありそうで気持ち悪い。

というわけで、詳しい人、どなたか解説して下さい。

GoogleやYahooなど有名サイトの過去のデザインいろいろ

海外のブログでGoogleやYahoo、Facebookなどの過去のデザインを集めた記事があったのでご紹介します。

How 30 Most Popular Websites looked in The Past?

ここでは、私が個人的に気になったものをご紹介します。

Google (1998年当時)

なんと、まだBetaの文字がついてます。

ロゴの末尾にビックリマークが付いていたんですね。

Yahoo! (1998年当時)

これは本家のYahoo!ですが、日本のYahoo!もこんなんでしたよね。

ネットで始めて検索したキーワードってなんだったんだろう?とか考えちゃいました。

Amazon (1995年当時)

あのAmazonはここから始まったんですねー。

すごい。感慨深いものがあります。

Facebook (2005年当時)

上述したサイトと比べると、わりと最近のものになると思うのですが、ださいっすねw

でも、このfacebookの6年間の変化を考えると、ヘコんでしまいます。

WordPress (2003年当時)

案外、最近までこんな感じだったような。

Apple (1997年当時)

Appleこんなんだったんですね。

この時点でSteve Jobs氏が復帰していたようです。iMacが出る直前ぐらいですよね。

その他

他にもたくさんりますのでぜひ見てあげてください。

http://ginva.com/2011/06/most-popular-websites-looked-in-the-past/

html5、CSS3、JavaScriptなどなど、Web開発者のためのフレームワーク10

それぞれ、特定の用途に特化していて、いつか使いそうなJavaScriptやCSSのフレームワークに関するメモ。

もし実際に使った感想があれば教えてください。

TimeGlider

年表という表現でいいのかな?

JSONデータからグリグリ動く年表を作るためのフレームワークです。

treesaver

デジタルカタログ風のコンテンツを作成するためのフレームワーク。

スマフォへの対応をメインにしているらしく、よくある「めくる」演出ではなくスライドでページを移動します。

LimeJS

HTML5でネイティブアプリに近いゲームを作成するためのフレームワーク。

Wink Toolkit

スマフォ対応サイトを作るためのフレームワーク。

jqTouchに近い印象。よさげなんですけど、サーバー死んでます。^^;

xui.js

HTML5に特化したjQueryみたいな感じ?

x$()という記述が、気になります。^^

Baker Ebook Framework

iPhone、iPad向けの電子書籍を作るためのフレームワーク。

サンプルはApp Storeへのリンクが貼られています。ということは…

ActiveJS

jQueryとかprototype.jsのようなJavaScriptフレームワーク。

ソースをパッと見しただけですが、これといった特徴をつかめませんでした。

RightJS

jQuery UIとかExt.jsなどのように様々なUIを簡単に実装するためのフレームワーク。

これはいいかもしれない。

EZ-CSS

CSSでレイアウトを組む際に手助けしてくれるフレームワーク。

あらかじめ用意されたレイアウトのバリエーションからクラス属性をコピペするだけで使用できるようです。

Atatonic CSS

横方向の罫線に対してきれいに揃えたいみたいなことをやってくれるCSSフレームワーク。

TinyMCE Templates 1.2.0

WordPressのビジュアルエディターにテンプレート機能を追加するプラグイン ”TinyMCE Templates” をアップデートしました。

今回のアップデートには、ANDREA BERSIさんにご協力いただきました。

http://firegoby.jp/wp/tinymce_templates

更新内容

  • テンプレート編集用のエディターがビジュアルエディターになりました。
  • デバッグモードでプラグインをアクティベーションする際に発生する不具合を修正しました。

原発賛成派がよくある賛成論にツッコミを入れてみた。

はじめに、私は原子力発電所は必要だと思っています。

ただ、賛成論の中には、賛成派の私でも納得しかねるような無茶な賛成論が数多くあるので、ちょっと気になったので、こういう無茶な賛成論にツッコミを入れようと思った次第です。

以前にこれ系のネタは書かないといいましたが、嘘になりました。すいません。

なお、わたしは過去に9年ほど火力発電設備の定期点検や設備のリプレースを扱う営業をしていましたが、決して専門家ではありませんので間違いもあるかもしれません。

原発は車より安全か?

池田信夫 blog : 自動車や石油火力は原発より危険である – ライブドアブログ

理解不能。

毎日ニュースで報道されていることのほんの一部でもご存知の上でこういうことを書けるのは、まさにご自分の近くに原発がないからではないでしょうか?

それに、この記事で使用している数字のソースを調べたんですが、池田氏はWHOからの引用と書いていますが、引用元は個人のブログであり、そのブログにはソースをはっきりとは書いていません。
(WHOであるらしきことは書いてありますが、本人の自己申告のみ)

少なくとも個人のブログ上に掲載されたデータを使っており、そのブログ上には明確なソースが記されておらず、論文で言う”孫引き”という反則技を使っていますので信用に価する情報ではありません。

安全ではないものを希薄な根拠で安全というよりも、リスクを認めた上で安全にコントロールできるか否かを模索しないと何も得られません。

原発は発電量が大きい?

これも正しいようで正しくないと思います。

たとえば東電管内の発電所を出力が大きい順に並べると以下のようになります。

発電所名 出力
1 柏崎刈羽原子力発電所 821.2万kw
2 富津火力発電所 504.0万kw
3 福島第一原子力発電所 496.6万kw
4 鹿島火力発電所 440.0万kw
5 福島第二原子力発電所 440.0万kw

なんだ、火力発電所って結構やるじゃん。そう思った人も多いのでは?

これを面積あたりの出力にしてみると以下のような結果が。。。

発電所名 出力 敷地面積 出力/面積
1 柏崎刈羽原子力発電所 821.2万kw 420万m² 1.95kw/m²
2 富津火力発電所 504.0万kw 76万m² 6.63kw/m²
3 福島第一原子力発電所 496.6万kw 350万m² 1.41kw/m²
4 鹿島火力発電所 440.0万kw 不明 不明
5 福島第二原子力発電所 440.0万kw 不明 不明

実は面積あたりの出力に換算すると最新鋭の火力発電所は原子力発電所の3倍以上の出力があります。
(増設のための予備の土地が広大なのかもしれませんが。。。)

ですから、単純に出力だけで話をするのはやはり説得力がないと思われます。

それに、政府も電力会社も出力が大きいことを理由に原子力発電所が必要であるとは言っていません。
(過去には言ってたかもしれませんが、少なくとも現在ではネット上にそういったソースは見つかりません。)

反対するなら原子力を使うな?

これもかなり乱暴な意見。なぜかというと需要家には電気が何で作られているかを選択する権利がないので。

それに、この理屈も、原発の賛否に関する公式な議論の場では論じられることはないと思われます。
議員先生や電力会社の幹部が国会等で「原発に反対なら電気を使うな」って言うと思います?

重ねて言いますが、公式な議論の場で取り上げられることがない意見は、存在しないのと同じです。

居酒屋での雑談程度におさめておきましょう。

原発はコストが安い?

これについてもいろいろな意見があるようです。

たしかに化石燃料よりも燃料費は安定しているようですが、今回のような事故に対する補償や廃炉や廃炉後のメンテナンス費用なども含めると、コスト高になったとしても不思議ではありません。

また、上述した面積あたりの発電容量から見ても、ほんとうにコストが安いのかどうかは、怪しいと感じます。

しかし、ここで重要なのは、政府や電力会社は単にコストが安いだけではなく、「発電コストにしめる燃料費の割合が低いから必要」と説明していることです。

つまりコストが安いかどうかよりも、燃料費が安いことが重要なんです。

後述しますが、これには大きな違いがあり、よく理解する必要があります。

ここまでのまとめ

テレビやインターネットを通して多くの有識者が原子力発電所の必要性について述べています。

しかし、ここまでご説明したとおり、説得力がないものも多く見受けられます。

政府や電力会社が、なぜ原発が必要と言っているのかをもう一度再確認し、彼らが言ってることと言ってないことを、きちんとわけて理解しましょう。

原子力発電所が必要なわけ

各電力会社のホームページをよく読むとわかりますが、原子力発電所の必要性は、以下の二つに集約されます。

  • エネルギーの安定供給(より専門的にはエネルギーの安全保障)
  • 温暖化の抑制などの環境保護

エネルギーの自給率

ご存知のとおり日本は非常に石油資源が乏しい国で、エネルギー資源の96%を輸入に頼っています。

しかし、原子力発電をエネルギーに含めると輸入割合は82%まで下がります。

では、原子力発電所をやめてエネルギー資源の輸入にたよるとどうなるか?そこにはまさに現実的な危機が存在しています。

いまそこにある危機 – イランの核問題

すでに多くの方がご存知だと思いますが、イランに核兵器開発の疑念が持たれており、アメリカではイランへの経済制裁を行っています。

一方でイランはこれに反発してペルシャ湾を封鎖するとことあるごとに言っています。

地理に詳しい方はご存知かもしれませんが、このペルシャ湾の出口であるホルムズ海峡はイランの目の前にあり対岸までの距離はわずか33kmしかありません。

そして、日本の中東からの石油の70%がこのホルムズ海峡を通っているのです。

http://www.iae.or.jp/energyinfo/energydata/data2004.html

日本では、オイルショック以降、中東への依存度を減らすためにインドネシア、メキシコ、中国などへの分散を図り1987年には68%まで依存度を低下させることができました。

しかし、その後のアジア各国の経済成長による消費量の増加により、ふたたび中東への依存度が上昇しはじめ、現在は原油の輸入量の90%を中東に頼っておりオイルショックの頃の依存度を上回っています。

政府はこういった状況に危機感を感じており「エネルギーの安全保障」の確保のための対策の大きな柱として、発電コストに対する燃料費の割合が低い原子力発電を推進しています。

つまり、「コストが安い」ではなく「燃料費が安い(出力あたりの輸入への依存度が低い)」が重要なんです。

環境問題

原子力発電所はクリーンエネルギーとして国際的に位置づけられており、地球温暖化に対する対策として有効と考えられています。

今回の震災による事故の結果生じた環境への影響によって、これに関しては意見がわかれると思いますが、少なくとも政府は震災前にはそう考えており、国際社会でもこの流れは暫く続くと思います。

地球温暖化がウソか本当かには関係なく京都議定書は実際に発効されており、そこでの約束を果たすための有効な手段として原子力発電は重要視されています。

太陽光発電や風力発電は?

太陽光発電などの自然エネルギーは環境負荷が小さいというメリットがあり、政府や電力会社は積極的に導入する姿勢を崩していませんが、気候等に左右され出力も小さいために基幹電源になるとは考えられていません。

これは個人的な意見ですが、電気は貯めることができず生産と消費が同時に行われるため、仮に自然エネルギーによる発電で十分な発電量があったとしても、気候に恵まれない際のバックアップ電源としての発電所は必要だと思います。

ただし、それでも輸入に対する依存度を下げてエネルギーの安全保障を確保するという意味では大いに期待できる技術であり、技術的な課題が解決できるのであれば原発なんて必要ないと思います。

まとめ

今回の記事は、原子力賛成派の人にこそ正しい理解をしてほしいとの願いで書きました。

私の理解では、事故を起こした以上、現存する原発は安全ではなかった。
実際に世界中が大騒ぎだし、避難指示が出て福島県民のみなさんが実際に辛い思いをし、東電の偉い人も謝ってます。

そして東京電力は過去に臨界事故を含む複数のトラブルを隠蔽していたという前歴があり、どこまで信用していいのかわからないのが現実です。

でも国際的な情勢の中でエネルギー供給には現実的な危機があって、そんななかで原発を今後コントロールできるのかどうか?

脱原発しつつもエネルギーが抱える問題を解決する方法はあるのか?

賛成か反対かを先に決めて後から理由を付け足すような議論をするよりも、現実に対処すべき問題を並べて、それを解決するための道筋をさがすような、頭のいい先生たちにはそういう話をしてもらいたいと思います。

最後に、原発の周辺地域で生活するみなさんのことを思うと安易に原発が必要と考えることには違和感も感じています。

被災地のみなさんや原発の周辺で暮らす人達に一日も早く安らかな生活がもどることをお祈りしています。

参考

http://www.fepc.or.jp/faq/necessity/index.html

http://www.tepco.co.jp/nu/qa/index-j.html

http://www.kyuden.co.jp/notice_sendai3_faq_necessity.html

でんき予報 for Chrome 0.3.0

でんき予報 for Chromeを0.3.0にアップデートしました。

アップデートは自動的に行われますので、特に何もする必要はありません。

http://firegoby.jp/download/denki

更新内容

  • 午前0時以降しばらくの間エラーが発生する不具合を修正しました。
  • 東京電力の公式ツイッター @OfficialTEPCOの最新のツイートをポップアップで告知する機能を追加しました。(デフォルトでOffになっています。)
  • その他、いくつかのバグやタイプミスを修正しました。