liの中にブロック要素化したaタグを置くと、IEでへんな隙間が空く件の解決法
IEでは、リスト内のaなどをdisplay:block;にすると、line-heightの解釈がおかしくなるらしい。で、変なすき間が空く、と。
解決法は、
li{
display:block;
font-size:1px;
}
a{
display:block;
font-size:small;
}
のように、liの方ではfont-sizeを1pxに指定し、aタグの方で元も戻す。
Flashのムービ−クリッピインスタンスをビットマップ画像としてサーバーに送信
Flashで動作するお絵描きツール的なものをよく見かけますが、描いたものをビットマップデータとしてサーバーに送信するにはどうすればいいか。
今日ちょっと調べたらわかりましたので、メモメモ。
※AS3のみです。
処理の概要は、
というものです。
Flash側
1.使用する2つのライブラリをダウンロードします。
as3corelib:
http://code.google.com/p/as3corelib/
as3crypto:
http://code.google.com/p/as3crypto/
2.作成するswfファイルと同じディレクトリに"com"というディレクトリを作成し、その下にそれぞれ以下のフォルダをコピーします。
as3corelib:
corelib/src/com/adobe
as3crypto:
Crypto/com/hurlant
4.送信アクション用のボタンを設置します。(インスタンス名は、ここでは"myButton"とします)
5.フレームアクションとして、以下のアクションを入力します。
import com.adobe.images.*;
import com.hurlant.util.*;
//ビットマップ化
var bmp:BitmapData = new BitmapData(300,300);
bmp.draw(canvas);
//ビットマップオブジェクトをテキスト化
var str:String = Base64.encodeByteArray(PNGEncoder.encode(bmp));
//テキスト化した文字列をURLエンコード
var escstr:String = escapeMultiByte(str);
//送信ボタンのイベントリスナーとアクションを設定
var myButtonListener:Object = new Object();
myButton.addEventListener(MouseEvent.CLICK,onClick);
function onClick(event:MouseEvent):void{
var request:URLRequest = new URLRequest('http://***/test.php?img='+escstr);
navigateToURL(request);
}
CakePHPにバッチ処理を組み込むには
CakePHPで構築したアプリケーションにおいても、バッチ処理を組み込みたいケースはよくある話かと思います。僕は、CakePHPデビュー戦でいきなりバッチ処理を必要とするアプリケーションを作ろうとしてしまったので、どういうふうに組み込むのか、作法がわからず戸惑ってしまったわけですが。
いまだに戸惑いつつも、どうやらこういうことらしいというのは何となくわかったので、備忘録として書きます。
(CakePHP1.2ベースで書いてます。1.1は違うかも)
バッチ処理用PHPファイルの置き場所
ドキュメントルートにCakePHPの各種ファイル群を設置すると、ドキュメントルート配下に以下のようなディレクトリができているはず。
- /app/vendors/shells
- /vendors/shells
どうやら、このどっちかに設置するようです。
どっちに設置しても動作するみたいですが、どう使い分けるのが作法的に正しいのかは、いまのところ不明。僕は/app/vendors/shellsの方に設置しました。
バッチ処理用PHPの書き方
バッチ処理の名前を"hoge"とつけたいとすると、PHPのファイル名は、
とします。
class HogeShell extends Shell {
function main() {(実行したい処理の内容を書きます)
}
}
後述する起動方法でこのバッチ処理を起動すると、上記で定義したmain()というメソッドが実行されます。
さて、実際問題としては、バッチ処理内でDBにアクセスしたいというケースがほとんどと思われます。
CakePHPでは、DBのテーブルにアクセスする命令を個別のソース内にゴリゴリ書くのではなく、各テーブルに対応させて作成した「モデル」を介してアクセスするのが作法です。この作法は、バッチ処理でも同じです。
たとえば"Post"というモデルをバッチ処理内で利用したいときは、以下のように書きます。
class HogeShell extends Shell {
var $uses = array('Post');function main() {
(実行したい処理の内容を書きます)
}
}
ここで出てくる"$uses"という変数は、コントローラーから別のモデルを利用したいときにも用いられるものらしいです。
バッチ処理の実行
作成したバッチ処理を実行する方法ですが。
とりあえず今はMAMPの開発環境上に構築しているので、その前提で書きます。
仮に、
/Applications/MAMP/htdocs/test
の下にCakePHPのファイル群を設置しているとすると、ターミナルで以下のように入力することで、バッチ処理を実行できます。
/Applications/MAMP/htdocs/test/cake/console/cake hoge -app /Applications/MAMP/htdocs/test/app/
これにより、/app/vendors/shells/hoge.php内で定義されたHogeShellクラスのmain()メソッドが実行されます。
MAMP環境で実行すると発生するエラーの解決法
上記の方法でバッチ処理を作成し、テスト的にターミナルから実行!
…すると、なにやらWarningが出てくるかと思います。
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (2) in /Applications/MAMP/htdocs/blogseeq/cake/libs/model/datasources/dbo/dbo_mysql.php on line 118
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blogseeq/cake/libs/model/datasources/dbo/dbo_mysql.php on line 123
...
こんな感じに。
これ、なんじゃろ?と思って検索してみたら、同じ問題に行き当たって見事解決している方がいらっしゃいました。
ターミナルで以下のように入力すればいいようです。
cd /var
sudo mkdir mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock
ド文系の僕には理解不能でしたが、そのまま入力したところ、見事Warningが出なくなりました。
いまのところわかったのは、とりあえずここまで。
先に進んで、また何かわかったら書きます。
MAMP環境にCakePHPを導入する
CakePHPは、Ruby on Rails風のPHP開発フレームワーク。
小規模のアプリケーションを作る分には全く必要ありませんが、複数の機能が絡み合ったそこそこ大規模なアプリケーションを作るなら、導入してもいいかも。
(Ruby on Railsと違って、PHPが動くサーバー環境ならどこでも(たぶん)動作する、というのも魅力です)
CakePHPのダウンロード
以下のサイトからダウンロードできます。
現時点の安定バージョンは1.1ですが、1.2を導入しておいた方がいいような気がします。というのは、1.2では、記述するコードがいろいろ変わる(1.1で使えていたコードが使えなくなったりする)ので…。僕は1.2にしました。
CakePHPをMAMP環境に設置
CakePHPは、特別なインストールなどの手続きは一切必要なく、ウェブアプリケーションを構築するドキュメントルートに、ダウンロードしたファイル群をまとめてボンとおけばいいという、とても簡単なものになっています。
僕はEclipseを使っているので、Eclipseを使う前提で説明します。
まず、Eclipse起動時に指定するワークスペースを、以下のディレクトリに設定します。
/Applications/MAMP/htdocs
ここは、MAMPでウェブアプリケーションを構築するドキュメントルートです。(初期設定ではこうなってます)
これでEclipseを起動したら、新規のPHPプロジェクトを作成。
(仮に、プロジェクト名=hoge とします)
すると、
というディレクトリができているはずなので、この配下にCakePHPのファイル群を設置します。
先ほどダウンロードした圧縮ファイルを解凍して、中に入っているファイル群を全部まるごとドンと、上記ディレクトリにコピペします。
このとき気をつけなければいけないのは、Finderの標準設定では非表示になっている.htaccessももらさず移動させなければいけないということ。
.htaccessを移動しそこねると、CakePHPを動かしてページを表示させたときに、スタイルシートがきいていない画面が表示されるなどの不具合にぶつかります。
"."で始まる隠しファイルをFinder上で確認しながら作業するには、Finderの設定を変更して、隠しファイルを表示させる設定にするのがいいかもしれません。
設定方法は、ターミナルを立ち上げ、
defaults write com.apple.finder AppleShowAllFiles TRUE
と入力するだけ。
ちなみに、元に戻すときは、
defaults write com.apple.finder AppleShowAllFiles FALSE
でOK。
また、
killall Finder
と入力すると、Finderが再起動します。これで設定が反映されます。
これで設置は完了。(といっても、DBとの連動などは一切していませんが…)