page_adsence

2010年7月27日火曜日

doctrineで生成されるBase~.class.phpと~.class.phpと~Table.class.phpの棲み分けについて

doctrineでmodelを生成すると1つのテーブルに対して以下の3ファイルが生成されます。

例)テーブル名がhogeだった場合に作成されたモデルクラスの場合

base/BaseHoge.class.php
Hoge.class.php
HogeTable.class.php

これらのファイルにはそれぞれ違った役割があり、
それを意識することで綺麗なコードが書けるようになると思います。

BaseHoge.class.phpに関して
こちらはbuildするたびに書き換えられてしまうので、触らないようにしましょう。
もし修正してもbuild-modelのコマンドを実行した時点で新しいファイルに差し替わってしまいます。

HogeTable.class.phpに関して
このクラス内ではテーブルからレコードを取得する処理を記述する。
ようは、テーブルに対して行う処理に関しては全てここに記述する。

Hoge.class.phpに関して
HogeTable.class.phpで取得したレコードに対して処理を実行する場合はこちらに記述する。
つまり、テーブルにレコードを直接取得するような記述は書かない。
あくまでHogeTable.class.phpで取得してきた取得結果に対しての処理を記述するのがこっち。

以上が棲み分けになる。
なぜこのようになるかというのは、継承関係が以下のようになっているからってことみたいです。
・Doctrine_Record > sfDoctrineRecord > Hogeクラス
・Doctrine_Table > HogeTableクラス

・参考文献
http://www.kazu.tv/blog/archives/000954.html

2010年7月26日月曜日

ペースト時にvimのオートインデントを無効にする方法

vimにオートインデントをつけている場合、
複数行にわたるテキストをコピペすると大惨事になります。

これを回避するためにオートインデントをいちいちオフにするとかありえないので、
どうしたもんかと思っていましたが、ググってみたら簡単に出てきました。

やり方は以下の通り。
1.vimでファイルを開き、コマンドモードにしておく。
2.コマンドモードの状態で「:a」と入力してEnter。
3.入力できそうな雰囲気になったら、その状態でペーストしたい内容を貼り付け。
4.Escキーを押すと反映されます。

といった感じでオートインデントを無効にした状態でのペースト可能です。
ちなみにググった時に一緒に出てきたのですが、「:a」でもオートインデントが回避できない場合は
「:a!」と入力してやってみるといいみたいです。
vimのバージョンによって変わるみたいです。

2010年7月25日日曜日

symfonyでContent-Typeを指定する

Conotent-TypeにあるcharsetはApacheで設定したAddDefaultCharsetが基本的には設定されるが、
この部分がコメントアウトされている場合にはcharsetが指定されずにHTTPリクエストヘッダがやりとりされる。

Content-Type text/html

といった感じ。
が、文字化けを防ぐためには、Content-Type内にcharsetを指定しておくほうがいいと思う。
でも、Apacheで設定しまうと、1台のサーバで複数のサイトを運営していた場合に不都合がでる可能性がないとも言い切れない。
そこでsymfonyではview.ymlにContent-Typeが指定できるようになっているので、
これを利用することにする。
以下はview.ymlの記述を抜粋したものである。

default:
  http_metas:
    content-type: text/html

このようになっている部分を以下部分の記述を追加してやる。

default:
  http_metas:
    content-type: text/html; charset=sjis

この用にすればアプリケーションレベルで文字コードを設定することができる。

2010年7月24日土曜日

iphoneアプリの制限

iphoneアプリの価格と容量には制限があるみたいです。
値段は999ドル、容量は2GBが最大みたいです。
一応メモ

2010年7月23日金曜日

いったい何時になったら商品届くんだ、佐川・・・。

先日amazonでゲームを購入したのですが、amazonのアカウントサービスを確認すると、「お近くの配達店まで輸送中です。」と出るんですが、佐川急便のHPにあるお荷物問い合わせサービスで伝票番号を入力すると、「お問い合わせのデータは登録されておりません。」と出てくる。
これが数時間とかならいいんですが、すでに1日たったにも関わらず、まだ登録されない。
いったいいつになったら登録されるんでしょうか・・・。
ちなみに、同日に楽天で買ったサンダルは3時間くらいで登録されていました。
けど、大阪を夜10時過ぎにでて、翌日の15時過ぎても商品が届かないどころか、まだ配達店にも届いてないって・・・。
どういった配達の仕方をしているんでしょうかね。
買った商品は早く手元に欲しいといった客の心理を全く無視したものだと思います。
個人商店などはしょうがないですが、amazonはヤマト1本にして欲しいです。

追記
結局amazonのほうが先に到着し、伝票番号が登録されることはありませんでした・・・。
楽天のほうは19時くらいに到着しました。
大阪からここまで約20時間って・・・。

2010年7月20日火曜日

iphoneアプリについて調べてみた。

もしかしたらiphoneアプリを作ることになるかも知れないので調べてみた時のメモ。

1.iphoneアプリの開発は基本的にMacのXcodeで開発を行う必要がある。
なのでwindowsユーザーはMacへの買い替えを迫られる。

2.日本語が一切使われていないApple IDが必要になる。
(ただし、実機で検証やアプリの配布を考えていない人には必要ありません。ようは、Mac上のエミュレーターで動かしたいだけの人は必要ないということです。)
iphone Developer Programの登録の際、Apple IDアカウントに日本語が使われているとエラーになるので、新しく作るか、Appleに問い合わせるしかないみたいです。

3.開発は基本的にiphoneのエミュレーターを使って開発する。

4.iphone実機で検証する場合には「iphone Developer Program」に登録する必要があり、スタンダードプランで年間10800円する。

5.実機で検証する場合も、検証に使用する実機のデバイス情報を登録する必要があります。
1台ごとにデバイス情報を登録する必要があるので、
数台にインストールしたい場合などはこの作業を繰り返し行う必要があります。

ざっと調べてみた感想を書くと、「めんどくさい」の一言に尽きる。
僕みたいに日本語Onlyの開発者にとっては敷居が高い。
とりあえすググれば問題解決できる程度に資料があるからまだいいけど・・・。


参考ページ
iphoneアプリの開発から販売まで
Mac未経験からのiphoneアプリ開発→申請できるようになるまでの流れ

2010年7月19日月曜日

iphone4はやっぱり早い

しばらく使ってみてやっぱり早いって再度実感しました。
特に速度の違いを実感できたのはGoodReaderでpdfファイルを読み込んだ時でした。
3Gの場合は1ページ読み込むのに4,5秒かかってましたが、4の場合は1秒かからないくらいで表示されます。
画面も縦か横でロックできるようになったし、
GoogleMapもコンパスがついたおかげで道に迷う心配もありません。
これからも色々と使い倒していきたいと思います。

2010年7月16日金曜日

iphone4が来た!

予約開始からほぼ1ヶ月。
長かったですが、ようやく手に入りました!
とりあえず速攻でケースを買いに行って、これから3Gから4へと環境を移行しました。
iphone4すげー早い!!
いやー、ホントにサクサク動きますね。
goodreaderで書籍読んだりしてたんですけど、1ページのロードにかかる時間が全然違う。
ハンパねぇ~。
これからちょっとずついじっていきたいと思います。

あと、使えなくなったiphoneはipodとして使おうかなと思ってます。
au携帯とiphone4とiphone3G。
荷物がまた増えました。

2010年7月15日木曜日

クリップボード拡張アプリの落とし穴

PCを再インストールしてから入れてなかったクリップボード拡張アプリを久々に入れてみた。
今回入れたのはCLCLというアプリ。
スタートメニューに入れて常時起動している状態にしていた。

で、今回ハマったのはリモートデスクトップ上の大容量のファイルをコピーする場合、
コピーするのにやたら時間がかかるということでした。
最初は何でだかさっぱりわからなかったんですが、リモートデスクトップ上の大容量のファイルをカットもしくはコピーすると
「貼り付け情報を準備しています。」
と出てきて200分とかでてきたりした。
なんでこんなに時間がかかんだ?って謎だったんですが、自分の環境に新しく追加したものといえばCLCL位しかないしってことで、CLCLを終了させてみた。
そしたらあっという間にコピペできました。

リモートデスクトップ上のファイルをコピペした場合でも、
接続元のほうのクリップボード使ってるみたいだから、それが大容量でこんなになったのかとも思ったのですが、
であれば、CLCLは関係ないってことになる。
でもそんなことはないはずなので、原因は本来のクリップボード+CLCLのクリップボードにコピーしてるから倍以上の時間がかかってるんじゃないかと思われる。
テキストだけ履歴に入ればいい気がするので、それ以外は履歴に入れないようにしようかな。

iphone4入荷の連絡がついに来た!!

本日16時半頃にようやくソフトバンクショップから連絡が来て、
明日の13時以降に入荷が確定したみたいです。
あー、本当に長かった・・・。
予約一時停止する18日の16時頃に予約して、まさか1ヶ月近く待たされることになるとは。
いつ来るのか気になって気になって、発売日以降毎日2chのiphoneスレを確認してしまいましたよ。
普段2chなんて全くみないのに。

手に入るまでに時間がかかった分、色々と聞きたくないような情報まで伝わってきましたね。
接着剤が乾いてないから液晶が黄ばんでるとか、カメラで写真をとると中心部分が青くなるとか。
液晶の黄ばみは時間が解決してくれるみたいですし、写真に関しても実は普通の携帯の場合でもあるみたいです。
しかも青くなる条件として画面一杯の白い写真を撮ると、画像を綺麗にするために青丸現象が発生するとか。
まぁ特定の条件下だし、これに関してはソフトウェア側の問題っぽいので、後からの対応でもいいかな。
やはり一番の問題はアンテナ問題ですね。いったいどうなるんでしょう?
17日(現地時間だと16日)にappleが会見開くみたいだけど、どんな内容の話になるんだか・・・。
もしリコールするって話になったらまた1ヶ月位待たされることになりそうだし、
かといってそのままの状態でホントに大丈夫なのかって感じではある。
ケースに入れて使えば問題ないとの記事がいくつか書かれているし、
友達が一足先にiphone4手に入れて使ってたけど、そんなに気にしてなかったし・・・。
大丈夫だと願いたいです。

まぁなんにせよすぐにケースを買わねば!

2010年7月13日火曜日

mod_rewriteが効かない

symfonyでrouting.ymlに記述しているにも関わらず、全然効いてない。
キャッシュかなと思ったけど、symfony ccしてみたけど直らない。
で、mod_rewriteがちゃんと効いてるかどうか確認してみたら、これが効いてなかった・・・。
AllowOverrideはちゃんと書いたのになんでだろうと思って、
httpd.confをよく見てみたら

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

になってた・・・。
Directoryは記述された階層で書いた設定が、それ以下のディレクトリ全体に反映される。
つまり今回の場合は全てのディレクトリでAllowOverrideは使えないよって状態になっていた。
前からこんなの書いてあったっけと思いつつもこのDirectoryの部分をコメントアウト。
apache再起動。

Internal Server Error

あれっと思ってエラーログを確認すると、

[Wed Jun 16 18:19:22 2010] [alert] [client 192.168.XXX.XXX] /path/to/directory/web/.htaccess: Option FollowSymLinks not allowed here

FollowSymLinksは有効になってないからだめってことみたい。
ちなみにFollowSymLinksとはシンボリックリンクが有る場合はそのリンク先の参照を許可するって設定。

$ vi web/.htaccess
Options +FollowSymLinks +ExecCGI

<IfModule mod_rewrite.c>
RewriteEngine On

# uncomment the following line, if you are having trouble
# getting no_script_name to work
#RewriteBase /

# we skip all files with .something
#RewriteCond %{REQUEST_URI} \..+$
#RewriteCond %{REQUEST_URI} !\.html$
#RewriteRule .* - [L]

# we check if the .html version is here (caching)
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f

# no, so we redirect to our front web controller
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

確かにsymfonyの初期状態で生成される.htaccessにはFollowSymLinksの指定が追加されている。
じゃあこれを消せば問題解決のはず。
$ vi web/.htaccess
Options +ExecCGI
以下略


で、アクセスしてみたら問題なかった。

2010年7月12日月曜日

Apacheを再起動しようと思ったらエラーになった。

設定ファイルをリロードしようと思って、

# /etc/rc.d/init.d/httpd reload

としたけど、どうせだから再起動するかと思ってapacheの再起動をかけてみたら下記のようなエラーがでた。

# /etc/rc.d/init.d/httpd restart
httpd を起動中: (98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
[失敗]

再起動に失敗・・・。
何が原因なんだと思ってググってみた。
どうやら原因は何かしらのプロセスが80番ポート使ってるから、再起動できませんってことみたいです。
なんか他に使うようなことしてたっけかなーと思って確認してみた。
80番と443番ポートをオープンしているプロセスを表示

# lsof -i:80,443
httpd 9326 root 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9326 root 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9328 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9328 apache 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9329 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9329 apache 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9330 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9330 apache 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9331 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9331 apache 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9332 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9332 apache 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9333 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9333 apache 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9334 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9334 apache 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9335 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9335 apache 6u IPv6 63291 TCP *:https (LISTEN)

なんかいっぱいでてきた。
でもこれ全部apacheのプロセスじゃん・・・。
restartする時にちゃんとプロセスが終了しなかったのが原因っぽい。
なぜちゃんとプロセスが終了しなかったのかは今のとこ不明。

対応としてはapacheのプロセスをいったん全部killしてあげる。
killコマンドとはプロセスに対してシグナルを送るコマンド。
このシグナルの中にプロセスを終了させる意味のあるシグナルが含まれている。

# kill 9326

で、プロセスが全部終了しているか確認。

# lsof -i:80,443

何も出なければOK。
apache再起動する。

# /etc/rc.d/init.d/httpd restart

これで問題は解決。
よかったよかった。

2010年7月11日日曜日

よく使うLinuxコマンドをまとめてみた(ファイルの操作関連)

前回、僕がよく使うけどよく忘れるコマンドをいくつか書いたんですが、
どうせならまとめるかと思ってまとめてみました。
とりあえず今回はファイルの操作関連に関するコマンド。
次回以降に続きを書く予定。
予定は未定・・・。


cat
ファイルの中身を表示する。

オプション
-n 行番号を付加する
-b 行番号はつけるが空白行をカウントしない

書式
cat [オプション] ファイル名

例)fileAを行番号を付加した状態で表示する。
$ cat -n fileA



pwd

カレントディレクトリの絶対パスを表示する

オプション
なし

書式
pwd

例)カレントディレクトリのパスを調べる。(/var/www/html以下にいた場合)
$ pwd
/var/www/html



cd
カレントディレクトリを切り替える

オプション
なし

書式
cd 移動先のディレクトリパス(相対でも絶対でもOK)

例)現在のディレクトリから、/var/www/htmlに移動する。
$ cd /var/www/html



ls
ディレクトリ内にあるファイルやディレクトリを表示する。

オプション
-a ドットファイルも含めて表示する
-F 分類記号を付加して表示する。「/」がディレクトリ、「@」がシンボリックリンク、「*」が実行可能ファイル
-l 最終更新日時やファイルやディレクトリのオーナー、パーミッションなどを表示する。
-t ファイルをアルファベット順のソートから最終更新日時でソートしたものを表示する
-R ディレクトリ内を再帰的に表示します。
-C 1行に複数のファイルやディレクトリを表示します。「-1」オプションと同時指定はできない
-1 1行に1つのエントリを表示します。

書式
ls [オプション] (ディレクトリ)

例)現在のディレクトリ内に存在するファイルを全て表示し、パーミッション等を調べる
$ ls -la


cp
ファイルまたはディレクトリをコピーする。windowsでいうコピペができる。

オプション
-i 同名のファイルが存在する場合に確認のメッセージを表示する
-f ユーザーには確認せずに、全て上書きします
-r ディレクトリごとコピーします
-d シンボリックリンクとハードリンクをそのままコピーします
-p 日付やフラグなどのファイル情報をできるだけそのままコピーする
-a コピー元ファイルの構成と属性を可能な限り保持してコピーする。-dprと同義
-u 同名ファイルが存在する場合、コピー元のファイルがコピー先のファイルより新しい場合だけ上書きコピーする

書式
cp [オプション] コピー元のファイルもしくはディレクトリ コピー先のディレクトリ

例)/var/www/html/test.htmlをコピーして/var/www/html/test2.htmlを作成する
$ cp /var/www/html/test.html /var/www/html/test2.html


mv
ファイルまたはディレクトリの移動をする。windowsでいうカット&ペーストやリネームができる。オプションはcpコマンドと同じものが多い。

オプション
-i 同名のファイルが存在する場合に確認のメッセージを表示する
-f ユーザーには確認せずに、全て上書きします
-v ファイルの移動先や変更後のファイル名を表示する
-b ファイルを上書きする場合はファイル名の末尾に「~」チルダがついたファイル名でバックアップを残す
-u 同名ファイルが存在する場合、コピー元のファイルがコピー先のファイルより新しい場合だけ上書きコピーする

書式
mv [オプション] 移動元ファイル 移動先ファイル

例)現在のディレクトリにあるtest.htmlをindex.htmlにリネームしたい
$ mv test.html index.html

例)現在のディレクトリにあるindex.htmlを/var/www/htmlの下に移動させたい
$ mv index.html /var/www/html/index.html


mkdir
新しくディレクトリを作成する。
複数のディレクトリを作成したり、引数に指定したディレクトリが存在しない場合、そのディレクトリを含めて作成することもできる。

オプション
-m パーミッションを指定してディレクトリを作成する
-p 引数に指定したディレクトリが存在しない場合、途中のディレクトリも含めて作成する

書式
mkdir [オプション] ディレクトリ名

例)複数のディレクトリを一度に作成する場合
$ mkdir dir1 dir2 dir3

例)多階層に渡ってディレクトリを作成する場合(/var/www/htmlがあり、/var/www/html/sites/sitenameとディレクトリを作成したい場合)
$ mkdir -p /var/www/html/sites/sitename

例)/var/www/html以下にtestというディレクトリをパーミッション777で作成する
$ mkdir -m 777 /var/www/html/test


rmdir
ディレクトリを削除する。
ただしこのコマンドは空のディレクトリのみ削除できる。
削除対象ディレクトリ内にファイルが存在した場合は、rmコマンドの「r」オプションを利用して削除する必要がある。

オプション
-p 中間ディレクトリを含めて削除する

書式
rmdir [オプション] ディレクトリ名

例)現在のディレクトリ内にあるtestディレクトリを削除する
$ rmdir test


rm
ファイルを削除する。
「r」オプションを利用することでrmdirコマンドと同様の処理が可能。

オプション
-i 削除するかをユーザーに確認してから削除する
-f 削除するかをユーザーに確認しないで削除する
-r ディレクトリを削除する

書式
rm [オプション] ファイル名

例)現在のディレクトリにあるindex.htmlを削除する
$ rm index.html

例)testディレクトリ以下のファイルを全て削除する
$ rm -r test


touch
ファイルの更新日時を変更する。

オプション
-c 引数に指定したファイルが存在しない場合、新規ファイルを作成しない
-m 最終更新日時を変更する
-r file 最終更新日時をfileの日時に合わせる
-t time 最終更新日時をtimeに変更する

書式
touch [オプション] ファイル名

例)index.htmlの最終更新日時を現時刻に変更する
$ touch index.html

例)最終更新日時を2010年7月13日23時59分にする
$ touch -t 201007132359


whereis
プログラムが存在するパスを調べる
似たようなコマンドでwhichがあるが、whichはコマンドのパスのみを表示します。

オプション
-b プログラム(バイナリ)が存在するパスのみ表示する
-m オンラインマニュアルが存在するパスのみ表示する
-s ソースファイルディレクトリが存在するパスのみ表示する
-B path プログラム(バイナリ)検索に使うパスをpathに変更する
-M path オンラインマニュアル検索に使うパスをpathに変更する
-S path ソースファイルディレクトリ検索に使うパスをpathに変更します
-f -B,-M,-Sのオプションを使ってパス指定した場合には、パス指定の終了を表すために使う必要がある

書式
whereis [オプション] プログラム名

例)phpがどこにあるのか調べる
$ whereis php
php: /usr/bin/php /etc/php.d /etc/php.ini /usr/lib/php /usr/share/php /usr/share/man/man1/php.1.gz

例)phpのプログラムファイルが存在するパスだけ表示する
$ whereis -b php
php: /usr/bin/php /etc/php.d /etc/php.ini /usr/lib/php /usr/share/php


2010年7月10日土曜日

よく使うけどよく忘れるコマンド

僕がよく使うコマンドなんですが、よく忘れるのでメモ。


ln
リンクを貼る

オプション
-s シンボリックリンクで別名をつける
-f 同名のファイルがある場合に上書きする
-i 同名のファイルがある場合に上書きするかユーザーに確認する

書式
ln [オプション] オリジナルファイル リンクファイル名

例)/path/to/directory/vendor/pear/data/symfony/web/sfのデータを/path/to/directory/web以下にシンボリックリンクを貼りたい場合
$ ln -s /path/to/vendor/pear/data/symfony/web/sf /path/to/directory/web/



find
ファイルもしくはディレクトリを検索する
検索は再帰的に行われるため開始ディレクトリを指定すれば、
そのディレクトリ以下のファイルやディレクトリが全て検索の対象となる。

検索条件
-name name ファイル名nameで検索する
-mtime n 更新時刻n日前のものを検索する
-user user ファイルのオーナーがuserのものを検索する
-regex regexp パス名の全体が正規表現にマッチするファイルを検索します
-path ptn パス名の全体が文字列ptnにマッチするファイルを検索します

処理方法
-print 検索結果を表示する(デフォルト)
-ls 検索結果のファイル情報を表示する
-exec command [arg] \; 検索結果に対してコマンドcommandを実行する。引数argに"{}"を指定すると、検索結果に置き換えられる
-ok command [arg] \; 検索結果に対してコマンドcommandを確認つきで実行する。引数argに"{}"を指定すると、検索結果に置き換えられる

書式
find 開始ディレクトリ 検索条件 処理方法

例)現在のディレクトリ以下のindex.htmlがどこにあるかを検索し表示する
$ find ./ index.html

例)現在のディレクトリ以下の.svnのファイルを全て削除する
$ find ./ -name ".svn" -exec rm -rf {} \;



grep
ファイル内の文字列を検索する

オプション
-v 指定した文字列パターンを含まない行を表示する
-n 行番号を付加して表示する
-l 指定した文字列を含むファイル名を表示する
-i 大文字と小文字の区別をせずに検索する
-r ディレクトリ以下のファイルを再帰的に読み込んで検索する
-s エラーメッセージを表示しない
-z gzip形式などで圧縮されたファイルを解凍して検索する

書式
grep [オプション] 文字列パターン (ファイル名)

例)index.htmlの中にtestという文字が含まれているか検索
$ grep test index.html

例)psコマンドの実行結果の中からphpを含む業を検索して表示
$ ps auxw | grep php



しかし、Linuxのコマンドを全くもって使いこなせてないし、覚えられてないなー。
もっと色々なコマンドを使うようにならないと・・・。

2010年7月9日金曜日

画像の色を調べる

画像の色と背景色を一緒にしたくて、どうにかして一緒の色にできないかと思って調べてみた。
photoshopのスポイトツールを使うと出来るみたいです。
CS5のWebPremiumにphotoshopがついていたので、今回はそれを使ってやってみた。
スポイトツールを選択して、右クリックすると「カラーをHTMLコードとしてコピー」をクリックすると、
クリップボードに「color="#16進コード"」がコピーされます。
また、「カラーの16進コードをコピー」を選ぶと「16進コード」がクリップボードにコピーされます。

例)白の場合
カラーをHTMLコードとしてコピー
color="#ffffff"

カラーの16進コードをコピー
ffffff

2010年7月7日水曜日

タイムライン上にActionScript書いたらコンパイルエラーになった

初めてタイムライン上にASを書いてみた。
そしたらコンパイルエラー・・・。

「1180: 未定義である可能性が高いメソッド addFrameScript の呼び出しです。」

なんじゃこりゃ。
コメントだけ入れてみてもエラーのまま。
何が原因なんだろうと思って調べてみたら、ドキュメントクラスはSpriteで定義されているのにも関わらず、
stageがMovieClipになっていることが原因みたいです。

自分なりに噛み砕くとドキュメントクラスはSprite(タイムラインを持たない)で定義してあるのに、
Flash IDE上のタイムラインにソースがあるのはおかしいってことみたいです。

なので、対応方法は2つ。
1つめはドキュメントクラスをSpriteからMovieClipに変更する。

例)ドキュメントクラスがMainだった場合
public class Main extends Sprite

public class Main extends MovieClip

2つめはタイムライン上のスクリプトを削除する。
削除というのはコメントアウトということではなく、
タイムライン上に記述されているスクリプト全てを消すことである。

一応この2通りの対応方法がある。

2010年7月6日火曜日

dispatchEventに任意のパラメータを渡す

dispatchEventにパラメータを渡したい場合は自分で拡張するしかないらしい。
FlexSDKには元々mx.events.DynamicEventというものがあるみたいで、それを使えば出来るらしい。
なので、それを元にASのコードを書いてあげればOKみたいです。
ただし、受信側と送信側のどちらにパラメータをつけたいかで実装が変わるようです。
これがDynamicEventクラスの実装。
package {
import flash.events.Event;

public dynamic class DynamicEvent extends Event {
public function DynamicEvent(type:String, bubbles:Boolean = false,cancelable:Boolean = false) {
super(type, bubbles, cancelable);
}

override public function clone():Event {
return new DynamicEvent(type, bubbles, cancelable);
}
}
}


dynamicクラスになっている理由はコンパイルエラーを回避するためらしい。
現在は未検証。

送信側でパラメータを渡したい場合は以下の通り
var event:DynamicEvent = new DynamicEvent("eventName");
event.param1 = "文字列";
event.param2 = [1, 2, 3]; // 配列もOK
dispatchEvent(event);


受信側の設定は以下の通り
// イベントリスナーの設定
addEventListener("eventName", callbackFunction );

// コールバック側
private function callbackFunction(event:DynamicEvent):void {
trace(event.param1);
}


受信側でパラメータを渡したい場合は以下の通り
package {
import flash.display.Sprite;
import flash.events.Event;

public class MyClass extends Sprite {
// constructor
public function MyClass() {
var counter:int = 0;
//addEventListener()の第二引数をクロージャとして渡している
stage.addEventListener("click", function(event:Event):void {
clickHandler(event, counter++);
});
}

// コールバックメソッド
private function clickHandler(e:Event, counter:int):void {
trace( e.type + ':' + counter );
}
}
}


参照元:http://blogs.yahoo.co.jp/k3_labs/4399737.html

2010年7月5日月曜日

AS3のfor文で次の繰り返しに行く

AS3のfor文で次の繰り返しへいきたい場合は「continue」を使う。
JavaScriptと同じだけど、最近はJqueryばかり使っていたので「return false」とか書いてしまった・・・。
一応メモ。

var b = [1,2,3,4,5,6,7,8,9,10];
for ( var a in b ) {
if ( a > 5 ) continue;
trace(a);
}
// 出力
1
2
3
4
5

2010年7月2日金曜日

adobe製品のクロスアップグレード

Win版で無償アップグレード付きのCS4買ったけど、将来的にはMacにしたいなぁーと思って色々調べてみたら、
実はWin版からMac版へのクロスアップデートは可能らしい。
こんな記事が出てきました。
クロスアップグレードって出来ないものだと思っていたので、ちょっとびっくり。
大々的に言っていないだけでカスタマーサポートポータルから連絡入れれば出来るみたいです。
Win版のCS4のWeb Standard買った時点でMac版は諦めてしまっただけにちょっとショック・・・。
CS6が出たら参考にしよう。

AS3でswf自身のパスを取得する

swf自身が設置されているパスを取得するには以下の通り。
ドキュメントクラスの場合は
root.loaderInfo.url;

で取得することが可能。

2010年7月1日木曜日

Flash CS5のActionScriptエディター

Flash CS4のActionScriptエディターがあまりにも使いにくかったので、
CS5には期待してたんですが、やっぱFlashDevelopの方が使いやすいかも。
関数とかクラス名とかの色や、コードアシストとかもFlashDevelopの方が僕的には使いやすいですね。
これからもFlash CS5とFlashDevelopの両方を駆使して作っていこうと思います。