script

jQueryアコーディオンメニューddaccordion.js (Accordion Content script)の設置メモ

ddaccordion.js v1.9現在のお話
Dynamic Drive DHTML Scripts- Accordion Content script (v1.9)

このjs最後にクリックした要素をcookieに保存して
ページ変移後に最後にクリックした要素を開いた状態で移動出来るという便利なオプションがあるんだけど
子を持たない親だけのメニューが混ざっていると、
最後に子メニューを持った親をクリックした場所を記憶してしまい
ページ変移後に変なところが開いてしまう(分かりづらいと思うけど)
みたいな面倒な感じだったので途中経過をメモ。

多分すべての要素が子階層を持っているなら問題は無いのだけれども。

続きを読む

Firefoxでwindow.innerWidthとdocument.body.clientWidthの値がおかしい

[image]取得する値が合わない
(1マス=100px)

ブラウザのbody部分のサイズを取得したくて

とやってみたらFirefoxが吐き出す値が大きすぎるうえに
あるサイズ以下になると一定の値しか返さなくなる。

アドオンがいけないのかな?とか色々消していったら
ナビゲーションツールバーを非表示にした時に期待した値を取れるようになりました。

[image]ナビゲーションツールバーを非表示

ナビゲーションツールバーを無視してサイズを取得するにはどうしたらいいんだろう…

PhotoshopCS2以降でオブジェクトを等間隔に分布させる.jsxがあったよ。

illustratorやFireworksにある等間隔に分布ってものそい便利じゃないですか。
でも残念な事にphotoshopは出来ないんですよね、残念な事に。

そこでjsxで出来ないかな?と調べて書いてみようと頑張ったんですけど、
複数選択したレイヤーの情報を取得する事すら出来ずに挫折しました(割と手前の壁)。

しかし、海の向こうではすでに等間隔に分布させるjsxを作って配布されてる方がいらっしゃいました、すごいなー。

ダウンロード:Adobe Photoshop Scripts | Trevor Morris Photographics
垂直方向用のjsxしか試してないけど、水平方向用や他にも沢山jsxがありまんた。

分布結果の違いを比べてみた画像

整列前の適当な配置、青い背景はサイズが分かりやすいようにとつけちゃった。
[image]元の配置

photoshopの左端を分布 / 重なるよねぇ
[image]左端を分布で整列させた結果

photoshopの水平方向中央を分布 / 最初何が起きたのか理解できなかった。
[image]水平方向中央を分布で整列させた結果

photoshopの右端を分布 / 重なるよねぇ
[image]右端を分布で整列させた結果

Adobe Photoshop Scripts | Trevor Morris Photographics
Photoshop > Scripts > Distribute Layers Horizontallyを使用
[image]Distribute Layers Horizontally 0-1-4.jsxを使った結果
SUGEEEEEEEEEEEE!!!!!1
愛してる!!!!!!!!!

.psd内のテキストレイヤーからテキストを抽出して.txtファイルに書き出してくれる.jsx

Bram.us(ファイルのあるサイト)

Bram.us » PS_BRAMUS.TextExport 1.3 – Automatically export all Text layers from Photoshop PSD to a Text file (PSD2TXT)

(レイヤー階層で)下にあるテキストレイヤーから順番にテキストを抽出してテキストファイルに書き出してくれる.jsx

フォルダ階層が深いと処理にものすごく時間がかかって不安になる。
逆にフォルダ階層が浅いとテキストレイヤーの数が多くても結構速く終わる感じがしました
(The quick brown fox jumps over the lazy dog.と書いてあるテキストレイヤーを60程複製したpsdを処理させたらだいたい10~20秒くらいで完了しました)。

複数psdを開いている場合

TextExport has detected Multiple Files.
Do you wish to run TextExport on all opened files?

と聞かれるので、開いているファイル全て処理したいなら「はい」にして
選択してるファイルだけ処理したいなら「いいえ」を選ぶ。

随分昔からあるscriptみたいだけど知らなかったなぁ、あると便利でした。
という事でメモ。

さくらインターネットのスタンダードプランでphp5.3.3をインストールして使う

使用したSSHクライアント / index – Terminal Emulator Poderosa
(さくらインターネットの公式で例に挙げられていたので使った、秘密鍵というのを何度チャレンジしても作れなくてログインが面倒くさい)

このサイトを参考にしてインストールしました。

さくらのレンタルサーバーで、php5-mysqli をつかえるようにする覚書。(PHP5.3.0をコンパイルして使う) – れいさ屋

上記サイトに書いてある順番そのまんま入力していくだけでphp5.3.3のインストールに成功した(※コンパイル時のコマンドでmysqlに関係するところを省略したけど)。
サイトが移転したようなので、消えないと思うけど念のため記事を一部引用させていただきます。

※php-5.3.0をphp-5.3.3に変更して使った

作業ディレクトリの作成

mkdir tmp
cd tmp

PHPをダウンロード・解凍

wget http://jp.php.net/get/php-5.3.0.tar.gz/from/this/mirror
tar zxvf php-5.3.0.tar.gz

* TABキーによる補完が利用できます

コンパイル

cd php-5.3.0
./configure --prefix=/home/ --with-config-file-path=/home//www/ --enable-force-cgi-redirect --enable-mbstring --enable-mbregex --enable-calendar --enable-pdo --with-pcre-dir=/usr/local --with-openssl=/usr --with-iconv=/usr/local --with-gd --with-zlib=/usr --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-ttf --with-freetype-dir=/usr/local --with-mysql=/usr/local/mysql/5.1 --with-pdo-mysql=/usr/local/mysql/5.1 --with-mysqli=/usr/local/mysql/5.1/bin/mysql_config --enable-soap --with-curl --with-xsl=/usr/local --enable-dom --with-gettext=/usr/local --enable-exif

* の部分は、書き換えてください。
* ミソは、–with-mysqli=/usr/local/mysql/5.1/bin/mysql_config これです。

renice +20 -u
make
make install

使って見るには:

このままでは今回コンパイルしたPHPは、使われることはありません。

ドメインごとに、以下の手順をする必要があります。

・例: www.example.com (/home//www/example.com/)でつかえるようにする場合

mkdir /home//www/example.com/cgi-bin
cp /home//bin/php-cgi /home//www/example.com/cgi-bin/php5.cgi

このようにしてphp-cgiをコピーしたら、~/example.com/ディレクトリ上に、.htaccessを作成します。

内容は、

Action php5-script /cgi-bin/php5.cgi
AddHandler php5-script .php .php5

こんな感じにします。すると、.php拡張子にアクセスを試みた場合、/cgi-bin/php5.cgiでphpコードが実行されるわけです。ちなみに、デフォルトでmysqliは有効になっています。特に設定は弄る必要ないです。
(推奨)php.iniの設定

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
;mbstring.http_output = UTF-8
mbstring.detect_order = auto

date.timezone = Asia/Tokyo

コイツは、.htaccessと同じディレクトリに設置しましょう。
おわりに

* mysqliに限らず、その他組み込まれていないモジュールについても、この方法でつかえるようにすることができます。詳しくは、php公式サイトあたりをご覧ください。

php.iniの設定のdate.timezone = Asia/Tokyo、これ大事ぽかった。

なんでphp5.3.3をインストールしたかったか、事の経緯

iPhoneのユーザー辞書用にファイルを変換するサイト(ココとかこことか)はphpで作ってて、sqliteをいじったり作成したりするのにPDOクラス(php5.1以降で対応)やらSQLite3クラス(php5.3以降で対応)やらを使ってる。

動作テストはローカルのxamppでやってた(phpのバージョンは5.3.1みたい)。
なのでPDOクラスもSQLite3クラスも問題なく使えてた。

だがしかし、残念な事に作成したphpを実際に走らせるこのサーバーのphpは5.2.13(CGI版)だった(さくらインターネットのスタンダードプラン)。
つまり本サーバーではSQLite3クラスが使えない。

そんな最初に気づいておかなきゃいけない大事な事も気にかけずに、よみと単語の.txtを.sqliteに変換して追加したり作成するphpを作ってローカルでテストして問題なさそうだったので、本サーバーにアップしたらあたりまえのように動かない。

せっかく作ったプログラムがこのままだと使えない。
なのでSQLite3クラスを使えるようにする方法を探す。

PECLのSQLite3拡張モジュールを使えば大丈夫?

PECL :: Package :: sqlite3 :: download

さくらインターネットのスタンダードプランのサーバーにPECLをインストールさせるには、どうもautoheaderとautoconfを弄らないと使えないみたいなんだけど、うちの頭が悪すぎた為にうまいこと設定が出来ずインストール出来なかった。

参考 / さくらインターネットにPECLをインストール [dozo dokuwiki.php]

なので、php自体を5.3以上にしてしまえ!と思ったわけです。

mb_strlen()で変な値が返ってくる時は文字エンコードを指定する。

strlenは文字列の長さを取得する関数で戻り値はバイト数らしい。
そして、mb_strlenはマルチバイトを考慮して文字列の長さを取得できるそうだ。

こんな感じ。

けれど、ローカルのxamppでは以下の値を取得してしまった。

phpの内部エンコーディングと合わない時にそうなるみたいで、
解決法はmb_strlen()関数の第2引数に文字エンコードを指定すれば良いみたい

あーびっくりした。

参考 / 21. mb_strlen()関数の落とし穴 – PHP TIPS:ITpro