2008年11月18日火曜日

jQueryでSelectの表示を変えるプラグイン



元ネタは、こちらを参考にさせていただきました。



プルダウンで都道府県などを入力(選択)するイライラを解消するPrefSupport.js


http://moto-mono.net/2008/07/19/prefsupport.html



プルダウンでたくさんの選択肢を表示するときに、スクロールバーがでてしまうのは


どうも、不恰好だなぁと思ったことのあるかたなら、利用してみてください。


デモ


JQueryでselectタグのプルダウンをカスタマイズする demo


ダウンロード


jquery.cs.js


利用には、jQueryが必要です。


追記(2009/11/20):jQuery-1.3.2 に対応いたしました。








特に、デザイン的に配慮はあまりしていませんので、シックで無骨な感じが気になる方は


素敵なデザインでサンプルを作ってもらえるとうれしいです。


プログラム的に、いろいろ悩んだところは


select タグをクリックすると、デフォルトのプルダウンが即座に出てしまうのを


Javascriptでどうやって制御するのかに苦労しました。


ブラウザごとに、プルダウン表示のタイミングが違うみたいで最終的に



1 mousedown event 取得
2 focus 実行
3 select disabled 属性 ture
4 blur 実行
5 event stop 実行


この順番で、処理をすると、意図した通りになりました。


(IE6,IE7,FF3,GC)


この辺は、ソースを見てもらえればわかると思います。


また、もっと上手な方法があるよーって方は、教えてもらえるとうれしいです。





2008年11月7日金曜日

MySQL の Out of memoryで悩む



mysql で、最近たまにエラーログに以下のような Out of memory が出ていた。


サーバは、メモリーを 6G 積んでるので Out of memory ってのが


そんなに簡単にでるとは思ってなかったので困惑してしまった。


(半年前までは、1G で、増強したばっかりだったので。。。)


今回の環境


MySQL-server-5.0.51a-tritonn.1.0.9


CentOS5.2


すべてのクエリーに対して出ているわけではなく、たまに出るって感じ。


毎秒100件程度のクエリーに対して、1日で10~20件程度、時間帯も混んでる時間帯のような気がするが


それほどでもないときもたまに出ていた。




081106 12:12:05 [ERROR] /usr/sbin/mysqld: Out of memory (Needed 2091016 bytes)



いろいろ調べてみたのだが、これといってぴったりの情報もなし。


海外のコミュニティーで同様の質問している人は見つけたけど、


読み進めても、英語なもんでどういう風に話が進んだのか詳細はわからず。


http://forum.mysqlperformanceblog.com/s/mv/tree/577/


クライアント側でメモリーがたらないかもとか、mysql の本家にはあったけど


どうもそういうわけではない。。。


http://dev.mysql.com/doc/refman/5.1/ja/out-of-memory.html


MySqlユーザMLのほうで、スレッドごとにメモリを消費する、sort_buffer_size あたりを


小さくすれば解決したらしい内容があったので試してみる


(ちょっと内容は古いし、バージョンも異なるけど)


http://www.mysql.gr.jp/mysqlml/mysql/msg/14193




myisam_sort_buffer_size=64M <- 128M
sort_buffer_size=2M <- 8M



とりあえずは、エラーログはでなくなったんだけど、


これでよかったのかな。何か間違った解決をした気がしてならない。


(行き当たりばったりだな、ホンと)


スレッドで使用するメモリー量 × 同時接続スレッド数=メモリ消費量


ってのは、わかるんだけど オーバーしたら即 Out of memory ってのもなんだかなぁ。


古いメモリーを自動的に解放したりしないのかなぁ。GC的なものは期待しすぎ?


ちょっとこの辺の仕組みにうといです。勉強不足ですみません。


まぁどのクエリーのときに、Out of memory がでるのかトレースできたら


一番よかったんだけど、毎秒 100 件近く走ってるクエリーを時間もばらばらなものを特定するのは


至難の業だなぁーっと。。。ものぐさな考えで、あきらめていました。


MySQLのパラメータの設定は、1からちゃんと勉強しなおした方がよさそうだなぁ。





2008年9月11日木曜日

AUの携帯端末でselect 内が改行される



以下のようなHTMLをAUの端末(W41H)で書いたときの話です。


DocomoやSoftBankでは起こりませんでした。




<div style="font-size:12px">
<select name="y">
<option>2008</option>
<option>2009</option>
<option>2010</option>
</select>
</div>



フォントのサイズ(12px)が小さいために


select の中の幅もそれに合わせて小さくなります。



20
08
--
20
09
--
20
10


こんな風に折れてしまいます。


selectの style属性 に width 指定や、font-size 指定をしましたが解消されず。


最終的には、以下のように、span で select をくくってそこだけフォントサイズを変えて対応しました。




<div style="font-size:12px">
<span style="font-size:20px;">
<select name="y">
<option>2008</option>
<option>2009</option>
<option>2010</option>
</select>
</span>
</div>



他にもよいやり方がありましたら、教えてください。





2008年8月26日火曜日

slow.log のlogrotate



slow.logは、自動的にlogroteしてくれないので、Cronで自前でやることにする。





#!/bin/sh


DATE=`date %Y%m%d`


mv /var/lib/mysql/slow.log /var/log/slow.$DATE.log


mysqladmin flush-logs (必要に応じてオプションをつける -u -h .... )






上記を 適当なファイルに記述して Cronで設定すればよい





2008年8月21日木曜日

携帯サイトで利用するJPG



携帯サイトで、JPG画像を利用して表示できない場合は、Content-Type を確認してみるとよい。



○ Content-Type: image/jpeg

× Content-Type: image/jpg


サーバ出力で画像を生成している場合などで、 image/jpg とするようなことは結構ある気がします。。。


私の場合は、PEAR::Image_Graph を使ったときに、Content-Type:image/jpg に出くわしました。





Image/Canvas/GD/JPG.php に、header 出力部分があるので利用の際は確認したほうがいいです。





2008年8月19日火曜日

PHPの最適化 12 PHP Optimization tips



(元ネタ http://www.ilia.ws/files/zend_performance.pdf)




  1. staticが使えるなら、staticを使う。速度は4倍になる。

  2. __get, __set, __autoload は避ける。

  3. require_once() はコストがかかる。

  4. include や require では絶対パスで指定する。

  5. スクリプトの開始時間は $_SERVER[’REQUEST_TIME’] で得る。

  6. 正規表現は、文字列関数で代用できないか探る。(文字を見つけるだけならstrposなどでもよい)

  7. str_replace は preg_replace より早いが、strtr は str_replace の4倍早い。

  8. 文字列/配列両方を受け入れる柔軟さを持つ関数は避ける。変わりに個別の関数を用意する。

  9. @によるエラー制御は遅い

  10. $row[’id’] は $row[id] より7倍早い

  11. エラーメッセージはコストがかかる

  12. for ($x=0; $x < count($array); $x) の count() のようにループの度に呼ばれる関数はさけ、変数に格納する。


ねた的には、古いですがふとしたときに思い出すと良いかも。


自社のフレームワークに、こういうエッセンスを入れていくのが重要なのかな。


個人的には、require_once は使いまくりなので、どうにかコスト削減に努めたいです。(便利だからねぇ)


弊社のプログラミングの基本的な方針



便利なコード >>>>(優先順位)>>>> パフォーマンスがでるコード(コスト小)


基本的に便利なほうを優先する傾向にあります。


ここで言う便利とは、使いやすく、理解しやすく、人間的に優しいもの。という意味です。


省略したり、コードを短くしたり、難解なテクニックを使うのは、プログラマーの質によって


ムラが出るため、チームで仕事をしたりしているといろいろ弊害が出てきます。


(みんながスーパープログラマーなら問題ないけどね。。。)


この辺はシステムの要件にもよります。


普通の公道を走るのに、F1のマシンは必要ないですね。


ただし、燃費が良いほうが好まれるのは、公道でも、F1でも同じです。


このあたりの必要なパフォーマンス要件をしっかりと事前に考えて取り組むのが重要かと。


また、必ずしもトレードオフとか限らないので


「人間にもマシンにとっても優しい方法」を考えるのはなかなか楽しいものです。


得てして、人間に優しいコードは、パフォーマンス的にも良い場合が少なくありません。


そういう気質は、すぐに目の前の仕事から脱線してあらぬ方向へ行ってしまいますが、


プログラマーには、必要な「遊びごころ」だと思ってます。





Xenコマンド備忘録



たまにしか使わないので良く忘れます。



・ドメインの起動( -c でコンソール接続)
xm create [ドメイン名]
xm create -c [ドメイン名]

・コンソールに接続
xm colsole [ドメイン名]

・稼動状況を表示
xm top

・ドメインのリスト表示
xm list

・終了
xm shutdown [ドメイン名]

・強制終了
xm destroy [ドメイン名]