※ パクレゼルヴではWeb開発エンジニアを大募集中!詳細はこちら

Archive

Archive for 2008/9

SQLチューニング基礎2  

2008/9/30 火曜日 21:11:41

こんばんわ。かーつんです。

SQL負荷って、考えたことありますか?

条件などにもよりますが、
SELECT、INSERT、DELETE、UPDATE順に徐々に重くなります。
理由は簡単。

SELECT=検索
INSERT=挿入+インデックスレコード追加
DELETE=検索+削除+インデックスレコード更新
UPDATE=検索+更新+インデックスレコード更新

と、処理が増えるからです。
例えば、UPDATEを100回投げるなら、
TRUNCATE+INSERTの方が早い事もあります。
要するに更新が一番重く、検索が一番早いわけですね。

で、よくあると思いますが、
あればUPDATEかけて、なければINSERTというのを
SELECT+UPDATE+INSERTの組み合わせでやってる方が多いと思います。
そんなときは、迷わずREPLACEを使いましょう。
REPLACEは検索+[更新|挿入]+インデックス[更新|挿入]です。

上の例だと、
SELECT+(UPDATE or INSERT)=検索+[(検索+更新)|挿入]
REPLACE=検索+[更新|挿入]

どちらが早いか一目瞭然ですよね。
検索一回分REPLACEの方が早いです。
もちろん条件的に無理。ということもありますが、
使えるときは使っちゃった方が、処理が早いです。

プログラムで、
ファイルレコード1件ごとにSELECT投げて、
UPDATEかINSERTか判断して実行して、
これを1000回繰り返す。コレは悪です。やってたら犯罪です。

一括でファイル読み込んで、
一括でSELECT投げて、
REPLACEで一気に1000回更新

置き換えれる時は迷わず変えてしまいましょうネ

以上。か^-^つんがお送りしました。

かーつん MySQL, データベース

自社で使っているフレームワークの便利な機能  

2008/9/30 火曜日 21:11:36

お疲れ様です。

のびーにょです。

表題の件
簡単に説明すると社内PCからのアクセス時とモバイル端末からのアクセス時で表示が変わります
え?普通ですって?

まぁ普通です
以下画像を見てください。
lab1.jpg
こんな感じでPCでデバッグできるようになっています。

最近はめっきり減りましたが昔はHTMLの表示部分も意識して作っていたので、フレームワークの記述ルールに従えば
一つのソースでHTMLとXHTMLと表示が変わっていました。(サンプルの画像のソースはXHTMLのみの記述)

モバイルからアクセスした場合はきちんとモバイルのみが出力されてるわけです。

んで、右側

こっちはデバッグ領域
直接画面に出力するわけじゃないので実運用中でもある程度のデバッグが可能です。

設定ファイルを書き換えればデバッグ内容をログに出力することもでき、携帯からアクセスしてもデバッグできます。

絵文字もフレームワーク規定の書き方をすれば当然3キャリアごとの出力です。

こんなの使ってても、結局最後は端末でデバッグしますが、開発中のデバッグはかなり楽なので結構いい感じです。

のびーにょ PHP, キャリア, システム, 携帯電話

Firefoxの検索バー  

2008/9/30 火曜日 20:32:50

そろそろプログラム歴1年のチョコボールです。

WEBブラウザは主にFirefoxを使っています。
(私以外の弊社システム開発部メンバーはみんな主に「Sleipnir」使ってます。。)

Firefoxデフォルトの設定でブラウザ右上部分にある「検索バー」について。

ググる時はだいたいここから検索する方、多いと思うんですが、辞書やYoutube動画、Wikipedia等、検索機能を追加していくことでかなり便利になります。

MozillaのFirefox用アドオンページ - 検索ページ
ここでは、メジャーな検索機能を追加していくことができます。

これがあると便利だな~的な検索エンジンがあまり用意されておらず、若干テンション下がりましたが、
ボランティアで運営されている「Mycroft プロジェクト」にて、マニアックな検索エンジンがたくさん紹介されています。

PHP関数を入力したらすぐにマニュアルの解説ページに飛べたらいいな~と思って探してみたら有りました!
「Mycroft プロジェクト」にて「php.net」と検索し、「PHP Function List - JP-ja」をクリックすることですぐに組み込めます。

便利ですね!

速度的には以前私が書いた記事、
PHP標準関数の手っ取り早い調べ方
http://labs.pakureserve.jp/archives/18
とあまり変わらないかもですが…。

eBay(海外オークション)で落札・出品をたまにするんですが、英文を作る時にすごく参考にしてるサイトがあります。
英語を学習されてる学生の方で利用している方は多いのではないでしょうか?
英辞郎 on the WEB
最近の言い回しも結構ヒットします。
「送料は」「DVDを焼く」「コーヒーが」という感じで作文的に検索しても目的に近い英文がヒットするので重宝してます。

これも有りました!
「alc.co.jp」と検索して「英辞郎 on the WEB」をクリックで。

ショートカットをうまく使うとさらに早くなるかもしれません。
「Ctrl + k」で検索バーの入力欄へ移動、入力して、「Ctrl + ↑」、「Ctrl + ↓」で検索エンジンを選択して「Enter」!
ちなみに新しいタブで検索結果を表示したい場合は、入力後、「Alt + Enter」です。

これからも便利な検索エンジン探してみようと思います。

MoriMoriMoriMori PHP, Tips, その他

PHPのecho と print について  

2008/9/29 月曜日 14:39:31

のびーにょです

今日は表題のことについて

実はprintはもechoも関数ではありません
両方とも言語構造です。
だから()でくくる必要がないのです。

何が違うのか

実はprintは返り値がありますがechoにはありません。
以下に例を出してみましょう

$data = print "はろーわーるど";
$data = echo "はろーわーるど";

上記内容、echoの方でエラーが出ます。

また、echoには複数の引数を指定することができますがprintはできません。
以下例

print "はろー","わーるど";
echo "はろー","わーるど";

上記内容の場合はprintの方でエラーが出ます。
注意点として、複数の引数をechoに渡す場合は()でくくってはいけません。
エラーになります。

echoとprintでは戻り値がない分、echoの方が早いです。
個人的にはHTML中で表示するような場合はechoで
スクリプトでデバッグやHTMLを表示しないようなプログラム(APサーバ)中はprintを使っています。

普通に使っている分にはあまり意識しないかも知れませんが、知っておくと何かと役に立つかも?
いえ、たぶんあんまり変わらないと思いますけど

のびーにょ PHP, Tips

csvファイルの一般的な書式  

2008/9/25 木曜日 18:56:59

久しぶりのチョコボールです。

最近CSV出力でちょっとハマりました。

プログラムでCSVファイルを生成する際、基本的に全てのフィールドに対してダブルクォーテーションで囲むようにしています。
必要とするCSVファイルによっては「ダブルクォーテーション無しで」という制約もありますので、そういった場合を除いての話です。

フィールド内にダブルクォーテーションやカンマが入っていなければ、フィールドデータをダブルクォーテーションで囲む必要は無いのですが、
入っていた場合、Excel等では正常に読み込めなくなります。
カンマを含むデータがフィールドに入っていた場合、「一つのフィールドの区切り」として認識しちゃいますから!

フィールドをダブルクォーテーションで囲んだ場合、フィールド内のダブルクォーテーションをエスケープする必要があります。

phpの世界ではエスケープといえば「\」マークをつけることが何かと多いです。
とあるシステムのCSV関連のクラスではフィールド内の「”」を「\”」と置換して出力しており、何の疑いも持たなかったんですが、
出力したCSVをExcelで読み込んでみたところ、ダブルクォーテーションを含むフィールドあたりでズレが生じてしまいました。

調べた結果、CSVファイルの一般的書式としてRFCが存在しました。

RFC4180

2005年の秋に制定されたようです。割と最近ですね。

要点をまとめると、

  • 改行コードは(CR+LF)。
  • 改行コード(CR+LF)、ダブルクォーテーション、カンマを含むフィールドは
    ダブルクォーテーションで囲むべきである。
  • フィールド内にダブルクォーテーションを含む場合は、
    その直前にひとつダブルクォーテーションを付加してエスケープしなければならない。
  • ファイル内最終レコードの末尾には改行コードがあってもなくてもよい。

フィールド内の「”」は「”"」のように置換してあげる必要があったのですね。

csvをRFC4180準拠で生成してやるとExcelでは読み込めると思います。

しかし、Excelでフィールド内でAlt + Enterで改行を入れてcsvとして保存するとその部分の改行コードはLFになります。。

取り敢えずRFC4180でのcsv形式が広く普及するといいな~と思います。

MoriMoriMoriMori PHP