2013年10月30日水曜日

swf swfmillを使ってみる

swfをxmlに変換してくれるツールがあるということで使ってみた。
主にflashを動的に変換するために使われていたみたい。だよね?

参考サイト
swfmillで動的FlashLite作成!

上記のサイトでバグを修正したバージョンがおみやげとして用意されているのでありがたくいただいておこう。

使い方


なにも難しいことはなく、ダウンロードして展開したら、コマンドプロンプトで展開先へ移動。
exeを叩いてやる。

/*---------------------------------------------------------------------------*/
    swfmill swf2xml hoge.swf hoge.xml
    swfmill xml2swf hoge.xml hoge.swf
/*---------------------------------------------------------------------------*/

文字コードはutf-8を使用しているので、sjisだったりするとエラーで怒られる。
そういう時はオプションを指定してやるといいようだ。
文字コードが合っているときに無駄に使用するとかえって文字化けするみたいなので注意。

/*---------------------------------------------------------------------------*/
    swfmill -e cp932 swf2xml hoge.swf hoge.xml
    swfmill -e cp932 xml2swf hoge.xml hoge.swf
/*---------------------------------------------------------------------------*/

ところで、2ってなんじゃいと思っていたらそのままtoという意味らしい。いや、うん。まあ、うん。
…ええ?


以上、swfmillのかなり適当な使い方。
swfを色々いじくっているので、単純にバイナリデータが可視化されるだけでもうれしい。

2013年10月22日火曜日

Photoshop7スクリプト レイヤーセットをフォルダ別に保存する

前回は単純にレイヤーを保存したので、今回はレイヤーセットに分けられたレイヤーを
セット名と同じ名前のフォルダに保存する。
セットに含まれないレイヤーは考えない。

作業工程

  1. 処理を行うレイヤーセットのみを可視化する
  2. レイヤーセットの名前を取得する
  3. 新しいフォルダを作成する
  4. レイヤーセットの中の処理を行うレイヤーをアクティブにする
  5. レイヤーをフォルダに保存する
前回の処理にレイヤーセットというひとつ上の枠組みが加わっただけ。

処理を行うレイヤーセットを可視化する


レイヤーと同じでvisibleというプロパティがあるので、それを弄る。
処理前に全部を不可視にしてから、処理の際に弄るやつだけを可視化するのがいいと思う。

レイヤーセットの名前を取得する


レイヤーセットの中にnameというプロパティがある。まんま。

新しいフォルダを作成する


すでにフォルダがある場合も考慮してexisitsでチェックする。

/*---------------------------------------------------------------------------*/
var folder = new Folder( folerName );
if( folder.exists || folder.create() ) {
// レイヤーをアクティブにして保存
}
/*---------------------------------------------------------------------------*/

existsメソッドでなかった場合のみ新しくフォルダを保存する。
どっちの結果もだめだった場合は処理しない。

あとはちゃんとフォルダのパスを指定してレイヤーを保存すればオーケー。

2013年10月21日月曜日

Photoshop7スクリプト Re:レイヤーをPNGファイルで書き出す

色々Photoshopのスクリプトを弄っていてなんとなくテクスチャアトラスの仕様が浮かんできたような
気がしないでもないので、作成の前に頭の中の整理も兼ねて必要な機能を試して行く。

今回は単純に現在の画像のレイヤーをPNGファイルで書き出すスクリプト。
すでに1回やっているけど、シンプルにまとめられた気がするのでもう一回やっとく。

作業工程

  1. 処理を行うレイヤーをアクティブにする。
  2. レイヤー名を取得する。
  3. レイヤーの画像をコピー。
  4. 新しいドキュメントを作成する。
  5. 作成したドキュメントに画像を貼り付ける。
  6. 作成したドキュメントの表示部分を結合する。
  7. ドキュメントをPNG形式で保存。
上の処理をレイヤー分繰り返す。

・処理を行うレイヤーをアクティブにする


ちゃんとコピーしたい画像だけ処理しよう。
これはドキュメントもだけど、ちゃんと操作したいやつをアクティブにしておかないと怒られる。
ループの前に全レイヤーを不可視にして、ループの先頭で処理を行う。

/*---------------------------------------------------------------------------*/
doc.activeLayer = doc.layers[i];
doc.layers[i].visible = true;
/*---------------------------------------------------------------------------*/

ループの最後にレイヤーを不可視にするのも忘れずに。

・レイヤー名を取得する


レイヤー名をそのままファイル名に使うので必要な処理。自分で名前をつけるなら必要ない。
レイヤー名は ドキュメント.layers[レイヤーインデックス].name の中に入っている。

・レイヤーの画像をコピー


ドキュメントを全選択してコピーを行う。

/*---------------------------------------------------------------------------*/
doc.selection.selectAll();
doc.selection.copy();
/*---------------------------------------------------------------------------*/

・新しいドキュメントを作成する


documentsのaddという関数を使う。引数には元のドキュメントの値をそのまま渡せばいいと思う。
戻り値として新しいドキュメントが返ってくる。

・作成したドキュメントに画像を貼り付ける


新しいドキュメントを全選択してpasteメソッドを使う。
この時引数にtrueを渡すと選択範囲に貼り付けになる。

・作成したドキュメントの表示部分を結合する


新しいドキュメントでmergeVisibleLayersメソッドを使う。
この処理をしないと保存するときにダイアログが表示されてしまうようだ。

・ドキュメントをPNG形式で保存


/*---------------------------------------------------------------------------*/
var file = new File( "新しいファイル名" );
var pngOpt = new PNGSaveOptions();
dstDoc.saveAs( file , pngOpt, false, Extension.LOWERCASE );
dstDoc.close();
/*---------------------------------------------------------------------------*/

ファイルは保存するときにちゃんとパスを指定しよう。指定しないと保存されないっぽい?
ドキュメントのフルパスからファイル名なり拡張子を抜き取るのが楽。
PNGSaveOptionsの中身で保存するときのオプションを設定できる。
saveAsで最後に指定しているのは拡張子のオプション。今回は小文字で保存する。
このドキュメントはもう使わないので、保存したらcloseで閉じている。

とりあえずタイトルどおりのスクリプトを作ったときの処理と、
処理の簡単な内容及び注意事項をまとめてみた。
かなり長くなってしまったなあ。

2013年10月15日火曜日

MySQL 連番を振る

テーブルに新しいカラムを追加した際に、ユニークな連番を振らなくちゃならなくなった。
どう考えても手作業じゃ面倒だぞ、と思っているときにいい情報を見つけたのでメモ。

参考サイト
MySQL連番を振る ≪ グリニッジ株式会社

/*---------------------------------------------------------------------------*/
    SET @i := 0;
    UPDATE データベース名 SET カラム = (@i := @i +1);
/*---------------------------------------------------------------------------*/

MySQLって変数使えたのね。

2013年10月11日金曜日

Photoshop7 スクリプトでレイヤーをPNGファイルに書き出す

psdファイルからレイヤーを読み取ってpngファイルとして出力できないかな、と
思って調べていたら、そもそもjavascriptでPhotoshopそのものに機能を追加できるらしい。
早速使ってみた。

参考サイト

Photoshop7でスクリプトを使用できるようにする

CS系列にはデフォルトでスクリプト機能が用意されているみたいなんだけど、7にはない。
AdobeさんからPhotoshopScripting102aというexeファイルをダウンロードだ!
実行すると、「ファイル」→「自動処理」の欄にScripts...というメニューが追加される。
最初からサンプルがあるので適当に実行。ばっちり動いた。

レイヤーをPNGファイルに書き出す

そらかぜ工場さんの「スクリプトを使う」のページからPhotoshop7用の
SplitLayersというスクリプトをダウンロード。
実行するとpsdファイルがあるフォルダにレイヤー別にpsdファイルとして出力される。
psdファイルとして、出力される。

今回の目的はPNGファイルとして書き出すこと。しかしネット上には情報がないぞう。
というわけでリファレンスとにらめっこしつつダウンロードしたファイルを弄ってみました。
FileオブジェクトのsaveAsメソッドでデータを保存しているようなので、単純に考えてここかな、と
あたりを付けて調べる。

/*---------------------------------------------------------------------------*/
newFile = new File( baseName + layerName ); // 新規ファイル名
newDoc.saveAs( newFile, saveOpt, false, Extension.LOWERCASE ); // 保存
newDoc.close(); // 作成したファイルを閉じる
/*---------------------------------------------------------------------------*/

最初は拡張子でExtensionじゃない? と思ったんだけどリファレンスを見る限り違うっぽい。

/*---------------------------------------------------------------------------*/
    Extension
    LOWERCASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    NONE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    UPPERCASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
/*---------------------------------------------------------------------------*/

それで次に目をつけたのがsaveOpt。保存のオプション。怪しい。
SaveOptionsでリファレンスを検索してみたら、PNGSaveOptionsを発見。
引数saveOptをPNGSaveOptionsに変更してみたら、PNGで書き出しができた。


ネットにあるのが基本的にCSの情報っぽいのがきつい。
今回みたいにもとになるものがあるならなんとかなるけど、0から作るのは厳しいかも。
リファレンスとのにらめっこは必須なり。

2013年10月10日木曜日

Python PIL(pillow)を入れてAtlasGenを動かす

Pythonを入れた目的であるAtlasGenを動かす。

PIL(pillow)をインストールする


AtrasGenを動かすにはPILが必要だというので、インストールする。
PILは開発が停止しているため、pillowをインストールするほうがよさそう。
2.7にはPILも対応しているらしいので、PILでもいいかもしれない。

なにはともあれ早速インストール。
ここで注意するのが、pipでインストールしないこと。easy_installを使う。
pipでインストールすると、インストール時に律儀にビルドしてくれちゃって、
jpegやzlibをちゃんと入れていないと使えないpillowが作られちゃう。


これでかなり詰まった。わざわざ自分でlibjpegをインストールしたり、かなり遠回りした。
eazy_installでさあ、インストール!

/*---------------------------------------------------------------------------*/
    easy_install pillow
/*---------------------------------------------------------------------------*/


AtlasGenを使う



このサイトが分かりやすい。画像ファイルなんかもそのままいただいちゃってテスト。
無事ファイルが生成されたー。
pillowでかなり詰まったのでとても長かった。


今回できたテクスチャを見る限り配置はちゃんと極力無駄なく作成されるようになっているのかな?
アルゴリズムを解析して、photoshopのレイヤーからアトラステクスチャ作る
スクリプトとか作ってみたい。

Python インストール+pipを入れる

AtlasGenというテクスチャ自動配置ツールを見つけたので、
こいつは面白そうだ、と早速使ってみようとしたらば、Pythonで動くツールだった。
というわけでPythonをパイソンと読むことすら知らなかった自分が
Pythonとpipというものをインストールしてみたお話。

Window版Pythonをインストールする


Windows環境でやっているので、まずはサイトからWindows用のインストーラーを入手。
AtlasGenは3.x系では動かないようなので、2.7を入れる。
3.x系は後方互換が無視されているので、文法が変わっていたりするらしい。

インストールしたら環境変数にパスを通す。
マイコンピュータのプロパティ、詳細設定タブから環境変数をぽちっと。
PATHにインストールしたフォルダを追加。

/*---------------------------------------------------------------------------*/
    PATH=C:\path\Python27;
/*---------------------------------------------------------------------------*/

コマンドプロンプトでpythonを実行する。
なんか色々出てきて最後に >>> と出ていれば成功。

distributeをインストールする


easy_installというコマンドを使用するために必要だそうな。
いろんなものをイージーにインストールできるようになる。んだと思う。
古いサイトだとsetuptoolsと表記されていたりするけど、
更新がストップしたsetuptoolsの代わりに配布されているのがdistributeらしい。


distributeのインストールは簡単。こいつをダウンロードしてPythonで実行。

/*---------------------------------------------------------------------------*/
    python distribute_setup.py
/*---------------------------------------------------------------------------*/

pipをインストールする


/*---------------------------------------------------------------------------*/
    easy_install pip
/*---------------------------------------------------------------------------*/

以上です。ほんと、以上です。


これで大抵のサイトで紹介されているPythonの基本環境の構築ができた。はず。

2013年10月4日金曜日

jQuery leanModalを使ってみる

ボタンを押すと新しいウィンドウが出てきて、他の操作ができなくなるやつ。
モーダルダイアログというらしい。だからModalか。
今回はその中でも基本的な機能のみのleanModalを使う。

/*---------------------------------------------------------------------------*/

leanModalをダウンロードする

サイトからjsファイルをダウンロード。cssはセットになっていないので自分で作る。
ダウンロードしたのと同じサイトにサンプルがあるからそのままコピペでも十分。

leanModalを使う

以下のサイトがわかりやすく説明してくれてる。

表示するために追加する要素はきちんとdisplay:noneしてあげよう。
でないと一度実行されるまで堂々と画面に存在してくれちゃう。

/*---------------------------------------------------------------------------*/

基本的な機能のみというものの、これだけで十分な気もする。
closeButtonを指定してあげれば、閉じる用のボタンも作れる。

なにより基本機能しかないということは、カスタマイズ性が高いということ。
自分がほしい機能によっては既存のものを探すより、leanModalをもとにして自分で
作ったほうが早いかもしれない。


2013年10月1日火曜日

CakePHP ページネータの動作をモデルで定義する

正直、ページネータがモデルでなくコントローラにあるのってなんかおかしくない?
あくまでモデルのデータをどうこうしているのであって、コントローラの領分でないような。
と思いつつ使いますが。

通常通りでは普通にモデルからfindを呼んでくるだけのところを、モデルで
以下のメソッドを定義してやれば、自分でデータの取得の動作を定義することができる。

/*---------------------------------------------------------------------------*/

public function paginate( $conditions, $fields, $order, $limit, $page, $recursive, $extra )
public function paginateCount($conditions, $recursive, $extra)

/*---------------------------------------------------------------------------*/

それぞれデータの取得と全体数を取得するときに使うメソッド。
引数の中身はCakePHPを使っているなら名前で大体分かると思う。