Home

適当な日々

datetime型のカラムから日付データを引っ張ってくる際の高速化

ちょっとMySQLのチューニングをしたらすごく早くなったので、メモメモ。

datetime型のカラムから日付のみをwhere訳にデータを引っ張ってくることはよくあります。
で、レコードが数万行になってくるとけっこう遅くなったりする。
そしてカラムにインデックスを張っても全然速度があがらなかったりします。
これはクエリーがインデックスを使用していないからなんですね。
苦しまぎれにdate型のカラムを作って日付だけを入れるという手法もありますが、ちょっとスマートじゃないです。
datetime型を維持したままで高速化できます。

例えばこういうクエリー

SQL

select * from item where 'datetime' like '2010-06-23%';

あとはこんなクエリー

SQL

select * from item where 'datetime' >= '2010-06-23 00:00:00' and 'datetime' <= '2010-06-23 23:59:59';

後者の方がちょっとマシですが、どちらもインデックスを見ていないので、レコード数が増えるにつれてだんだんと重くなってきます。
このクエリーをこうしてあげましょう。

SQL

select * from item where 'datetime' between '2010-06-23 00:00:00' and '2010-06-23 23:59:59';

between datetime型 and datetime型の文体にすることでインデックスが使用され、高速化するんですね。
こんな書き方もできます。

SQL

select * from item where 'datetime' between '2010-06-23' and '2010-06-23' + interval 1 day;

かなり早くなるのでお試しください!
いままでのクエリーも書き直さないと・・・・。

ファミ通.comの「みんなのクロスレビュー」のブログパーツを作りました

ブログパーツを作らせていただきました。
ファミ通.comさんの「みんなのクロスレビュー」のブログパーツです。
みんなのクロスレビューというのは、様々なゲームの評点を集約してまとめたサービスです。
作らせていただいたブログパーツは、指定したゲームの点数やニュースを表示するというものです。
例えば、こんな感じです。


作る際に考えたのは「どうすれば使ってもらえるか?」ということでした。
ブログパーツというのは自分のブログに貼るものですから、まずブログの執筆者に気に入ってもらわなくてはいけない。
ブログの執筆者が気に入る理由というのは色々あると思いますが、「訪問者が面白がってくれそう」ならば貼ってもらえると考えました。
そこで、今回ブログパーツを作る際に気を使ったのはユーザーインターフェースと動きの部分です。
ブログパーツ上でボタンを押したりマウスを動かすことで、気持ちいい動きをするようなUIを目指しました。
その上で情報を分かりやすいように配置しています。
このブログパーツの制作中にiPhoneを買ったのですが、ちょっと影響を受けたかもしれません(笑)

「みんなのクロスレビュー」というプロジェクトについてですが、こちらは非常にユニークな試みです。
今までゲームの評価というものは、各メディア毎にバラバラにおこなわれていました。
amazonや楽天のレビューがそうですし、専門サイトとしてはmk24gamerといったものがあります。
もちろんファミ通も、編集者や、自社メディアでの一般ユーザーによる評点でゲームに評価をつけてきました。
「みんなのクロスレビュー」は、そういった様々のメディアのデータを集約し、集合知としての点数を付けようという試みです。
ちなみに海外ではmetacriticというサイトが取り組んでおり、ここで付けられた点数はユーザーにとって信頼度の高いものとなっています。
「みんなのクロスレビュー」で現在利用されているものは4メディアのデータですが、今後増えていくことになる予定らしいので、業界標準になれたら面白いな思ってます。

というわけで、技術的にも内容的にも充実したお仕事でした。

TweenerでTextFieldの文字の色やサイズ・マージン等を変化させる

Tweenerではオプション的に普段アクセス出来ない特殊なプロパティを扱う方法がある。
表題の件は、以下のような宣言をすることで使えるようになる。

AS3

import caurina.transitions.Tweener;
import caurina.transitions.properties.TextShortcuts;

TextShortcutsのリストをインポートしたら初期化

AS3

TextShortcuts.init();

これで、以下のようにTextFiledの値を変化させることができる。

AS3

Tweener.addTween(my_textFiled, { _text_color:0x00ffcc,_text_size:16,_text_leftMargin:50, time:1, transition:"linear" });

参考:http://www.tonpoo.com/tweener/properties/TextShortcuts.html

Loaderで外部ドメインのデータを読み込む場合のcrossdomain.xmlの認識

久しぶりに使ったら忘れていてハマったのでメモ
crossdomain.xmlの中身

XML

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
    <site-control permitted-cross-domain-policies="all" />
    <allow-access-from domain="*" />
</cross-domain-policy>

crossdomain.xmlを設置するだけじゃなくて、ポリシーファイルを使うって宣言しないといけない。

AS3

var myLoader= new Loader();
var myContext:LoaderContext = new LoaderContext(true);
myLoader.load(myUrl,myContext);

これでOK。

MovieClipのbuttonModeがうまく動作しない場合の対処方法

MovieClipに色々とaddChildしたものをボタンにした時、buttonMode=trueにしても子要素の上にマウスカーソルを合わせた時にカーソルが変わらない時がある。
こんなときはmouseChildren=falseを追加すればOK。

AS3

mc.buttonMode = true;
mc.mouseChildren = false;

ムービークリップ内のすべての要素をremoveChildする

AS3

while(mc.numChildren > 0){
	mc.removeChildAt(0);
}

これだけ!

最近更新してなかったので、メモがてら更新していきたいと思う今日この頃。

Linuxサーバの容量が圧迫されている時に原因のフォルダを調べるコマンド

なんか自宅のサーバが重いなと思ってたらサーバ容量がいっぱいいっぱいでした。
ということでサーバ容量が足りない時の容量が大きいフォルダの探し方メモ。
まずは全体の容量把握。

Bash

df -ah

これで使用しているパーセンテージが多いところを調べます。
今回は /usr/local が97%でした。
そこで以下のコマンドを実行。

Bash

du -m /usr/local | sort -n

これで /usr/local 以下のディレクトリを容量の昇順に並べてくれます。
あとはみつけたディレクトリのいらなそうなファイルをビシバシ消していけばオッケー!
(こういうのって、だいたいログファイルなんだよね・・・)

フリーランスになって1年がたったので色々とまとめてみた

僕が前の会社を辞めたのが2008年の11月。
そして、個人事業主として開業届けを出したのが12月だったので、ちょうど1年が経った。

振り返りや今後の指針の為にもこの1年の変化をまとめておこうと思う。

続きを読む

Web Designing12月号に記事を執筆しました

11月18日発売のWeb Designing12月号で記事を執筆させて頂きました。


Web Designing (ウェブデザイニング) 2009年 12月号 [雑誌]

今月のWeb Designingの特集は、「バナー&ブログパーツの設計図」なのですが、
その中の「Twitter APIのデータを利用したブログパーツ」という項(72ぺージ)です。
見開き1ページでtwitterのデータをブログパーツで使う方法を掲載しています。

以前『twiPhone』というiPhone風のtwitterブログパーツを作ったのですが、
その解説を中心に記事にしています。

そのほかの特集では様々なバナーやブログパーツを扱っていて、
いずれも業界を代表するトップクリエーターの方々が記事を書いていらっしゃるので、
僕なんかが混ざっていいのかなと恐縮してしています。

よかったら読んでみてください。

CakePHPでモデルから別のモデルを呼び出す方法

たまに必要になるけど忘れがちなのでメモっておきます。
例:他モデル内でUserモデルを使う

PHP

App::import('Model','User');
$User= new User;
$User->find('all');

というかモデル内に限らずどこからでも呼べそう。

Home

フィードとか

ページの上へ