page_adsence

2011年6月29日水曜日

Vimで折りたたみ

長いソースになってくると読むのが大変になってくるが、折りたたみと画面分割コマンドを併用することで
結構読みやすくなると思う。

画面分割に関しては以前のエントリに記載した通りなので、
今回は折りたたみに関してまとめた。

よく使うコマンド
zi      折り畳みの有効無効の切り替え
zf      折り畳みを作成する
za      折り畳みの開け閉め
zd      折り畳みを削除する

時々使うコマンド
zA      折り畳みの開け閉め(再帰)
zD      折り畳みを削除する(再帰)
zE      全ての折り畳みを削除
zR      全ての折り畳みを開く
zM      全ての折り畳みを閉じる

折り畳みの種類の切り替えとか
set fdc=0           折り畳みカラム幅の設定
set fdm=manual      手動
set fdm=marker      マーカー
set fdm=indent      インデント

これらを駆使してこれからもVimを使い続けたいと思う。

HTML5を利用したJavascriptのアニメーションサイトがすごい!

このPaper.js。
やばい!

http://paperjs.org/examples/

こんなの作ってみたいなー。
試しにソース落としてきたけど7091行…。

じっくり読みます…。

今更だけどHTML5について調べてみた。

HTML5が出てからもう大分経ちますが、そろそろいろいろなブラウザでHTML5の主要な機能が出そろってきました。(とはいえまだまだ未対応の部分も多いですが…。)
そこでちょっと調べてみた。
まずセキュリティに関して。
調べてみたらこんな記事が出てきました。

「HTML5は優先順位を間違った。もういちどセキュリティの設計からやり直すべきだ」と語るJavaScript大家のDouglas Crockford氏
HTML5は安全か? 開発者が留意すべきセキュリティ問題
HTML5とは何かを簡単にまとめてみた

まぁ確かにいろいろ便利になったと思われる一方で、セキュリティに関してどうなんだろうと疑問に思っていましたが、案の定でした。
セキュリティに関してはまだまだ不安なところが多く、重要な情報を保存する時には使う気にはなれないですね。
とはいえ、漏れても問題ないようなデータに関しては、ガンガン使っていっていいと思います。
やっぱり使わないとわからないですしね。

ただ、悪いことばかりじゃないみたいです。

iframe用のサンドボックス機能をサポートする計画があり、それを使うと「データをどう解釈するかを開発者が選択することを可能にする」らしい。
「この機能を正しく利用するとサードパーティーの悪質な広告や、信頼できないコンテンツを受け取るフレームなどが再表示されるのを防ぐのに役立つ」

具体的にどうすればいいのかとか書いてないので、なんとも言えないんですが、
Javascriptを使う時にiframe使うとデバッグしづらいから、極力iframeを使いたくないんだけど、
その辺は開発中はiframeのみ表示して開発する感じにすれば何とかなるかな。
今後はどんどんと試していきたいです。

新しいiPhone4のケースが来た

iPhone4のケースプログラムでもらったケースがぶっ壊れてきたので、新しくケースを買ってみた。

ちなみに今まで使っていたのは
「Griffin Reveal Etch iPhone 4 Graphite」

よく尻ポケットに入れてたせいなのかも知れないのですが、
シリコン部分とカーボン部分をつないでいる部分が剥がれてきたってのと、
剥がれてきてから、シリコン部分が伸びてきてしまったので、さすがに買い換えようかなと。

で、新しいケースはシリコンかカーボンかどっちか1素材を使っていて、接着部がない、値段もそこそこのケースという条件で探してみました。

結果、新しいケースはこれにしました。
「TUNEWEAR iPhone4用ソフトケース SOFTSHELL for iPhone4 ブルー TUN-PH-000047」

ゴムとプラスティックの中間みたいな感じで、TPU素材というものを使っているそうです。
Amazonでのレビューも実際ケースを着用した時の色が写真と違うってこと以外は悪くないし、
iPhone4の黒にケースを着用した時の写真を購入者が上げてくれているので、
それを見て問題ないかなと。

で、先日届いたので早速ケースをつけかえてみた。
まず色に関して。
色はやっぱり写真と違ってもっと暗い感じの青になりますね。
別に僕は気にならないです。

続いて装着感。
いいですね、iPhone4にぴったりはまっていい感じです。
まぁこれに関しては使い続けてみて、伸びてきてブカブカになったりしないかとか、
いろいろ試してみたいと思います。

最後にボタン類の操作性。
全体的に硬いですね。
電源ボタン、ボリュームボタン共に押すのにそこそこ力が要ります。
これは買ったばかりだからかもしれないですが、
前のはそんなでもなかっただけに、ちょっと残念です。

まぁこれから使い続けてみてどうなるかですね。

Snowboarderカタログ号を立ち読みしてきた

Snowboarderのカタログ号が出てたので、ちょっと立ち読みしてきた。
立ち読みといってもパラパラと中身を見た程度ですが。
正直このカタログを買う気にはなれなかった。
まぁ一番早く出るカタログなんで、しょうがないといえばしょうがない。
新しいテクノロジーとかに関しての記事とかなかった(見つからなかった)し、
オレの好きな011も載ってなかったし。

やっぱ本命は7月上旬発売予定のSNOWboarder's BIBLE。
毎年買ってるけど、ボリュームが半端ないから読んでてもいろんな発見があるし、楽しいし、テンション上がる!
早く発売しないかなー。

JSファイル読み込み時のブロックを回避する方法

通常、ブラウザはいくつかのファイルを同時にダウンロードするようになっているが、
外部ファイル化されたscript要素のロードに入ると、他のファイルの読み込みがブロックされてしまう。
ブロックされる時間は、Javascriptファイルのダウンロード、構文解析、実行が完了するまで。

ブロックによる影響を最小限に抑えるには、bodyの閉じタグの直前にscript要素を記載することで、
画面側への影響は最小限に抑えられる。

さらにJavascriptのファイルを1ファイルにまとめて圧縮することで、その時間を短縮することが可能になる。
どうしても複数ファイルに分ける場合は、Javascriptのソースの中でscript要素を作成し、
DOMに追加することで並列にロードをすることが可能になる。

2011年6月28日火曜日

Nightly tester toolsの出番が増える

Nightly tester toolsが何かというとFirefoxの互換性のないアドオンを強制的に動かすアドオンで、
Firefox3.6系から4系に上げる時から使い始めたんですが、これから必要になる頻度が高くなってくるかも。

Firefoxは原則6週間ごとにメジャーバージョンアップするってことなんで、
これ入れてないとアドオンがしばらく使えない期間が発生するかも。

実際、Firefox3.6から4に上げたタイミングだと、13個入れているアドオンのうち、半分以上が使えなかった。
しかもFirebugやFireMobileSimulatorなど主要な開発ツールが未対応で、正直これでは仕事にならない。
Firefox4から5に上げた時も、同じくらい使えないアドオンがあった。
まぁ、4から5に上げた時はリリース日当日に上げたので、しょうがない部分も多少はあるが…。

これから6週間ごとにアップデートされていくが、基本的には後方互換は保っているとはいえ、
一時的にアドオンが使えなくなる事態は避けないといけない。

というわけで、Nightly tester toolsを使わずにはいられない。

2011年6月27日月曜日

TRANSWORLD SNOWboarder's BIBLE2011-12

まだ発売してないけど、そろそろ発売時期が近くなってきた。
トランスワールドのブログをみる限り7月上旬らしいから、もうすぐだ。
去年ウェア以外買い換えたので、今年は買ってもウェアと小物位だと思うけど、
カタログみて新しい技術が取り入れられたボードとか見ると、マジでテンションあがる。
早く発売してほしいなー。

PHPUnit3の導入方法

最近自分のソースにバグが多いことが嫌になってきたので、テストをきちんと書いてみようかと思ってPHPUnitを導入してみようかと思い、その作業ログを残してみました。
そもそもPHPUnitなんて使ったこともなければ、まともに調べたこともなかった。
PHPUnit自体はPHPUnit、PHPUnit2、PHPUnit3とあり、PHPUnitはPHP4用、PHPUnit2とPHPUnit3はPHP5用として配布されているみたいです。
PHPUnit3はPHPのバージョンやPEARのバージョン等がかなり新しくないと入らないみたいなので、
PHPUnit3を入れられる要件を満たしていない場合は無理に入れる必要はないかもしれません。
今回は調べながらいろいろやってたので、無駄にPHPUnit→PHPUnit2→PHPUnit3とインストールと削除を繰り返してしまいました…。

で、作業ログ。
とりあえず、PHPのバージョンをアップデートして、PHPUnitのインストールを試みる。

まずPHPUnitはソースを落としてきて置いただけ。
PHP4用に書かれてるんで参照渡しのところでWarningが出てた。
これしかないのかと思って調べているとPHPUnit2ってのがあることに気付いた。
さらに、PHPのバージョンを上げればPHPUnit3が使えるみたいなので、
それを使ってみることにした。

# pear channel-discover pear.phpunit.de
Channel "pear.phpunit.de" is already initialized

既に追加済みでした。
で、インストール

# pear install phpunit/PHPUnit
Did not download optional dependencies: ezc/ConsoleTools, use --alldeps to download automatically
phpunit/PHPUnit requires PEAR Installer (version >= 1.9.2), installed version is 1.9.1
phpunit/PHPUnit can optionally use PHP extension "dbus"
phpunit/File_Iterator requires PEAR Installer (version >= 1.9.2), installed version is 1.9.1
phpunit/PHP_CodeCoverage requires package "phpunit/File_Iterator" (version >= 1.2.2)
phpunit/PHPUnit_MockObject can optionally use PHP extension "soap"
downloading DbUnit-1.0.1.tgz ...
Starting to download DbUnit-1.0.1.tgz (39,055 bytes)
......done: 39,055 bytes
downloading Text_Template-1.1.0.tgz ...
Starting to download Text_Template-1.1.0.tgz (2,783 bytes)
...done: 2,783 bytes
downloading PHP_Timer-1.0.0.tgz ...
Starting to download PHP_Timer-1.0.0.tgz (2,536 bytes)
...done: 2,536 bytes
downloading PHPUnit_MockObject-1.0.8.tgz ...
Starting to download PHPUnit_MockObject-1.0.8.tgz (18,199 bytes)
...done: 18,199 bytes
downloading PHPUnit_Selenium-1.0.2.tgz ...
Starting to download PHPUnit_Selenium-1.0.2.tgz (16,412 bytes)
...done: 16,412 bytes
downloading YAML-1.0.5.tgz ...
Starting to download YAML-1.0.5.tgz (9,966 bytes)
...done: 9,966 bytes
downloading XML_RPC2-1.0.8.tgz ...
Starting to download XML_RPC2-1.0.8.tgz (67,063 bytes)
...done: 67,063 bytes
downloading PHP_TokenStream-1.0.1.tgz ...
Starting to download PHP_TokenStream-1.0.1.tgz (7,250 bytes)
...done: 7,250 bytes
downloading Cache_Lite-1.7.10.tgz ...
Starting to download Cache_Lite-1.7.10.tgz (30,348 bytes)
...done: 30,348 bytes
downloading ConsoleTools-1.6.1.tgz ...
Starting to download ConsoleTools-1.6.1.tgz (869,994 bytes)
...done: 869,994 bytes
downloading Base-1.8.tgz ...
Starting to download Base-1.8.tgz (236,357 bytes)
...done: 236,357 bytes
install ok: channel://pear.phpunit.de/Text_Template-1.1.0
install ok: channel://pear.phpunit.de/PHP_Timer-1.0.0
install ok: channel://pear.phpunit.de/PHPUnit_Selenium-1.0.2
install ok: channel://pear.symfony-project.com/YAML-1.0.5
install ok: channel://pear.php.net/Cache_Lite-1.7.10
install ok: channel://components.ez.no/Base-1.8
install ok: channel://pear.phpunit.de/DbUnit-1.0.1
install ok: channel://pear.phpunit.de/PHPUnit_MockObject-1.0.8
ERROR: unable to unpack /tmp/pear/download/XML_RPC2-1.0.8.tgz
install ok: channel://components.ez.no/ConsoleTools-1.6.1
install ok: channel://pear.phpunit.de/PHP_TokenStream-1.0.1

失敗…。
pear listでPEARのバージョンを確認してみると
# pear list
Installed packages, channel pear.php.net:
=========================================
Package Version State
PEAR 1.9.1 stable

1.9.1か…。
しかたないのでアップデート
# pear upgrade PEAR
downloading PEAR-1.9.2.tgz ...
Starting to download PEAR-1.9.2.tgz (295,120 bytes)
............................................................done: 295,120 bytes
downloading Archive_Tar-1.3.7.tgz ...
Starting to download Archive_Tar-1.3.7.tgz (17,610 bytes)
...done: 17,610 bytes
downloading Structures_Graph-1.0.4.tgz ...
Starting to download Structures_Graph-1.0.4.tgz (30,318 bytes)
...done: 30,318 bytes
downloading Console_Getopt-1.3.1.tgz ...
Starting to download Console_Getopt-1.3.1.tgz (4,471 bytes)
...done: 4,471 bytes
downloading XML_Util-1.2.1.tgz ...
Starting to download XML_Util-1.2.1.tgz (17,729 bytes)
...done: 17,729 bytes
upgrade ok: channel://pear.php.net/Archive_Tar-1.3.7
ERROR: unable to unpack /tmp/pear/download/Structures_Graph-1.0.4.tgz
upgrade ok: channel://pear.php.net/Console_Getopt-1.3.1
upgrade ok: channel://pear.php.net/XML_Util-1.2.1
upgrade ok: channel://pear.php.net/PEAR-1.9.2
PEAR: Optional feature webinstaller available (PEAR's web-based installer)
PEAR: Optional feature gtkinstaller available (PEAR's PHP-GTK-based installer)
PEAR: Optional feature gtk2installer available (PEAR's PHP-GTK2-based installer)
PEAR: To install optional features use "pear install pear/PEAR#featurename"

もう一回インストール

# pear install phpunit/PHPUnit
phpunit/PHPUnit can optionally use PHP extension "dbus"
downloading PHPUnit-3.5.13.tgz ...
Starting to download PHPUnit-3.5.13.tgz (118,553 bytes)
..........................done: 118,553 bytes
downloading File_Iterator-1.2.6.tgz ...
Starting to download File_Iterator-1.2.6.tgz (3,439 bytes)
...done: 3,439 bytes
downloading PHP_CodeCoverage-1.0.4.tgz ...
Starting to download PHP_CodeCoverage-1.0.4.tgz (115,029 bytes)
...done: 115,029 bytes
downloading XML_RPC2-1.0.8.tgz ...
Starting to download XML_RPC2-1.0.8.tgz (67,063 bytes)
...done: 67,063 bytes
install ok: channel://pear.phpunit.de/File_Iterator-1.2.6
install ok: channel://pear.php.net/XML_RPC2-1.0.8
install ok: channel://pear.phpunit.de/PHP_CodeCoverage-1.0.4
install ok: channel://pear.phpunit.de/PHPUnit-3.5.13

完了。

xhprofを使ってみる

前回は自分の環境にxhprofをインストールするまで完了したので、
今回はそれを実際に使ってみる。

例として以下のソースのプロファイルが取りたい場合

$action = new Action;
$action->execute();

まず、インストール時に作成された「xhprof_html」ディレクトリと「xhprof_lib」ディレクトリの場所を確認しておく。
今回の場合は「/tmp/pear/download/xhprof-0.9.2/」以下の2つのディレクトリがある。
2つのディレクトリはドキュメントルート以下にコピーして設置しておく。

で、以下の記述を追加する。
require_once '/tmp/pear/download/xhprof-0.9.2/xhprof_lib/utils/xhprof_lib.php';
require_once '/tmp/pear/download/xhprof-0.9.2/xhprof_lib/utils/xhprof_runs.php';

xhprof_enable();

$action = new Action;
$action->execute();

$xhprofData = xhprof_disable();
$sourceName = 'HTML Generator';
$xhprofRuns = new XHProfRuns_Default();
$runId      = $xhprofRuns->save_run($xhprofData, $sourceName);
echo '<a href="http://example.co.jp/xhprof/xhprof_html/index.php?run='.$runId.'&source='.$sourceName.'" target="_blank">xhprof Result</a>';

以上で追記しないといけない内容に関しては完了である。
これで実行すると、最後にechoで出力しているリンクをクリックするとプロファイルができている。
ちなみに、callgraphを出そうとする場合は、別途graphvizをインストールする必要がある。
インストール方法は以下の通り。

# cd /etc/yum.repos.d/
# wget http://www.graphviz.org/graphviz-rhel.repo
# yum install graphviz